Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 75 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 17339449 | 673 days ago | IN | 0 ETH | 0.00164923 | ||||
Set Approval For... | 17308517 | 677 days ago | IN | 0 ETH | 0.00161451 | ||||
Transfer From | 17082006 | 709 days ago | IN | 0 ETH | 0.00489393 | ||||
Set Approval For... | 16468442 | 796 days ago | IN | 0 ETH | 0.00070193 | ||||
Withdraw | 16460903 | 797 days ago | IN | 0 ETH | 0.00046291 | ||||
Mint | 16458266 | 797 days ago | IN | 0.1 ETH | 0.00123355 | ||||
Mint | 16458264 | 797 days ago | IN | 0.1 ETH | 0.00115117 | ||||
Mint | 16458263 | 797 days ago | IN | 0.1 ETH | 0.00117088 | ||||
Mint | 16458262 | 797 days ago | IN | 0.1 ETH | 0.0011788 | ||||
Mint | 16458260 | 797 days ago | IN | 0.1 ETH | 0.00123068 | ||||
Mint | 16458259 | 797 days ago | IN | 0.1 ETH | 0.0012463 | ||||
Mint | 16458258 | 797 days ago | IN | 0.1 ETH | 0.00112772 | ||||
Mint | 16458257 | 797 days ago | IN | 0.1 ETH | 0.00118241 | ||||
Mint | 16458256 | 797 days ago | IN | 0.1 ETH | 0.00116005 | ||||
Mint | 16458255 | 797 days ago | IN | 0.1 ETH | 0.00120784 | ||||
Mint | 16458253 | 797 days ago | IN | 0.1 ETH | 0.00123611 | ||||
Mint | 16458250 | 797 days ago | IN | 0.1 ETH | 0.00121224 | ||||
Mint | 16458248 | 797 days ago | IN | 0.1 ETH | 0.00133925 | ||||
Mint | 16458246 | 797 days ago | IN | 0.1 ETH | 0.00144992 | ||||
Mint | 16458244 | 797 days ago | IN | 0.1 ETH | 0.00130935 | ||||
Mint | 16458242 | 797 days ago | IN | 0.1 ETH | 0.00120858 | ||||
Mint | 16458236 | 797 days ago | IN | 0.1 ETH | 0.00121845 | ||||
Mint | 16458234 | 797 days ago | IN | 0.1 ETH | 0.00114301 | ||||
Mint | 16458233 | 797 days ago | IN | 0.1 ETH | 0.00115666 | ||||
Mint | 16458198 | 797 days ago | IN | 0.1 ETH | 0.00116854 |
Latest 7 internal transactions
Advanced mode:
Loading...
Loading
Contract Name:
AyyyliensSecondEdition
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // Amended by AYYYLIEN BOSS /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%S###@###S*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S#@@@@@@@@@@@@@@@@##%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##@@@@@@@@@@@@@@@@@@@@@@@#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#.@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@##SSS#@@#S?*+;;;+*?S@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@*@@@@@@@@@@@@@S*;:,....,,,,...........:+S@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@S+,...........................;S@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@S;................................*@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?,..................................+@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@#@@@@@@@@@?.....................................+@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@#@@@@@@@@@%.......................................*@@@@@@@@@@@@@?@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@%@@@@@@@@@#,...............+:......................,S@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@+...............,#:.......................;@@@@@@@@@@@@@#@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@#@@@@@@@@@#,...............:#,........................S@@@@@@@@@@@@@?@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@.@@@@@@@@@@?................:#,........................*@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@#@@@@@@@@@@+................;#.........................:@@@@@@@@@@@@@@S@@@@@@@@@@@@@ @@@@@@@@@@@@@@@+@@@@@@@@@@@:................;#..........................#@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@#@@@@@@@@@@#,................;#..........................%@@@@@@@@@@@@@@S@@@@@@@@@@@@ @@@@@@@@@@@@@@.@@@@@@@@@@@S.................:#,.........................*@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@#@@@@@@@@@@@%.................,#,.........................+@@@@@@@@@@@@@@@*@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@*..................S+.........................;@@@@@@@@@@@@@@@#@@@@@@@@@@@ @@@@@@@@@@@@@?@@@@@@@@@@@@+..................?%.........................:@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@#@@@@@@@@@@@@+..................;#,........................:@@@@@@@@@@@@@@@@%@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@;..................,#,........................:@@@@@@@@@@@@@@@@#@@@@@@@@@@ @@@@@@@@@@@@.@@@@@@@@@@@@@;..................,#:........................:@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@S@@@@@@@@@@@@@;...................#;........................:@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@#@@@@@@@@@@@@@+...................#;........................:@@@@@@@@@@@@@@@@@?@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@*...................S;........................;@@@@@@@@@@@@@@@@@#@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@%...................S+........................+@@@@@@@@@@@@@@@@@#@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@S...................%*...........;?SSS?;......*@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@,....,::,..........??.........,%#?++*?%,.....?@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@.@@@@@@@@@@@@@@@+....;###S?:.......+#........:#%,............S@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@*@@@@@@@@@@@@@@@%.....,,:+%#?,.....,#;......:#?.............,@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@%@@@@@@@@@@@@@@@@:.........:%#:.....:,.....:#*...,;+**+:....;@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@%@@@@@@@@@@@@@@@@*.,*%%*;,...*@;..........,#?..:?#@@@@@@S;..*@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@*@@@@@@@@@@@@@@@@#:S@@@@@#?:..+@+........,S%.,?@@@@@#;;#@#..S@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@%;.;@+.......%S.;#@@@@@@#:.?@#.,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%:;#,.....*#,*@@@@@@@@@#,?@%.+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?,?@+,......*:*@@@@@@@@@@@:S@;.S@@@@@@@@@@@@@@@@@@@#@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*.%@*.......;@@@@@@@@@@@@S@?.:@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+?@@:......S@@@@@@@@@@@@@%,.?@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@ @@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@,......;#@@@@@@@@@@@%,.,#@@@@@@@@@@@@@@@@@@@@*@@@@@@@@@ @@@@@@@@@@@@S@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%:........,*S@@@@@@@#+...*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S+#@@@@@#%+:..........:S;,:+**+:..,.,#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*,;+*+:,.:S:.........,*#%:.....:S+.?@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@ @@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@S;,...,?#*...:,.......:?#S?**%#?,;@@@@@@@@@@@@@@@@@@@@@@*@@@@@@@@@@ @@@@@@@@@@@@@*@@@@@@@@@@@@@@@@@@@@##S%S#S:...:#:....+:...,+?%%*:.,#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#,:+*+:....:#*:::;.*@;.........,S@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@ @@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@?........;@*.?*:?..*@:.......,S@#?@@@@@@@@@@@@@@@@@@@@;@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%:.....,#*..,......*#,.....;#@@#;?@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@ @@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@*....*S...........S?....*@@%%@@;+@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@ @@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@S:..::...........;#,..*@@*..?@#,:S@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@#;...............+,.+@@+...,S@%..;#@@@@@@@@@@@@%@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?@#%@@+................:@@*.....:#@;..,#@@@@@@@@@@#@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@S@@@@@@@@@@@@@@@@%,@@:?@@;...............S@%.......%@;..,#@@@@@@@@@@+@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@*.%@S,?@#,...:::++;,...+@#,......:@@:..*@@@@@@@@@@#@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@*@@@@@@@@@@@@@@@%.:#@@%@@%..%###SS#;..:@@;.....,+@@?..:@@#@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@S@@@@@@@@@@@@@@@;.:%@@@@@*.+:,,..,,.,#@%:;;+*%#@@%,.,#@?,;%@@@@@;@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@#;..:*S@@@*........:S@@@@@@@@@@S+..,%@S,...;@@@S@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@?,...,*@@%;,,,,:*@@@@##S%%*+:...,%@#:...,S@@#@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@#+,...+@@@@###@@@%;,,........,*#@#;...,S@@#@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*,:S@@#%;..;#@@@@@@@+..,,::::;;*%@@@%:...:S@@#@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#*,....+S@@@S:.:#@%;@@+.:%#@@@@@@@@@@S+....;#@@#@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@#@@@@*,........S@@@#;.;@@S@S.+@@@@#@@#S%?+:.....+@@@#@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@#@@@*.........%@*#@@:.?@@@::@@S@#;@@:........,%@@@S@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@S;.......%@+#@@#,,@@%.S@*+@%*@?........+#@@@%@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@?@@@@%:.....S@;#@#@?.*#;:@@,?@*S@;......;S@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@?:...#@:#@;@@;.,.*@%.S@+#@,...,;S@@@@S@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.#@@@@S+:@#,@@,*@S...%@+,@@;@#..:*#@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*#@@@@@@#+@#..#@;..S@::@S;@#*S@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.#@@@@@@@#?+%@%::#@+*@#S@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S#@@@@@@@@@@@@@@@@@@@@@@@#*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*##@@@@@@@@@@@@@@@#S@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.%SS###SS*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ /| / / || / | / / //| / / ___ ___ __ || / | / / ___ // ___ ___ // | / / //___) ) || / / //___) ) // ) ) || / /||/ / // ) ) // || / / //___) ) (( ) ) // | / / // || / / // // ||/ / | / // / / // || / / // \ \ // |/ / ((____ ||/ / ((____ // | / | / ((___/ / // ||/ / ((____ // ) ) = */ pragma solidity >=0.7.0 <0.9.0; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract AyyyliensSecondEdition is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenUri; uint256 public cost = 0.05 ether; uint256 public maxSupply = 50; uint256 public maxPhase2MintAmount = 2; uint256 public maxPhase1MintAmount = 1; mapping(address => uint256) public phase1MintedBalance; bool public paused = true; bool public phase1Mint = true; bool public revealed = false; address[] public phase1Addresses; constructor() ERC721("Ayyyliens Second Edition", "A3YSE") { setHiddenUri("ipfs://QmcWDVP5Yq27tzhJu5zQjA9gk2iqRuwA6uDyBR7WKL1Wm6/hidden.json"); } // MINT FUNCTIONS ======================================================================= modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxPhase2MintAmount, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(msg.sender == tx.origin); require(!paused, "The contract is paused!"); require(msg.value >= cost * _mintAmount, "Insufficient funds!"); require(IERC721(0xDC0Fc76A7E38B63e713773e9A44eF0D7867f7672).balanceOf(msg.sender) > 0, "Must be Ayyyliens Holder to mint"); if(phase1Mint == true) { require(isMintListed(msg.sender), "You are not on Phase 1 mint list"); uint256 ownerMintedCount = phase1MintedBalance[msg.sender]; require(ownerMintedCount < maxPhase1MintAmount, "You have already minted your Phase 1 token"); phase1MintedBalance[msg.sender] = _mintAmount; } _mintLoop(msg.sender, _mintAmount); } function bossMint(uint256 _mintAmount) public onlyOwner{ require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _mintLoop(msg.sender, _mintAmount); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _mint(_receiver, supply.current()); } } function mintForAddress(uint256 _mintAmount, address _receiver) public onlyOwner { require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _mintLoop(_receiver, _mintAmount); } // Mint List Functions ====================================================== function mintListAddresses(address[] calldata _users) public onlyOwner { delete phase1Addresses; phase1Addresses = _users; } function isMintListed(address _user) public view returns (bool) { for (uint i = 0; i < phase1Addresses.length; i++) { if (phase1Addresses[i] == _user) { return true; } } return false; } // Snapshot Function ========================================================= function Snapshot() public view onlyOwner returns (address[] memory){ address[] memory owners = new address[](totalSupply()); for(uint i=1; i <= totalSupply(); i++){ owners[i -1] = ownerOf(i); } return owners; } //Contract Functions ========================================================= function totalSupply() public view returns (uint256) { return supply.current(); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } // Owner Functions ================================================ function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setPhase2MintLimit(uint256 _mintLimit) public onlyOwner { maxPhase2MintAmount = _mintLimit; } function setPhase1MintLimit(uint256 _mintLimit) public onlyOwner { maxPhase1MintAmount = _mintLimit; } function setHiddenUri(string memory _hiddenUri) public onlyOwner { hiddenUri = _hiddenUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setPhase1(bool _state) public onlyOwner { phase1Mint = _state; } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } // Withdraw ===================================================================== function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./extensions/IERC721Metadata.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/Strings.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); 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: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Snapshot","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"bossMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isMintListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPhase1MintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPhase2MintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"mintListAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"phase1Addresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase1Mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"phase1MintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenUri","type":"string"}],"name":"setHiddenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPhase1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"setPhase1MintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"setPhase2MintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":[{"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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b916008916200021c565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a916009916200021c565b5066b1a2bc2ec50000600b556032600c556002600d556001600e556010805462ffffff19166101011790553480156200008257600080fd5b50604080518082018252601881527f417979796c69656e73205365636f6e642045646974696f6e0000000000000000602080830191825283518085019094526005845264413359534560d81b908401528151919291620000e5916000916200021c565b508051620000fb9060019060208401906200021c565b50505062000118620001126200014260201b60201c565b62000146565b6200013c604051806080016040528060418152602001620029c86041913962000198565b620002ff565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001a2620001bb565b8051620001b790600a9060208401906200021c565b5050565b6006546001600160a01b031633146200021a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b8280546200022a90620002c2565b90600052602060002090601f0160209004810192826200024e576000855562000299565b82601f106200026957805160ff191683800117855562000299565b8280016001018555821562000299579182015b82811115620002995782518255916020019190600101906200027c565b50620002a7929150620002ab565b5090565b5b80821115620002a75760008155600101620002ac565b600181811c90821680620002d757607f821691505b60208210811415620002f957634e487b7160e01b600052602260045260246000fd5b50919050565b6126b9806200030f6000396000f3fe60806040526004361061027d5760003560e01c80636352211e1161014f578063a22cb465116100c1578063d8a951471161007a578063d8a9514714610753578063deaafcf214610773578063e0a8085314610792578063e985e9c5146107b2578063efbd73f4146107fb578063f2fde38b1461081b57600080fd5b8063a22cb465146106a8578063a2fce7af146106c8578063b88d4fde146106e8578063c5be875014610708578063c87b56dd1461071d578063d5abeb011461073d57600080fd5b8063808ffcd811610113578063808ffcd81461060c5780638d18c9701461062c5780638da5cb5b1461064257806395d89b41146106605780639dadfdb314610675578063a0712d681461069557600080fd5b80636352211e1461058157806368106d3e146105a157806370a08231146105b7578063715018a6146105d75780637ec4a659146105ec57600080fd5b806334d46def116101f357806351830227116101ac57806351830227146104dd5780635295d4cf146104fd5780635503a0e81461051d578063587d3861146105325780635c975abb1461055257806362b99ad41461056c57600080fd5b806334d46def1461040e5780633ccfd60b1461043b57806342842e0e14610450578063438b63001461047057806344a0d68a1461049d57806348416d13146104bd57600080fd5b806313faede61161024557806313faede61461035357806316ba10e01461037757806316c38b3c1461039757806318160ddd146103b757806323b872dd146103cc578063243e1bce146103ec57600080fd5b806301ffc9a71461028257806306fdde03146102b7578063081812fc146102d9578063095ea7b3146103115780631067fcc714610333575b600080fd5b34801561028e57600080fd5b506102a261029d3660046121b2565b61083b565b60405190151581526020015b60405180910390f35b3480156102c357600080fd5b506102cc61088d565b6040516102ae919061243c565b3480156102e557600080fd5b506102f96102f4366004612235565b61091f565b6040516001600160a01b0390911681526020016102ae565b34801561031d57600080fd5b5061033161032c3660046120f8565b610946565b005b34801561033f57600080fd5b5061033161034e3660046121ec565b610a61565b34801561035f57600080fd5b50610369600b5481565b6040519081526020016102ae565b34801561038357600080fd5b506103316103923660046121ec565b610a80565b3480156103a357600080fd5b506103316103b2366004612197565b610a9b565b3480156103c357600080fd5b50610369610ab6565b3480156103d857600080fd5b506103316103e7366004612016565b610ac6565b3480156103f857600080fd5b50610401610af7565b6040516102ae91906123b7565b34801561041a57600080fd5b50610369610429366004611fc8565b600f6020526000908152604090205481565b34801561044757600080fd5b50610331610bb5565b34801561045c57600080fd5b5061033161046b366004612016565b610c31565b34801561047c57600080fd5b5061049061048b366004611fc8565b610c4c565b6040516102ae9190612404565b3480156104a957600080fd5b506103316104b8366004612235565b610d2d565b3480156104c957600080fd5b506102f96104d8366004612235565b610d3a565b3480156104e957600080fd5b506010546102a29062010000900460ff1681565b34801561050957600080fd5b50610331610518366004612122565b610d64565b34801561052957600080fd5b506102cc610d84565b34801561053e57600080fd5b5061033161054d366004612197565b610e12565b34801561055e57600080fd5b506010546102a29060ff1681565b34801561057857600080fd5b506102cc610e34565b34801561058d57600080fd5b506102f961059c366004612235565b610e41565b3480156105ad57600080fd5b50610369600d5481565b3480156105c357600080fd5b506103696105d2366004611fc8565b610ea1565b3480156105e357600080fd5b50610331610f27565b3480156105f857600080fd5b506103316106073660046121ec565b610f3b565b34801561061857600080fd5b506102a2610627366004611fc8565b610f56565b34801561063857600080fd5b50610369600e5481565b34801561064e57600080fd5b506006546001600160a01b03166102f9565b34801561066c57600080fd5b506102cc610fc0565b34801561068157600080fd5b50610331610690366004612235565b610fcf565b6103316106a3366004612235565b611016565b3480156106b457600080fd5b506103316106c33660046120ce565b611322565b3480156106d457600080fd5b506103316106e3366004612235565b61132d565b3480156106f457600080fd5b50610331610703366004612052565b61133a565b34801561071457600080fd5b506102cc611372565b34801561072957600080fd5b506102cc610738366004612235565b61137f565b34801561074957600080fd5b50610369600c5481565b34801561075f57600080fd5b5061033161076e366004612235565b6114ff565b34801561077f57600080fd5b506010546102a290610100900460ff1681565b34801561079e57600080fd5b506103316107ad366004612197565b61150c565b3480156107be57600080fd5b506102a26107cd366004611fe3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561080757600080fd5b50610331610816366004612267565b611530565b34801561082757600080fd5b50610331610836366004611fc8565b611577565b60006001600160e01b031982166380ac58cd60e01b148061086c57506001600160e01b03198216635b5e139f60e01b145b8061088757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461089c906125ab565b80601f01602080910402602001604051908101604052809291908181526020018280546108c8906125ab565b80156109155780601f106108ea57610100808354040283529160200191610915565b820191906000526020600020905b8154815290600101906020018083116108f857829003601f168201915b5050505050905090565b600061092a826115ed565b506000908152600460205260409020546001600160a01b031690565b600061095182610e41565b9050806001600160a01b0316836001600160a01b031614156109c45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806109e057506109e081336107cd565b610a525760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016109bb565b610a5c838361164c565b505050565b610a696116ba565b8051610a7c90600a906020840190611e1c565b5050565b610a886116ba565b8051610a7c906009906020840190611e1c565b610aa36116ba565b6010805460ff1916911515919091179055565b6000610ac160075490565b905090565b610ad03382611714565b610aec5760405162461bcd60e51b81526004016109bb906124cf565b610a5c838383611793565b6060610b016116ba565b6000610b0b610ab6565b67ffffffffffffffff811115610b2357610b23612657565b604051908082528060200260200182016040528015610b4c578160200160208202803683370190505b50905060015b610b5a610ab6565b8111610baf57610b6981610e41565b82610b75600184612568565b81518110610b8557610b85612641565b6001600160a01b039092166020928302919091019091015280610ba7816125e6565b915050610b52565b50905090565b610bbd6116ba565b6000610bd16006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610c1b576040519150601f19603f3d011682016040523d82523d6000602084013e610c20565b606091505b5050905080610c2e57600080fd5b50565b610a5c8383836040518060200160405280600081525061133a565b60606000610c5983610ea1565b905060008167ffffffffffffffff811115610c7657610c76612657565b604051908082528060200260200182016040528015610c9f578160200160208202803683370190505b509050600160005b8381108015610cb85750600c548211155b15610d23576000610cc883610e41565b9050866001600160a01b0316816001600160a01b03161415610d105782848381518110610cf757610cf7612641565b602090810291909101015281610d0c816125e6565b9250505b82610d1a816125e6565b93505050610ca7565b5090949350505050565b610d356116ba565b600b55565b60118181548110610d4a57600080fd5b6000918252602090912001546001600160a01b0316905081565b610d6c6116ba565b610d7860116000611ea0565b610a5c60118383611ebe565b60098054610d91906125ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbd906125ab565b8015610e0a5780601f10610ddf57610100808354040283529160200191610e0a565b820191906000526020600020905b815481529060010190602001808311610ded57829003601f168201915b505050505081565b610e1a6116ba565b601080549115156101000261ff0019909216919091179055565b60088054610d91906125ab565b6000818152600260205260408120546001600160a01b0316806108875760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109bb565b60006001600160a01b038216610f0b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016109bb565b506001600160a01b031660009081526003602052604090205490565b610f2f6116ba565b610f39600061192f565b565b610f436116ba565b8051610a7c906008906020840190611e1c565b6000805b601154811015610fb757826001600160a01b031660118281548110610f8157610f81612641565b6000918252602090912001546001600160a01b03161415610fa55750600192915050565b80610faf816125e6565b915050610f5a565b50600092915050565b60606001805461089c906125ab565b610fd76116ba565b600c5481610fe460075490565b610fee919061251d565b111561100c5760405162461bcd60e51b81526004016109bb906124a1565b610c2e3382611981565b806000811180156110295750600d548111155b61106c5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b60448201526064016109bb565b600c548161107960075490565b611083919061251d565b11156110a15760405162461bcd60e51b81526004016109bb906124a1565b3332146110ad57600080fd5b60105460ff16156111005760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e7472616374206973207061757365642100000000000000000060448201526064016109bb565b81600b5461110e9190612549565b3410156111535760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109bb565b6040516370a0823160e01b815233600482015260009073dc0fc76a7e38b63e713773e9a44ef0d7867f7672906370a082319060240160206040518083038186803b1580156111a057600080fd5b505afa1580156111b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d8919061224e565b116112255760405162461bcd60e51b815260206004820181905260248201527f4d75737420626520417979796c69656e7320486f6c64657220746f206d696e7460448201526064016109bb565b60105460ff610100909104161515600114156113185761124433610f56565b6112905760405162461bcd60e51b815260206004820181905260248201527f596f7520617265206e6f74206f6e2050686173652031206d696e74206c69737460448201526064016109bb565b336000908152600f6020526040902054600e5481106113045760405162461bcd60e51b815260206004820152602a60248201527f596f75206861766520616c7265616479206d696e74656420796f75722050686160448201526939b29018903a37b5b2b760b11b60648201526084016109bb565b50336000908152600f602052604090208290555b610a7c3383611981565b610a7c3383836119be565b6113356116ba565b600d55565b6113443383611714565b6113605760405162461bcd60e51b81526004016109bb906124cf565b61136c84848484611a8d565b50505050565b600a8054610d91906125ab565b6000818152600260205260409020546060906001600160a01b03166113fe5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109bb565b60105462010000900460ff166114a057600a805461141b906125ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611447906125ab565b80156114945780601f1061146957610100808354040283529160200191611494565b820191906000526020600020905b81548152906001019060200180831161147757829003601f168201915b50505050509050919050565b60006114aa611ac0565b905060008151116114ca57604051806020016040528060008152506114f8565b806114d484611acf565b60096040516020016114e8939291906122b6565b6040516020818303038152906040525b9392505050565b6115076116ba565b600e55565b6115146116ba565b60108054911515620100000262ff000019909216919091179055565b6115386116ba565b600c548261154560075490565b61154f919061251d565b111561156d5760405162461bcd60e51b81526004016109bb906124a1565b610a7c8183611981565b61157f6116ba565b6001600160a01b0381166115e45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b610c2e8161192f565b6000818152600260205260409020546001600160a01b0316610c2e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109bb565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061168182610e41565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610f395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109bb565b60008061172083610e41565b9050806001600160a01b0316846001600160a01b0316148061176757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061178b5750836001600160a01b03166117808461091f565b6001600160a01b0316145b949350505050565b826001600160a01b03166117a682610e41565b6001600160a01b03161461180a5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016109bb565b6001600160a01b03821661186c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b61187760008261164c565b6001600160a01b03831660009081526003602052604081208054600192906118a0908490612568565b90915550506001600160a01b03821660009081526003602052604081208054600192906118ce90849061251d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81811015610a5c5761199a600780546001019055565b6119ac836119a760075490565b611bcd565b806119b6816125e6565b915050611984565b816001600160a01b0316836001600160a01b03161415611a205760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109bb565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a98848484611793565b611aa484848484611d0f565b61136c5760405162461bcd60e51b81526004016109bb9061244f565b60606008805461089c906125ab565b606081611af35750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b1d5780611b07816125e6565b9150611b169050600a83612535565b9150611af7565b60008167ffffffffffffffff811115611b3857611b38612657565b6040519080825280601f01601f191660200182016040528015611b62576020820181803683370190505b5090505b841561178b57611b77600183612568565b9150611b84600a86612601565b611b8f90603061251d565b60f81b818381518110611ba457611ba4612641565b60200101906001600160f81b031916908160001a905350611bc6600a86612535565b9450611b66565b6001600160a01b038216611c235760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109bb565b6000818152600260205260409020546001600160a01b031615611c885760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109bb565b6001600160a01b0382166000908152600360205260408120805460019290611cb190849061251d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15611e1157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d5390339089908890889060040161237a565b602060405180830381600087803b158015611d6d57600080fd5b505af1925050508015611d9d575060408051601f3d908101601f19168201909252611d9a918101906121cf565b60015b611df7573d808015611dcb576040519150601f19603f3d011682016040523d82523d6000602084013e611dd0565b606091505b508051611def5760405162461bcd60e51b81526004016109bb9061244f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061178b565b506001949350505050565b828054611e28906125ab565b90600052602060002090601f016020900481019282611e4a5760008555611e90565b82601f10611e6357805160ff1916838001178555611e90565b82800160010185558215611e90579182015b82811115611e90578251825591602001919060010190611e75565b50611e9c929150611f11565b5090565b5080546000825590600052602060002090810190610c2e9190611f11565b828054828255906000526020600020908101928215611e90579160200282015b82811115611e905781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611ede565b5b80821115611e9c5760008155600101611f12565b600067ffffffffffffffff80841115611f4157611f41612657565b604051601f8501601f19908116603f01168101908282118183101715611f6957611f69612657565b81604052809350858152868686011115611f8257600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611fb357600080fd5b919050565b80358015158114611fb357600080fd5b600060208284031215611fda57600080fd5b6114f882611f9c565b60008060408385031215611ff657600080fd5b611fff83611f9c565b915061200d60208401611f9c565b90509250929050565b60008060006060848603121561202b57600080fd5b61203484611f9c565b925061204260208501611f9c565b9150604084013590509250925092565b6000806000806080858703121561206857600080fd5b61207185611f9c565b935061207f60208601611f9c565b925060408501359150606085013567ffffffffffffffff8111156120a257600080fd5b8501601f810187136120b357600080fd5b6120c287823560208401611f26565b91505092959194509250565b600080604083850312156120e157600080fd5b6120ea83611f9c565b915061200d60208401611fb8565b6000806040838503121561210b57600080fd5b61211483611f9c565b946020939093013593505050565b6000806020838503121561213557600080fd5b823567ffffffffffffffff8082111561214d57600080fd5b818501915085601f83011261216157600080fd5b81358181111561217057600080fd5b8660208260051b850101111561218557600080fd5b60209290920196919550909350505050565b6000602082840312156121a957600080fd5b6114f882611fb8565b6000602082840312156121c457600080fd5b81356114f88161266d565b6000602082840312156121e157600080fd5b81516114f88161266d565b6000602082840312156121fe57600080fd5b813567ffffffffffffffff81111561221557600080fd5b8201601f8101841361222657600080fd5b61178b84823560208401611f26565b60006020828403121561224757600080fd5b5035919050565b60006020828403121561226057600080fd5b5051919050565b6000806040838503121561227a57600080fd5b8235915061200d60208401611f9c565b600081518084526122a281602086016020860161257f565b601f01601f19169290920160200192915050565b6000845160206122c98285838a0161257f565b8551918401916122dc8184848a0161257f565b8554920191600090600181811c90808316806122f957607f831692505b85831081141561231757634e487b7160e01b85526022600452602485fd5b80801561232b576001811461233c57612369565b60ff19851688528388019550612369565b60008b81526020902060005b858110156123615781548a820152908401908801612348565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123ad9083018461228a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123f85783516001600160a01b0316835292840192918401916001016123d3565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123f857835183529284019291840191600101612420565b6020815260006114f8602083018461228a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6000821982111561253057612530612615565b500190565b6000826125445761254461262b565b500490565b600081600019048311821515161561256357612563612615565b500290565b60008282101561257a5761257a612615565b500390565b60005b8381101561259a578181015183820152602001612582565b8381111561136c5750506000910152565b600181811c908216806125bf57607f821691505b602082108114156125e057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125fa576125fa612615565b5060010190565b6000826126105761261061262b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610c2e57600080fdfea264697066735822122044d8b8d1f528827d8c22cc203243e57014610e23149b001c13d70f7ea8df5a5564736f6c63430008070033697066733a2f2f516d63574456503559713237747a684a75357a516a4139676b3269715275774136754479425237574b4c31576d362f68696464656e2e6a736f6e
Deployed Bytecode
0x60806040526004361061027d5760003560e01c80636352211e1161014f578063a22cb465116100c1578063d8a951471161007a578063d8a9514714610753578063deaafcf214610773578063e0a8085314610792578063e985e9c5146107b2578063efbd73f4146107fb578063f2fde38b1461081b57600080fd5b8063a22cb465146106a8578063a2fce7af146106c8578063b88d4fde146106e8578063c5be875014610708578063c87b56dd1461071d578063d5abeb011461073d57600080fd5b8063808ffcd811610113578063808ffcd81461060c5780638d18c9701461062c5780638da5cb5b1461064257806395d89b41146106605780639dadfdb314610675578063a0712d681461069557600080fd5b80636352211e1461058157806368106d3e146105a157806370a08231146105b7578063715018a6146105d75780637ec4a659146105ec57600080fd5b806334d46def116101f357806351830227116101ac57806351830227146104dd5780635295d4cf146104fd5780635503a0e81461051d578063587d3861146105325780635c975abb1461055257806362b99ad41461056c57600080fd5b806334d46def1461040e5780633ccfd60b1461043b57806342842e0e14610450578063438b63001461047057806344a0d68a1461049d57806348416d13146104bd57600080fd5b806313faede61161024557806313faede61461035357806316ba10e01461037757806316c38b3c1461039757806318160ddd146103b757806323b872dd146103cc578063243e1bce146103ec57600080fd5b806301ffc9a71461028257806306fdde03146102b7578063081812fc146102d9578063095ea7b3146103115780631067fcc714610333575b600080fd5b34801561028e57600080fd5b506102a261029d3660046121b2565b61083b565b60405190151581526020015b60405180910390f35b3480156102c357600080fd5b506102cc61088d565b6040516102ae919061243c565b3480156102e557600080fd5b506102f96102f4366004612235565b61091f565b6040516001600160a01b0390911681526020016102ae565b34801561031d57600080fd5b5061033161032c3660046120f8565b610946565b005b34801561033f57600080fd5b5061033161034e3660046121ec565b610a61565b34801561035f57600080fd5b50610369600b5481565b6040519081526020016102ae565b34801561038357600080fd5b506103316103923660046121ec565b610a80565b3480156103a357600080fd5b506103316103b2366004612197565b610a9b565b3480156103c357600080fd5b50610369610ab6565b3480156103d857600080fd5b506103316103e7366004612016565b610ac6565b3480156103f857600080fd5b50610401610af7565b6040516102ae91906123b7565b34801561041a57600080fd5b50610369610429366004611fc8565b600f6020526000908152604090205481565b34801561044757600080fd5b50610331610bb5565b34801561045c57600080fd5b5061033161046b366004612016565b610c31565b34801561047c57600080fd5b5061049061048b366004611fc8565b610c4c565b6040516102ae9190612404565b3480156104a957600080fd5b506103316104b8366004612235565b610d2d565b3480156104c957600080fd5b506102f96104d8366004612235565b610d3a565b3480156104e957600080fd5b506010546102a29062010000900460ff1681565b34801561050957600080fd5b50610331610518366004612122565b610d64565b34801561052957600080fd5b506102cc610d84565b34801561053e57600080fd5b5061033161054d366004612197565b610e12565b34801561055e57600080fd5b506010546102a29060ff1681565b34801561057857600080fd5b506102cc610e34565b34801561058d57600080fd5b506102f961059c366004612235565b610e41565b3480156105ad57600080fd5b50610369600d5481565b3480156105c357600080fd5b506103696105d2366004611fc8565b610ea1565b3480156105e357600080fd5b50610331610f27565b3480156105f857600080fd5b506103316106073660046121ec565b610f3b565b34801561061857600080fd5b506102a2610627366004611fc8565b610f56565b34801561063857600080fd5b50610369600e5481565b34801561064e57600080fd5b506006546001600160a01b03166102f9565b34801561066c57600080fd5b506102cc610fc0565b34801561068157600080fd5b50610331610690366004612235565b610fcf565b6103316106a3366004612235565b611016565b3480156106b457600080fd5b506103316106c33660046120ce565b611322565b3480156106d457600080fd5b506103316106e3366004612235565b61132d565b3480156106f457600080fd5b50610331610703366004612052565b61133a565b34801561071457600080fd5b506102cc611372565b34801561072957600080fd5b506102cc610738366004612235565b61137f565b34801561074957600080fd5b50610369600c5481565b34801561075f57600080fd5b5061033161076e366004612235565b6114ff565b34801561077f57600080fd5b506010546102a290610100900460ff1681565b34801561079e57600080fd5b506103316107ad366004612197565b61150c565b3480156107be57600080fd5b506102a26107cd366004611fe3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561080757600080fd5b50610331610816366004612267565b611530565b34801561082757600080fd5b50610331610836366004611fc8565b611577565b60006001600160e01b031982166380ac58cd60e01b148061086c57506001600160e01b03198216635b5e139f60e01b145b8061088757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461089c906125ab565b80601f01602080910402602001604051908101604052809291908181526020018280546108c8906125ab565b80156109155780601f106108ea57610100808354040283529160200191610915565b820191906000526020600020905b8154815290600101906020018083116108f857829003601f168201915b5050505050905090565b600061092a826115ed565b506000908152600460205260409020546001600160a01b031690565b600061095182610e41565b9050806001600160a01b0316836001600160a01b031614156109c45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806109e057506109e081336107cd565b610a525760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016109bb565b610a5c838361164c565b505050565b610a696116ba565b8051610a7c90600a906020840190611e1c565b5050565b610a886116ba565b8051610a7c906009906020840190611e1c565b610aa36116ba565b6010805460ff1916911515919091179055565b6000610ac160075490565b905090565b610ad03382611714565b610aec5760405162461bcd60e51b81526004016109bb906124cf565b610a5c838383611793565b6060610b016116ba565b6000610b0b610ab6565b67ffffffffffffffff811115610b2357610b23612657565b604051908082528060200260200182016040528015610b4c578160200160208202803683370190505b50905060015b610b5a610ab6565b8111610baf57610b6981610e41565b82610b75600184612568565b81518110610b8557610b85612641565b6001600160a01b039092166020928302919091019091015280610ba7816125e6565b915050610b52565b50905090565b610bbd6116ba565b6000610bd16006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610c1b576040519150601f19603f3d011682016040523d82523d6000602084013e610c20565b606091505b5050905080610c2e57600080fd5b50565b610a5c8383836040518060200160405280600081525061133a565b60606000610c5983610ea1565b905060008167ffffffffffffffff811115610c7657610c76612657565b604051908082528060200260200182016040528015610c9f578160200160208202803683370190505b509050600160005b8381108015610cb85750600c548211155b15610d23576000610cc883610e41565b9050866001600160a01b0316816001600160a01b03161415610d105782848381518110610cf757610cf7612641565b602090810291909101015281610d0c816125e6565b9250505b82610d1a816125e6565b93505050610ca7565b5090949350505050565b610d356116ba565b600b55565b60118181548110610d4a57600080fd5b6000918252602090912001546001600160a01b0316905081565b610d6c6116ba565b610d7860116000611ea0565b610a5c60118383611ebe565b60098054610d91906125ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbd906125ab565b8015610e0a5780601f10610ddf57610100808354040283529160200191610e0a565b820191906000526020600020905b815481529060010190602001808311610ded57829003601f168201915b505050505081565b610e1a6116ba565b601080549115156101000261ff0019909216919091179055565b60088054610d91906125ab565b6000818152600260205260408120546001600160a01b0316806108875760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109bb565b60006001600160a01b038216610f0b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016109bb565b506001600160a01b031660009081526003602052604090205490565b610f2f6116ba565b610f39600061192f565b565b610f436116ba565b8051610a7c906008906020840190611e1c565b6000805b601154811015610fb757826001600160a01b031660118281548110610f8157610f81612641565b6000918252602090912001546001600160a01b03161415610fa55750600192915050565b80610faf816125e6565b915050610f5a565b50600092915050565b60606001805461089c906125ab565b610fd76116ba565b600c5481610fe460075490565b610fee919061251d565b111561100c5760405162461bcd60e51b81526004016109bb906124a1565b610c2e3382611981565b806000811180156110295750600d548111155b61106c5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b60448201526064016109bb565b600c548161107960075490565b611083919061251d565b11156110a15760405162461bcd60e51b81526004016109bb906124a1565b3332146110ad57600080fd5b60105460ff16156111005760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e7472616374206973207061757365642100000000000000000060448201526064016109bb565b81600b5461110e9190612549565b3410156111535760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109bb565b6040516370a0823160e01b815233600482015260009073dc0fc76a7e38b63e713773e9a44ef0d7867f7672906370a082319060240160206040518083038186803b1580156111a057600080fd5b505afa1580156111b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d8919061224e565b116112255760405162461bcd60e51b815260206004820181905260248201527f4d75737420626520417979796c69656e7320486f6c64657220746f206d696e7460448201526064016109bb565b60105460ff610100909104161515600114156113185761124433610f56565b6112905760405162461bcd60e51b815260206004820181905260248201527f596f7520617265206e6f74206f6e2050686173652031206d696e74206c69737460448201526064016109bb565b336000908152600f6020526040902054600e5481106113045760405162461bcd60e51b815260206004820152602a60248201527f596f75206861766520616c7265616479206d696e74656420796f75722050686160448201526939b29018903a37b5b2b760b11b60648201526084016109bb565b50336000908152600f602052604090208290555b610a7c3383611981565b610a7c3383836119be565b6113356116ba565b600d55565b6113443383611714565b6113605760405162461bcd60e51b81526004016109bb906124cf565b61136c84848484611a8d565b50505050565b600a8054610d91906125ab565b6000818152600260205260409020546060906001600160a01b03166113fe5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109bb565b60105462010000900460ff166114a057600a805461141b906125ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611447906125ab565b80156114945780601f1061146957610100808354040283529160200191611494565b820191906000526020600020905b81548152906001019060200180831161147757829003601f168201915b50505050509050919050565b60006114aa611ac0565b905060008151116114ca57604051806020016040528060008152506114f8565b806114d484611acf565b60096040516020016114e8939291906122b6565b6040516020818303038152906040525b9392505050565b6115076116ba565b600e55565b6115146116ba565b60108054911515620100000262ff000019909216919091179055565b6115386116ba565b600c548261154560075490565b61154f919061251d565b111561156d5760405162461bcd60e51b81526004016109bb906124a1565b610a7c8183611981565b61157f6116ba565b6001600160a01b0381166115e45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109bb565b610c2e8161192f565b6000818152600260205260409020546001600160a01b0316610c2e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109bb565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061168182610e41565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6006546001600160a01b03163314610f395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109bb565b60008061172083610e41565b9050806001600160a01b0316846001600160a01b0316148061176757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061178b5750836001600160a01b03166117808461091f565b6001600160a01b0316145b949350505050565b826001600160a01b03166117a682610e41565b6001600160a01b03161461180a5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016109bb565b6001600160a01b03821661186c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109bb565b61187760008261164c565b6001600160a01b03831660009081526003602052604081208054600192906118a0908490612568565b90915550506001600160a01b03821660009081526003602052604081208054600192906118ce90849061251d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81811015610a5c5761199a600780546001019055565b6119ac836119a760075490565b611bcd565b806119b6816125e6565b915050611984565b816001600160a01b0316836001600160a01b03161415611a205760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109bb565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611a98848484611793565b611aa484848484611d0f565b61136c5760405162461bcd60e51b81526004016109bb9061244f565b60606008805461089c906125ab565b606081611af35750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b1d5780611b07816125e6565b9150611b169050600a83612535565b9150611af7565b60008167ffffffffffffffff811115611b3857611b38612657565b6040519080825280601f01601f191660200182016040528015611b62576020820181803683370190505b5090505b841561178b57611b77600183612568565b9150611b84600a86612601565b611b8f90603061251d565b60f81b818381518110611ba457611ba4612641565b60200101906001600160f81b031916908160001a905350611bc6600a86612535565b9450611b66565b6001600160a01b038216611c235760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109bb565b6000818152600260205260409020546001600160a01b031615611c885760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109bb565b6001600160a01b0382166000908152600360205260408120805460019290611cb190849061251d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15611e1157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d5390339089908890889060040161237a565b602060405180830381600087803b158015611d6d57600080fd5b505af1925050508015611d9d575060408051601f3d908101601f19168201909252611d9a918101906121cf565b60015b611df7573d808015611dcb576040519150601f19603f3d011682016040523d82523d6000602084013e611dd0565b606091505b508051611def5760405162461bcd60e51b81526004016109bb9061244f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061178b565b506001949350505050565b828054611e28906125ab565b90600052602060002090601f016020900481019282611e4a5760008555611e90565b82601f10611e6357805160ff1916838001178555611e90565b82800160010185558215611e90579182015b82811115611e90578251825591602001919060010190611e75565b50611e9c929150611f11565b5090565b5080546000825590600052602060002090810190610c2e9190611f11565b828054828255906000526020600020908101928215611e90579160200282015b82811115611e905781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611ede565b5b80821115611e9c5760008155600101611f12565b600067ffffffffffffffff80841115611f4157611f41612657565b604051601f8501601f19908116603f01168101908282118183101715611f6957611f69612657565b81604052809350858152868686011115611f8257600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611fb357600080fd5b919050565b80358015158114611fb357600080fd5b600060208284031215611fda57600080fd5b6114f882611f9c565b60008060408385031215611ff657600080fd5b611fff83611f9c565b915061200d60208401611f9c565b90509250929050565b60008060006060848603121561202b57600080fd5b61203484611f9c565b925061204260208501611f9c565b9150604084013590509250925092565b6000806000806080858703121561206857600080fd5b61207185611f9c565b935061207f60208601611f9c565b925060408501359150606085013567ffffffffffffffff8111156120a257600080fd5b8501601f810187136120b357600080fd5b6120c287823560208401611f26565b91505092959194509250565b600080604083850312156120e157600080fd5b6120ea83611f9c565b915061200d60208401611fb8565b6000806040838503121561210b57600080fd5b61211483611f9c565b946020939093013593505050565b6000806020838503121561213557600080fd5b823567ffffffffffffffff8082111561214d57600080fd5b818501915085601f83011261216157600080fd5b81358181111561217057600080fd5b8660208260051b850101111561218557600080fd5b60209290920196919550909350505050565b6000602082840312156121a957600080fd5b6114f882611fb8565b6000602082840312156121c457600080fd5b81356114f88161266d565b6000602082840312156121e157600080fd5b81516114f88161266d565b6000602082840312156121fe57600080fd5b813567ffffffffffffffff81111561221557600080fd5b8201601f8101841361222657600080fd5b61178b84823560208401611f26565b60006020828403121561224757600080fd5b5035919050565b60006020828403121561226057600080fd5b5051919050565b6000806040838503121561227a57600080fd5b8235915061200d60208401611f9c565b600081518084526122a281602086016020860161257f565b601f01601f19169290920160200192915050565b6000845160206122c98285838a0161257f565b8551918401916122dc8184848a0161257f565b8554920191600090600181811c90808316806122f957607f831692505b85831081141561231757634e487b7160e01b85526022600452602485fd5b80801561232b576001811461233c57612369565b60ff19851688528388019550612369565b60008b81526020902060005b858110156123615781548a820152908401908801612348565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123ad9083018461228a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123f85783516001600160a01b0316835292840192918401916001016123d3565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123f857835183529284019291840191600101612420565b6020815260006114f8602083018461228a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6000821982111561253057612530612615565b500190565b6000826125445761254461262b565b500490565b600081600019048311821515161561256357612563612615565b500290565b60008282101561257a5761257a612615565b500390565b60005b8381101561259a578181015183820152602001612582565b8381111561136c5750506000910152565b600181811c908216806125bf57607f821691505b602082108114156125e057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125fa576125fa612615565b5060010190565b6000826126105761261061262b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610c2e57600080fdfea264697066735822122044d8b8d1f528827d8c22cc203243e57014610e23149b001c13d70f7ea8df5a5564736f6c63430008070033
Deployed Bytecode Sourcemap
9045:5765:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1570:300:1;;;;;;;;;;-1:-1:-1;1570:300:1;;;;;:::i;:::-;;:::i;:::-;;;9538:14:12;;9531:22;9513:41;;9501:2;9486:18;1570:300:1;;;;;;;;2470:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3935:167::-;;;;;;;;;;-1:-1:-1;3935:167:1;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7536:32:12;;;7518:51;;7506:2;7491:18;3935:167:1;7372:203:12;3467:407:1;;;;;;;;;;-1:-1:-1;3467:407:1;;;;;:::i;:::-;;:::i;:::-;;14016:98:11;;;;;;;;;;-1:-1:-1;14016:98:11;;;;;:::i;:::-;;:::i;9304:32::-;;;;;;;;;;;;;;;;;;;17963:25:12;;;17951:2;17936:18;9304:32:11;17817:177:12;14220:98:11;;;;;;;;;;-1:-1:-1;14220:98:11;;;;;:::i;:::-;;:::i;14322:75::-;;;;;;;;;;-1:-1:-1;14322:75:11;;;;;:::i;:::-;;:::i;12387:87::-;;;;;;;;;;;;;:::i;4612:327:1:-;;;;;;;;;;-1:-1:-1;4612:327:1;;;;;:::i;:::-;;:::i;12042:259:11:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9458:54::-;;;;;;;;;;-1:-1:-1;9458:54:11;;;;;:::i;:::-;;;;;;;;;;;;;;14672:134;;;;;;;;;;;;;:::i;5005:179:1:-;;;;;;;;;;-1:-1:-1;5005:179:1;;;;;:::i;:::-;;:::i;12478:612:11:-;;;;;;;;;;-1:-1:-1;12478:612:11;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13716:72::-;;;;;;;;;;-1:-1:-1;13716:72:11;;;;;:::i;:::-;;:::i;9612:32::-;;;;;;;;;;-1:-1:-1;9612:32:11;;;;;:::i;:::-;;:::i;9579:28::-;;;;;;;;;;-1:-1:-1;9579:28:11;;;;;;;;;;;11597:134;;;;;;;;;;-1:-1:-1;11597:134:11;;;;;:::i;:::-;;:::i;9237:33::-;;;;;;;;;;;;;:::i;14401:79::-;;;;;;;;;;-1:-1:-1;14401:79:11;;;;;:::i;:::-;;:::i;9517:25::-;;;;;;;;;;-1:-1:-1;9517:25:11;;;;;;;;9205:28;;;;;;;;;;;;;:::i;2190:218:1:-;;;;;;;;;;-1:-1:-1;2190:218:1;;;;;:::i;:::-;;:::i;9373:38:11:-;;;;;;;;;;;;;;;;1929:204:1;;;;;;;;;;-1:-1:-1;1929:204:1;;;;;:::i;:::-;;:::i;1831:101:0:-;;;;;;;;;;;;;:::i;14118:98:11:-;;;;;;;;;;-1:-1:-1;14118:98:11;;;;;:::i;:::-;;:::i;11735:221::-;;;;;;;;;;-1:-1:-1;11735:221:11;;;;;:::i;:::-;;:::i;9415:38::-;;;;;;;;;;;;;;;;1201:85:0;;;;;;;;;;-1:-1:-1;1273:6:0;;-1:-1:-1;;;;;1273:6:0;1201:85;;2632:102:1;;;;;;;;;;;;;:::i;10916:183:11:-;;;;;;;;;;-1:-1:-1;10916:183:11;;;;;:::i;:::-;;:::i;10133:779::-;;;;;;:::i;:::-;;:::i;4169:153:1:-;;;;;;;;;;-1:-1:-1;4169:153:1;;;;;:::i;:::-;;:::i;13792:108:11:-;;;;;;;;;;-1:-1:-1;13792:108:11;;;;;:::i;:::-;;:::i;5250:315:1:-;;;;;;;;;;-1:-1:-1;5250:315:1;;;;;:::i;:::-;;:::i;9274:23:11:-;;;;;;;;;;;;;:::i;13094:466::-;;;;;;;;;;-1:-1:-1;13094:466:11;;;;;:::i;:::-;;:::i;9340:29::-;;;;;;;;;;;;;;;;13904:108;;;;;;;;;;-1:-1:-1;13904:108:11;;;;;:::i;:::-;;:::i;9546:29::-;;;;;;;;;;-1:-1:-1;9546:29:11;;;;;;;;;;;13633:79;;;;;;;;;;-1:-1:-1;13633:79:11;;;;;:::i;:::-;;:::i;4388:162:1:-;;;;;;;;;;-1:-1:-1;4388:162:1;;;;;:::i;:::-;-1:-1:-1;;;;;4508:25:1;;;4485:4;4508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4388:162;11305:209:11;;;;;;;;;;-1:-1:-1;11305:209:11;;;;;:::i;:::-;;:::i;2081:198:0:-;;;;;;;;;;-1:-1:-1;2081:198:0;;;;;:::i;:::-;;:::i;1570:300:1:-;1672:4;-1:-1:-1;;;;;;1707:40:1;;-1:-1:-1;;;1707:40:1;;:104;;-1:-1:-1;;;;;;;1763:48:1;;-1:-1:-1;;;1763:48:1;1707:104;:156;;;-1:-1:-1;;;;;;;;;;937:40:9;;;1827:36:1;1688:175;1570:300;-1:-1:-1;;1570:300:1:o;2470:98::-;2524:13;2556:5;2549:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2470:98;:::o;3935:167::-;4011:7;4030:23;4045:7;4030:14;:23::i;:::-;-1:-1:-1;4071:24:1;;;;:15;:24;;;;;;-1:-1:-1;;;;;4071:24:1;;3935:167::o;3467:407::-;3547:13;3563:23;3578:7;3563:14;:23::i;:::-;3547:39;;3610:5;-1:-1:-1;;;;;3604:11:1;:2;-1:-1:-1;;;;;3604:11:1;;;3596:57;;;;-1:-1:-1;;;3596:57:1;;16505:2:12;3596:57:1;;;16487:21:12;16544:2;16524:18;;;16517:30;16583:34;16563:18;;;16556:62;-1:-1:-1;;;16634:18:12;;;16627:31;16675:19;;3596:57:1;;;;;;;;;719:10:6;-1:-1:-1;;;;;3685:21:1;;;;:62;;-1:-1:-1;3710:37:1;3727:5;719:10:6;4388:162:1;:::i;3710:37::-;3664:171;;;;-1:-1:-1;;;3664:171:1;;14231:2:12;3664:171:1;;;14213:21:12;14270:2;14250:18;;;14243:30;14309:34;14289:18;;;14282:62;14380:32;14360:18;;;14353:60;14430:19;;3664:171:1;14029:426:12;3664:171:1;3846:21;3855:2;3859:7;3846:8;:21::i;:::-;3537:337;3467:407;;:::o;14016:98:11:-;1094:13:0;:11;:13::i;:::-;14087:22:11;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;14016:98:::0;:::o;14220:::-;1094:13:0;:11;:13::i;:::-;14291:22:11;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;14322:75::-:0;1094:13:0;:11;:13::i;:::-;14377:6:11::1;:15:::0;;-1:-1:-1;;14377:15:11::1;::::0;::::1;;::::0;;;::::1;::::0;;14322:75::o;12387:87::-;12431:7;12453:16;:6;918:14:7;;827:112;12453:16:11;12446:23;;12387:87;:::o;4612:327:1:-;4801:41;719:10:6;4834:7:1;4801:18;:41::i;:::-;4793:100;;;;-1:-1:-1;;;4793:100:1;;;;;;;:::i;:::-;4904:28;4914:4;4920:2;4924:7;4904:9;:28::i;12042:259:11:-;12093:16;1094:13:0;:11;:13::i;:::-;12120:23:11::1;12160:13;:11;:13::i;:::-;12146:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;12146:28:11::1;-1:-1:-1::0;12120:54:11;-1:-1:-1;12195:1:11::1;12184:88;12203:13;:11;:13::i;:::-;12198:1;:18;12184:88;;12251:10;12259:1;12251:7;:10::i;:::-;12236:6:::0;12243:4:::1;12246:1;12243::::0;:4:::1;:::i;:::-;12236:12;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12236:25:11;;::::1;:12;::::0;;::::1;::::0;;;;;;;:25;12218:3;::::1;::::0;::::1;:::i;:::-;;;;12184:88;;;-1:-1:-1::0;12288:6:11;-1:-1:-1;12042:259:11;:::o;14672:134::-;1094:13:0;:11;:13::i;:::-;14716:7:11::1;14737;1273:6:0::0;;-1:-1:-1;;;;;1273:6:0;;1201:85;14737:7:11::1;-1:-1:-1::0;;;;;14729:21:11::1;14758;14729:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14715:69;;;14798:2;14790:11;;;::::0;::::1;;14709:97;14672:134::o:0;5005:179:1:-;5138:39;5155:4;5161:2;5165:7;5138:39;;;;;;;;;;;;:16;:39::i;12478:612:11:-;12550:16;12576:23;12602:17;12612:6;12602:9;:17::i;:::-;12576:43;;12625:30;12672:15;12658:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12658:30:11;-1:-1:-1;12625:63:11;-1:-1:-1;12719:1:11;12694:22;12760:299;12785:15;12767;:33;:64;;;;;12822:9;;12804:14;:27;;12767:64;12760:299;;;12841:25;12869:23;12877:14;12869:7;:23::i;:::-;12841:51;;12926:6;-1:-1:-1;;;;;12905:27:11;:17;-1:-1:-1;;;;;12905:27:11;;12901:127;;;12977:14;12944:13;12958:15;12944:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;13002:17;;;;:::i;:::-;;;;12901:127;13036:16;;;;:::i;:::-;;;;12833:226;12760:299;;;-1:-1:-1;13072:13:11;;12478:612;-1:-1:-1;;;;12478:612:11:o;13716:72::-;1094:13:0;:11;:13::i;:::-;13771:4:11::1;:12:::0;13716:72::o;9612:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9612:32:11;;-1:-1:-1;9612:32:11;:::o;11597:134::-;1094:13:0;:11;:13::i;:::-;11674:22:11::1;11681:15;;11674:22;:::i;:::-;11702:24;:15;11720:6:::0;;11702:24:::1;:::i;9237:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14401:79::-;1094:13:0;:11;:13::i;:::-;14456:10:11::1;:19:::0;;;::::1;;;;-1:-1:-1::0;;14456:19:11;;::::1;::::0;;;::::1;::::0;;14401:79::o;9205:28::-;;;;;;;:::i;2190:218:1:-;2262:7;2297:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2297:16:1;2331:19;2323:56;;;;-1:-1:-1;;;2323:56:1;;16152:2:12;2323:56:1;;;16134:21:12;16191:2;16171:18;;;16164:30;-1:-1:-1;;;16210:18:12;;;16203:54;16274:18;;2323:56:1;15950:348:12;1929:204:1;2001:7;-1:-1:-1;;;;;2028:19:1;;2020:73;;;;-1:-1:-1;;;2020:73:1;;13821:2:12;2020:73:1;;;13803:21:12;13860:2;13840:18;;;13833:30;13899:34;13879:18;;;13872:62;-1:-1:-1;;;13950:18:12;;;13943:39;13999:19;;2020:73:1;13619:405:12;2020:73:1;-1:-1:-1;;;;;;2110:16:1;;;;;:9;:16;;;;;;;1929:204::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;14118:98:11:-;1094:13:0;:11;:13::i;:::-;14189:22:11;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;11735:221::-:0;11793:4;;11805:129;11826:15;:22;11822:26;;11805:129;;;11889:5;-1:-1:-1;;;;;11867:27:11;:15;11883:1;11867:18;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;11867:18:11;:27;11863:65;;;-1:-1:-1;11915:4:11;;11735:221;-1:-1:-1;;11735:221:11:o;11863:65::-;11850:3;;;;:::i;:::-;;;;11805:129;;;-1:-1:-1;11946:5:11;;11735:221;-1:-1:-1;;11735:221:11:o;2632:102:1:-;2688:13;2720:7;2713:14;;;;;:::i;10916:183:11:-;1094:13:0;:11;:13::i;:::-;11020:9:11::1;;11005:11;10986:16;:6;918:14:7::0;;827:112;10986:16:11::1;:30;;;;:::i;:::-;:43;;10978:76;;;;-1:-1:-1::0;;;10978:76:11::1;;;;;;;:::i;:::-;11060:34;11070:10;11082:11;11060:9;:34::i;10133:779::-:0;10198:11;9971:1;9957:11;:15;:53;;;;;9991:19;;9976:11;:34;;9957:53;9949:86;;;;-1:-1:-1;;;9949:86:11;;11580:2:12;9949:86:11;;;11562:21:12;11619:2;11599:18;;;11592:30;-1:-1:-1;;;11638:18:12;;;11631:50;11698:18;;9949:86:11;11378:344:12;9949:86:11;10083:9;;10068:11;10049:16;:6;918:14:7;;827:112;10049:16:11;:30;;;;:::i;:::-;:43;;10041:76;;;;-1:-1:-1;;;10041:76:11;;;;;;;:::i;:::-;10225:10:::1;10239:9;10225:23;10217:32;;;::::0;::::1;;10266:6;::::0;::::1;;10265:7;10257:43;;;::::0;-1:-1:-1;;;10257:43:11;;15384:2:12;10257:43:11::1;::::0;::::1;15366:21:12::0;15423:2;15403:18;;;15396:30;15462:25;15442:18;;;15435:53;15505:18;;10257:43:11::1;15182:347:12::0;10257:43:11::1;10334:11;10327:4;;:18;;;;:::i;:::-;10314:9;:31;;10306:63;;;::::0;-1:-1:-1;;;10306:63:11;;17671:2:12;10306:63:11::1;::::0;::::1;17653:21:12::0;17710:2;17690:18;;;17683:30;-1:-1:-1;;;17729:18:12;;;17722:49;17788:18;;10306:63:11::1;17469:343:12::0;10306:63:11::1;10383:73;::::0;-1:-1:-1;;;10383:73:11;;10445:10:::1;10383:73;::::0;::::1;7518:51:12::0;10459:1:11::1;::::0;10391:42:::1;::::0;10383:61:::1;::::0;7491:18:12;;10383:73:11::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;10375:122;;;::::0;-1:-1:-1;;;10375:122:11;;13099:2:12;10375:122:11::1;::::0;::::1;13081:21:12::0;;;13118:18;;;13111:30;13177:34;13157:18;;;13150:62;13229:18;;10375:122:11::1;12897:356:12::0;10375:122:11::1;10515:10;::::0;::::1;;::::0;;::::1;;:18;;:10;:18;10512:355;;;10557:24;10570:10;10557:12;:24::i;:::-;10549:69;;;::::0;-1:-1:-1;;;10549:69:11;;13460:2:12;10549:69:11::1;::::0;::::1;13442:21:12::0;;;13479:18;;;13472:30;13538:34;13518:18;;;13511:62;13590:18;;10549:69:11::1;13258:356:12::0;10549:69:11::1;10679:10;10632:24;10659:31:::0;;;:19:::1;:31;::::0;;;;;10731:19:::1;::::0;10712:38;::::1;10704:93;;;::::0;-1:-1:-1;;;10704:93:11;;12688:2:12;10704:93:11::1;::::0;::::1;12670:21:12::0;12727:2;12707:18;;;12700:30;12766:34;12746:18;;;12739:62;-1:-1:-1;;;12817:18:12;;;12810:40;12867:19;;10704:93:11::1;12486:406:12::0;10704:93:11::1;-1:-1:-1::0;10831:10:11::1;10811:31;::::0;;;:19:::1;:31;::::0;;;;:45;;;10512:355:::1;10873:34;10883:10;10895:11;10873:9;:34::i;4169:153:1:-:0;4263:52;719:10:6;4296:8:1;4306;4263:18;:52::i;13792:108:11:-;1094:13:0;:11;:13::i;:::-;13863:19:11::1;:32:::0;13792:108::o;5250:315:1:-;5418:41;719:10:6;5451:7:1;5418:18;:41::i;:::-;5410:100;;;;-1:-1:-1;;;5410:100:1;;;;;;;:::i;:::-;5520:38;5534:4;5540:2;5544:7;5553:4;5520:13;:38::i;:::-;5250:315;;;;:::o;9274:23:11:-;;;;;;;:::i;13094:466::-;7099:4:1;7122:16;;;:7;:16;;;;;;13188:13:11;;-1:-1:-1;;;;;7122:16:1;13211:95:11;;;;-1:-1:-1;;;13211:95:11;;15736:2:12;13211:95:11;;;15718:21:12;15775:2;15755:18;;;15748:30;15814:34;15794:18;;;15787:62;-1:-1:-1;;;15865:18:12;;;15858:45;15920:19;;13211:95:11;15534:411:12;13211:95:11;13317:8;;;;;;;13313:54;;13351:9;13344:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13094:466;;;:::o;13313:54::-;13373:28;13404:10;:8;:10::i;:::-;13373:41;;13458:1;13433:14;13427:28;:32;:128;;;;;;;;;;;;;;;;;13494:14;13510:19;:8;:17;:19::i;:::-;13531:9;13477:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13427:128;13420:135;13094:466;-1:-1:-1;;;13094:466:11:o;13904:108::-;1094:13:0;:11;:13::i;:::-;13975:19:11::1;:32:::0;13904:108::o;13633:79::-;1094:13:0;:11;:13::i;:::-;13690:8:11::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;13690:17:11;;::::1;::::0;;;::::1;::::0;;13633:79::o;11305:209::-;1094:13:0;:11;:13::i;:::-;11436:9:11::1;;11421:11;11402:16;:6;918:14:7::0;;827:112;11402:16:11::1;:30;;;;:::i;:::-;:43;;11394:76;;;;-1:-1:-1::0;;;11394:76:11::1;;;;;;;:::i;:::-;11476:33;11486:9;11497:11;11476:9;:33::i;2081:198:0:-:0;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:0;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:0;;10410:2:12;2161:73:0::1;::::0;::::1;10392:21:12::0;10449:2;10429:18;;;10422:30;10488:34;10468:18;;;10461:62;-1:-1:-1;;;10539:18:12;;;10532:36;10585:19;;2161:73:0::1;10208:402:12::0;2161:73:0::1;2244:28;2263:8;2244:18;:28::i;11657:133:1:-:0;7099:4;7122:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7122:16:1;11730:53;;;;-1:-1:-1;;;11730:53:1;;16152:2:12;11730:53:1;;;16134:21:12;16191:2;16171:18;;;16164:30;-1:-1:-1;;;16210:18:12;;;16203:54;16274:18;;11730:53:1;15950:348:12;10959:171:1;11033:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11033:29:1;-1:-1:-1;;;;;11033:29:1;;;;;;;;:24;;11086:23;11033:24;11086:14;:23::i;:::-;-1:-1:-1;;;;;11077:46:1;;;;;;;;;;;10959:171;;:::o;1359:130:0:-;1273:6;;-1:-1:-1;;;;;1273:6:0;719:10:6;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;15023:2:12;1414:68:0;;;15005:21:12;;;15042:18;;;15035:30;15101:34;15081:18;;;15074:62;15153:18;;1414:68:0;14821:356:12;7317:261:1;7410:4;7426:13;7442:23;7457:7;7442:14;:23::i;:::-;7426:39;;7494:5;-1:-1:-1;;;;;7483:16:1;:7;-1:-1:-1;;;;;7483:16:1;;:52;;;-1:-1:-1;;;;;;4508:25:1;;;4485:4;4508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7503:32;7483:87;;;;7563:7;-1:-1:-1;;;;;7539:31:1;:20;7551:7;7539:11;:20::i;:::-;-1:-1:-1;;;;;7539:31:1;;7483:87;7475:96;7317:261;-1:-1:-1;;;;7317:261:1:o;10242:605::-;10396:4;-1:-1:-1;;;;;10369:31:1;:23;10384:7;10369:14;:23::i;:::-;-1:-1:-1;;;;;10369:31:1;;10361:81;;;;-1:-1:-1;;;10361:81:1;;10817:2:12;10361:81:1;;;10799:21:12;10856:2;10836:18;;;10829:30;10895:34;10875:18;;;10868:62;-1:-1:-1;;;10946:18:12;;;10939:35;10991:19;;10361:81:1;10615:401:12;10361:81:1;-1:-1:-1;;;;;10460:16:1;;10452:65;;;;-1:-1:-1;;;10452:65:1;;11929:2:12;10452:65:1;;;11911:21:12;11968:2;11948:18;;;11941:30;12007:34;11987:18;;;11980:62;-1:-1:-1;;;12058:18:12;;;12051:34;12102:19;;10452:65:1;11727:400:12;10452:65:1;10629:29;10646:1;10650:7;10629:8;:29::i;:::-;-1:-1:-1;;;;;10669:15:1;;;;;;:9;:15;;;;;:20;;10688:1;;10669:15;:20;;10688:1;;10669:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10699:13:1;;;;;;:9;:13;;;;;:18;;10716:1;;10699:13;:18;;10716:1;;10699:18;:::i;:::-;;;;-1:-1:-1;;10727:16:1;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10727:21:1;-1:-1:-1;;;;;10727:21:1;;;;;;;;;10764:27;;10727:16;;10764:27;;;;;;;3537:337;3467:407;;:::o;2433:187:0:-;2525:6;;;-1:-1:-1;;;;;2541:17:0;;;-1:-1:-1;;;;;;2541:17:0;;;;;;;2573:40;;2525:6;;;2541:17;2525:6;;2573:40;;2506:16;;2573:40;2496:124;2433:187;:::o;11106:195:11:-;11185:9;11180:117;11204:11;11200:1;:15;11180:117;;;11230:18;:6;1032:19:7;;1050:1;1032:19;;;945:123;11230:18:11;11256:34;11262:9;11273:16;:6;918:14:7;;827:112;11273:16:11;11256:5;:34::i;:::-;11217:3;;;;:::i;:::-;;;;11180:117;;11266:307:1;11416:8;-1:-1:-1;;;;;11407:17:1;:5;-1:-1:-1;;;;;11407:17:1;;;11399:55;;;;-1:-1:-1;;;11399:55:1;;12334:2:12;11399:55:1;;;12316:21:12;12373:2;12353:18;;;12346:30;12412:27;12392:18;;;12385:55;12457:18;;11399:55:1;12132:349:12;11399:55:1;-1:-1:-1;;;;;11464:25:1;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;11464:46:1;;;;;;;;;;11525:41;;9513::12;;;11525::1;;9486:18:12;11525:41:1;;;;;;;11266:307;;;:::o;6426:305::-;6576:28;6586:4;6592:2;6596:7;6576:9;:28::i;:::-;6622:47;6645:4;6651:2;6655:7;6664:4;6622:22;:47::i;:::-;6614:110;;;;-1:-1:-1;;;6614:110:1;;;;;;;:::i;14484:102:11:-;14544:13;14572:9;14565:16;;;;;:::i;392:703:8:-;448:13;665:10;661:51;;-1:-1:-1;;691:10:8;;;;;;;;;;;;-1:-1:-1;;;691:10:8;;;;;392:703::o;661:51::-;736:5;721:12;775:75;782:9;;775:75;;807:8;;;;:::i;:::-;;-1:-1:-1;829:10:8;;-1:-1:-1;837:2:8;829:10;;:::i;:::-;;;775:75;;;859:19;891:6;881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;881:17:8;;859:39;;908:150;915:10;;908:150;;941:11;951:1;941:11;;:::i;:::-;;-1:-1:-1;1009:10:8;1017:2;1009:5;:10;:::i;:::-;996:24;;:2;:24;:::i;:::-;983:39;;966:6;973;966:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;966:56:8;;;;;;;;-1:-1:-1;1036:11:8;1045:2;1036:11;;:::i;:::-;;;908:150;;8868:427:1;-1:-1:-1;;;;;8947:16:1;;8939:61;;;;-1:-1:-1;;;8939:61:1;;14662:2:12;8939:61:1;;;14644:21:12;;;14681:18;;;14674:30;14740:34;14720:18;;;14713:62;14792:18;;8939:61:1;14460:356:12;8939:61:1;7099:4;7122:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7122:16:1;:30;9010:58;;;;-1:-1:-1;;;9010:58:1;;11223:2:12;9010:58:1;;;11205:21:12;11262:2;11242:18;;;11235:30;11301;11281:18;;;11274:58;11349:18;;9010:58:1;11021:352:12;9010:58:1;-1:-1:-1;;;;;9135:13:1;;;;;;:9;:13;;;;;:18;;9152:1;;9135:13;:18;;9152:1;;9135:18;:::i;:::-;;;;-1:-1:-1;;9163:16:1;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9163:21:1;-1:-1:-1;;;;;9163:21:1;;;;;;;;9200:33;;9163:16;;;9200:33;;9163:16;;9200:33;14087:22:11::1;14016:98:::0;:::o;12342:831:1:-;12491:4;-1:-1:-1;;;;;12511:13:1;;1465:19:5;:23;12507:660:1;;12546:71;;-1:-1:-1;;;12546:71:1;;-1:-1:-1;;;;;12546:36:1;;;;;:71;;719:10:6;;12597:4:1;;12603:7;;12612:4;;12546:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12546:71:1;;;;;;;;-1:-1:-1;;12546:71:1;;;;;;;;;;;;:::i;:::-;;;12542:573;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12784:13:1;;12780:321;;12826:60;;-1:-1:-1;;;12826:60:1;;;;;;;:::i;12780:321::-;13053:6;13047:13;13038:6;13034:2;13030:15;13023:38;12542:573;-1:-1:-1;;;;;;12667:51:1;-1:-1:-1;;;12667:51:1;;-1:-1:-1;12660:58:1;;12507:660;-1:-1:-1;13152:4:1;12342:831;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:12;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:12;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:12;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:666::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;2209:18;2201:6;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:22;;2317:4;2309:13;;2305:27;-1:-1:-1;2295:55:12;;2346:1;2343;2336:12;2295:55;2369:73;2434:7;2429:2;2416:16;2411:2;2407;2403:11;2369:73;:::i;:::-;2359:83;;;1782:666;;;;;;;:::o;2453:254::-;2518:6;2526;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2618:29;2637:9;2618:29;:::i;:::-;2608:39;;2666:35;2697:2;2686:9;2682:18;2666:35;:::i;2712:254::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;2956:2;2941:18;;;;2928:32;;-1:-1:-1;;;2712:254:12:o;2971:615::-;3057:6;3065;3118:2;3106:9;3097:7;3093:23;3089:32;3086:52;;;3134:1;3131;3124:12;3086:52;3174:9;3161:23;3203:18;3244:2;3236:6;3233:14;3230:34;;;3260:1;3257;3250:12;3230:34;3298:6;3287:9;3283:22;3273:32;;3343:7;3336:4;3332:2;3328:13;3324:27;3314:55;;3365:1;3362;3355:12;3314:55;3405:2;3392:16;3431:2;3423:6;3420:14;3417:34;;;3447:1;3444;3437:12;3417:34;3500:7;3495:2;3485:6;3482:1;3478:14;3474:2;3470:23;3466:32;3463:45;3460:65;;;3521:1;3518;3511:12;3460:65;3552:2;3544:11;;;;;3574:6;;-1:-1:-1;2971:615:12;;-1:-1:-1;;;;2971:615:12:o;3591:180::-;3647:6;3700:2;3688:9;3679:7;3675:23;3671:32;3668:52;;;3716:1;3713;3706:12;3668:52;3739:26;3755:9;3739:26;:::i;3776:245::-;3834:6;3887:2;3875:9;3866:7;3862:23;3858:32;3855:52;;;3903:1;3900;3893:12;3855:52;3942:9;3929:23;3961:30;3985:5;3961:30;:::i;4026:249::-;4095:6;4148:2;4136:9;4127:7;4123:23;4119:32;4116:52;;;4164:1;4161;4154:12;4116:52;4196:9;4190:16;4215:30;4239:5;4215:30;:::i;4280:450::-;4349:6;4402:2;4390:9;4381:7;4377:23;4373:32;4370:52;;;4418:1;4415;4408:12;4370:52;4458:9;4445:23;4491:18;4483:6;4480:30;4477:50;;;4523:1;4520;4513:12;4477:50;4546:22;;4599:4;4591:13;;4587:27;-1:-1:-1;4577:55:12;;4628:1;4625;4618:12;4577:55;4651:73;4716:7;4711:2;4698:16;4693:2;4689;4685:11;4651:73;:::i;4735:180::-;4794:6;4847:2;4835:9;4826:7;4822:23;4818:32;4815:52;;;4863:1;4860;4853:12;4815:52;-1:-1:-1;4886:23:12;;4735:180;-1:-1:-1;4735:180:12:o;4920:184::-;4990:6;5043:2;5031:9;5022:7;5018:23;5014:32;5011:52;;;5059:1;5056;5049:12;5011:52;-1:-1:-1;5082:16:12;;4920:184;-1:-1:-1;4920:184:12:o;5109:254::-;5177:6;5185;5238:2;5226:9;5217:7;5213:23;5209:32;5206:52;;;5254:1;5251;5244:12;5206:52;5290:9;5277:23;5267:33;;5319:38;5353:2;5342:9;5338:18;5319:38;:::i;5368:257::-;5409:3;5447:5;5441:12;5474:6;5469:3;5462:19;5490:63;5546:6;5539:4;5534:3;5530:14;5523:4;5516:5;5512:16;5490:63;:::i;:::-;5607:2;5586:15;-1:-1:-1;;5582:29:12;5573:39;;;;5614:4;5569:50;;5368:257;-1:-1:-1;;5368:257:12:o;5630:1527::-;5854:3;5892:6;5886:13;5918:4;5931:51;5975:6;5970:3;5965:2;5957:6;5953:15;5931:51;:::i;:::-;6045:13;;6004:16;;;;6067:55;6045:13;6004:16;6089:15;;;6067:55;:::i;:::-;6211:13;;6144:20;;;6184:1;;6271;6293:18;;;;6346;;;;6373:93;;6451:4;6441:8;6437:19;6425:31;;6373:93;6514:2;6504:8;6501:16;6481:18;6478:40;6475:167;;;-1:-1:-1;;;6541:33:12;;6597:4;6594:1;6587:15;6627:4;6548:3;6615:17;6475:167;6658:18;6685:110;;;;6809:1;6804:328;;;;6651:481;;6685:110;-1:-1:-1;;6720:24:12;;6706:39;;6765:20;;;;-1:-1:-1;6685:110:12;;6804:328;18072:1;18065:14;;;18109:4;18096:18;;6899:1;6913:169;6927:8;6924:1;6921:15;6913:169;;;7009:14;;6994:13;;;6987:37;7052:16;;;;6944:10;;6913:169;;;6917:3;;7113:8;7106:5;7102:20;7095:27;;6651:481;-1:-1:-1;7148:3:12;;5630:1527;-1:-1:-1;;;;;;;;;;;5630:1527:12:o;7580:488::-;-1:-1:-1;;;;;7849:15:12;;;7831:34;;7901:15;;7896:2;7881:18;;7874:43;7948:2;7933:18;;7926:34;;;7996:3;7991:2;7976:18;;7969:31;;;7774:4;;8017:45;;8042:19;;8034:6;8017:45;:::i;:::-;8009:53;7580:488;-1:-1:-1;;;;;;7580:488:12:o;8073:658::-;8244:2;8296:21;;;8366:13;;8269:18;;;8388:22;;;8215:4;;8244:2;8467:15;;;;8441:2;8426:18;;;8215:4;8510:195;8524:6;8521:1;8518:13;8510:195;;;8589:13;;-1:-1:-1;;;;;8585:39:12;8573:52;;8680:15;;;;8645:12;;;;8621:1;8539:9;8510:195;;;-1:-1:-1;8722:3:12;;8073:658;-1:-1:-1;;;;;;8073:658:12:o;8736:632::-;8907:2;8959:21;;;9029:13;;8932:18;;;9051:22;;;8878:4;;8907:2;9130:15;;;;9104:2;9089:18;;;8878:4;9173:169;9187:6;9184:1;9181:13;9173:169;;;9248:13;;9236:26;;9317:15;;;;9282:12;;;;9209:1;9202:9;9173:169;;9565:219;9714:2;9703:9;9696:21;9677:4;9734:44;9774:2;9763:9;9759:18;9751:6;9734:44;:::i;9789:414::-;9991:2;9973:21;;;10030:2;10010:18;;;10003:30;10069:34;10064:2;10049:18;;10042:62;-1:-1:-1;;;10135:2:12;10120:18;;10113:48;10193:3;10178:19;;9789:414::o;16705:344::-;16907:2;16889:21;;;16946:2;16926:18;;;16919:30;-1:-1:-1;;;16980:2:12;16965:18;;16958:50;17040:2;17025:18;;16705:344::o;17054:410::-;17256:2;17238:21;;;17295:2;17275:18;;;17268:30;17334:34;17329:2;17314:18;;17307:62;-1:-1:-1;;;17400:2:12;17385:18;;17378:44;17454:3;17439:19;;17054:410::o;18125:128::-;18165:3;18196:1;18192:6;18189:1;18186:13;18183:39;;;18202:18;;:::i;:::-;-1:-1:-1;18238:9:12;;18125:128::o;18258:120::-;18298:1;18324;18314:35;;18329:18;;:::i;:::-;-1:-1:-1;18363:9:12;;18258:120::o;18383:168::-;18423:7;18489:1;18485;18481:6;18477:14;18474:1;18471:21;18466:1;18459:9;18452:17;18448:45;18445:71;;;18496:18;;:::i;:::-;-1:-1:-1;18536:9:12;;18383:168::o;18556:125::-;18596:4;18624:1;18621;18618:8;18615:34;;;18629:18;;:::i;:::-;-1:-1:-1;18666:9:12;;18556:125::o;18686:258::-;18758:1;18768:113;18782:6;18779:1;18776:13;18768:113;;;18858:11;;;18852:18;18839:11;;;18832:39;18804:2;18797:10;18768:113;;;18899:6;18896:1;18893:13;18890:48;;;-1:-1:-1;;18934:1:12;18916:16;;18909:27;18686:258::o;18949:380::-;19028:1;19024:12;;;;19071;;;19092:61;;19146:4;19138:6;19134:17;19124:27;;19092:61;19199:2;19191:6;19188:14;19168:18;19165:38;19162:161;;;19245:10;19240:3;19236:20;19233:1;19226:31;19280:4;19277:1;19270:15;19308:4;19305:1;19298:15;19162:161;;18949:380;;;:::o;19334:135::-;19373:3;-1:-1:-1;;19394:17:12;;19391:43;;;19414:18;;:::i;:::-;-1:-1:-1;19461:1:12;19450:13;;19334:135::o;19474:112::-;19506:1;19532;19522:35;;19537:18;;:::i;:::-;-1:-1:-1;19571:9:12;;19474:112::o;19591:127::-;19652:10;19647:3;19643:20;19640:1;19633:31;19683:4;19680:1;19673:15;19707:4;19704:1;19697:15;19723:127;19784:10;19779:3;19775:20;19772:1;19765:31;19815:4;19812:1;19805:15;19839:4;19836:1;19829:15;19855:127;19916:10;19911:3;19907:20;19904:1;19897:31;19947:4;19944:1;19937:15;19971:4;19968:1;19961:15;19987:127;20048:10;20043:3;20039:20;20036:1;20029:31;20079:4;20076:1;20069:15;20103:4;20100:1;20093:15;20119:131;-1:-1:-1;;;;;;20193:32:12;;20183:43;;20173:71;;20240:1;20237;20230:12
Swarm Source
ipfs://44d8b8d1f528827d8c22cc203243e57014610e23149b001c13d70f7ea8df5a55
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
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.