Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 65 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 19311160 | 327 days ago | IN | 0 ETH | 0.00088015 | ||||
Set Approval For... | 16197038 | 764 days ago | IN | 0 ETH | 0.0007702 | ||||
Set Approval For... | 16196992 | 764 days ago | IN | 0 ETH | 0.00075008 | ||||
Set Approval For... | 16196910 | 764 days ago | IN | 0 ETH | 0.00102712 | ||||
Set Approval For... | 15818063 | 817 days ago | IN | 0 ETH | 0.00056888 | ||||
Mint | 15682456 | 836 days ago | IN | 0 ETH | 0.00159327 | ||||
Mint | 15678841 | 836 days ago | IN | 0 ETH | 0.0011121 | ||||
Mint | 15678787 | 836 days ago | IN | 0 ETH | 0.00102797 | ||||
Set Approval For... | 15677797 | 837 days ago | IN | 0 ETH | 0.00026183 | ||||
Set Approval For... | 15677777 | 837 days ago | IN | 0 ETH | 0.00057472 | ||||
Mint | 15677423 | 837 days ago | IN | 0 ETH | 0.0019206 | ||||
Mint | 15677360 | 837 days ago | IN | 0 ETH | 0.00121698 | ||||
Mint | 15677322 | 837 days ago | IN | 0 ETH | 0.00158359 | ||||
Mint | 15676310 | 837 days ago | IN | 0 ETH | 0.00269768 | ||||
Mint | 15675801 | 837 days ago | IN | 0 ETH | 0.00288605 | ||||
Mint | 15675527 | 837 days ago | IN | 0 ETH | 0.00272865 | ||||
Mint | 15675524 | 837 days ago | IN | 0 ETH | 0.00235854 | ||||
Owner Batch Mint | 15675516 | 837 days ago | IN | 0 ETH | 0.00214163 | ||||
Owner Batch Mint | 15675516 | 837 days ago | IN | 0 ETH | 0.00214163 | ||||
Airdrop | 15675516 | 837 days ago | IN | 0 ETH | 0.00744696 | ||||
Mint | 15675508 | 837 days ago | IN | 0 ETH | 0.00216945 | ||||
Mint | 15675496 | 837 days ago | IN | 0 ETH | 0.00180621 | ||||
Mint | 15675489 | 837 days ago | IN | 0 ETH | 0.00197673 | ||||
Mint | 15675482 | 837 days ago | IN | 0 ETH | 0.00195547 | ||||
Mint | 15675387 | 837 days ago | IN | 0 ETH | 0.00076418 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
19311160 | 327 days ago | 0.009 ETH |
Loading...
Loading
Contract Name:
Agner
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "./ERC721A.sol"; contract Agner is ERC721A, Ownable, ReentrancyGuard { bool public Minting = false; uint256 public MintPrice = 3000000000000000; string public baseURI; uint256 public maxPerTx = 30; uint256 public maxSupply = 7000; uint256[] public freeMintArray = [3,2,1]; uint256[] public supplyMintArray = [2000,4000,6000]; mapping (address => uint256) public minted; constructor() ERC721A("Agner", "Agner",maxPerTx,maxSupply){} function mint(uint256 qty) external payable { require(Minting , "Agner Minting Close !"); require(qty <= maxPerTx, "Agner Max Per Tx !"); require(totalSupply() + qty <= maxSupply,"Agner Soldout !"); _safemint(qty); } function _safemint(uint256 qty) internal { uint freeMint = FreeMintBatch(totalSupply()); if(minted[msg.sender] < freeMint) { if(qty < freeMint) qty = freeMint; require(msg.value >= (qty - freeMint) * MintPrice,"Agner Insufficient Funds !"); minted[msg.sender] += qty; _safeMint(msg.sender, qty); } else { require(msg.value >= qty * MintPrice,"Agner Insufficient Funds !"); minted[msg.sender] += qty; _safeMint(msg.sender, qty); } } function FreeMintBatch(uint qty) public view returns (uint256) { if(qty < supplyMintArray[0]) { return freeMintArray[0]; } else if (qty < supplyMintArray[1]) { return freeMintArray[1]; } else if (qty < supplyMintArray[2]) { return freeMintArray[2]; } else { return 0; } } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function airdrop(address[] calldata listedAirdrop ,uint256 qty) external onlyOwner { for (uint256 i = 0; i < listedAirdrop.length; i++) { _safeMint(listedAirdrop[i], qty); } } function OwnerBatchMint(uint256 qty) external onlyOwner { _safeMint(msg.sender, qty); } function setPublicMinting() external onlyOwner { Minting = !Minting ; } function setBaseURI(string calldata baseURI_) external onlyOwner { baseURI = baseURI_; } function setPrice(uint256 price_) external onlyOwner { MintPrice = price_; } function setmaxPerTx(uint256 maxPerTx_) external onlyOwner { maxPerTx = maxPerTx_; } function setsupplyMintArray(uint256[] calldata supplyMintArray_) external onlyOwner { supplyMintArray = supplyMintArray_; } function setfreeMintArray(uint256[] calldata freeMintArray_) external onlyOwner { freeMintArray = freeMintArray_; } function setMaxSupply(uint256 maxMint_) external onlyOwner { maxSupply = maxMint_; } function withdraw() public onlyOwner { payable(msg.sender).transfer(payable(address(this)).balance); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); 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 overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// 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/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 (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// 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": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"FreeMintBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Minting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"OwnerBatchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"listedAirdrop","type":"address[]"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"freeMintArray","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","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":"qty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMint_","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"freeMintArray_","type":"uint256[]"}],"name":"setfreeMintArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerTx_","type":"uint256"}],"name":"setmaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"supplyMintArray_","type":"uint256[]"}],"name":"setsupplyMintArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyMintArray","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526000805560006007556000600a60006101000a81548160ff021916908315150217905550660aa87bee538000600b55601e600d55611b58600e556040518060600160405280600360ff168152602001600260ff168152602001600160ff16815250600f9060036200007792919062000306565b5060405180606001604052806107d061ffff168152602001610fa061ffff16815260200161177061ffff168152506010906003620000b79291906200035d565b50348015620000c557600080fd5b506040518060400160405280600581526020017f41676e65720000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f41676e6572000000000000000000000000000000000000000000000000000000815250600d54600e54600081116200017e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017590620004d5565b60405180910390fd5b60008211620001c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001bb90620004b3565b60405180910390fd5b8360019080519060200190620001dc929190620003b5565b508260029080519060200190620001f5929190620003b5565b508160a081815250508060808181525050505050506200022a6200021e6200023860201b60201c565b6200024060201b60201c565b60016009819055506200060b565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280548282559060005260206000209081019282156200034a579160200282015b8281111562000349578251829060ff1690559160200191906001019062000327565b5b50905062000359919062000446565b5090565b828054828255906000526020600020908101928215620003a2579160200282015b82811115620003a1578251829061ffff169055916020019190600101906200037e565b5b509050620003b1919062000446565b5090565b828054620003c39062000508565b90600052602060002090601f016020900481019282620003e7576000855562000433565b82601f106200040257805160ff191683800117855562000433565b8280016001018555821562000433579182015b828111156200043257825182559160200191906001019062000415565b5b50905062000442919062000446565b5090565b5b808211156200046157600081600090555060010162000447565b5090565b600062000474602783620004f7565b915062000481826200056d565b604082019050919050565b60006200049b602e83620004f7565b9150620004a882620005bc565b604082019050919050565b60006020820190508181036000830152620004ce8162000465565b9050919050565b60006020820190508181036000830152620004f0816200048c565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200052157607f821691505b602082108114156200053857620005376200053e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a051614a666200063c60003960008181612195015281816121be0152612b44015260005050614a666000f3fe6080604052600436106102465760003560e01c806380c90d3011610139578063ba7b82a9116100b6578063dc33e6811161007a578063dc33e6811461088f578063e63b211f146108cc578063e985e9c5146108f5578063f2fde38b14610932578063f968adbe1461095b578063fdbf9ef21461098657610246565b8063ba7b82a914610796578063c204642c146107d3578063c87b56dd146107fc578063d5abeb0114610839578063d7224ba01461086457610246565b806395d89b41116100fd57806395d89b41146106e6578063a0712d6814610711578063a22cb4651461072d578063ac915c0614610756578063b88d4fde1461076d57610246565b806380c90d30146106015780638171609b1461062c5780638da5cb5b146106555780638e7d556e1461068057806391b7f5ed146106bd57610246565b806342842e0e116101c75780636f8b44b01161018b5780636f8b44b01461053257806370a082311461055b578063715018a6146105985780637eb63c66146105af578063805dcae5146105d857610246565b806342842e0e1461043b5780634f6ccce71461046457806355f804b3146104a15780636352211e146104ca5780636c0360eb1461050757610246565b806318160ddd1161020e57806318160ddd146103565780631e7269c51461038157806323b872dd146103be5780632f745c59146103e75780633ccfd60b1461042457610246565b806301ffc9a71461024b578063040755cb1461028857806306fdde03146102c5578063081812fc146102f0578063095ea7b31461032d575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906134fa565b6109b1565b60405161027f9190613a94565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906135a1565b610afb565b6040516102bc9190613df1565b60405180910390f35b3480156102d157600080fd5b506102da610b1f565b6040516102e79190613aaf565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906135a1565b610bb1565b6040516103249190613a2d565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061340d565b610c36565b005b34801561036257600080fd5b5061036b610d4f565b6040516103789190613df1565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a3919061328a565b610d58565b6040516103b59190613df1565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906132f7565b610d70565b005b3480156103f357600080fd5b5061040e6004803603810190610409919061340d565b610d80565b60405161041b9190613df1565b60405180910390f35b34801561043057600080fd5b50610439610f7e565b005b34801561044757600080fd5b50610462600480360381019061045d91906132f7565b610fe6565b005b34801561047057600080fd5b5061048b600480360381019061048691906135a1565b611006565b6040516104989190613df1565b60405180910390f35b3480156104ad57600080fd5b506104c860048036038101906104c39190613554565b611059565b005b3480156104d657600080fd5b506104f160048036038101906104ec91906135a1565b611077565b6040516104fe9190613a2d565b60405180910390f35b34801561051357600080fd5b5061051c61108d565b6040516105299190613aaf565b60405180910390f35b34801561053e57600080fd5b50610559600480360381019061055491906135a1565b61111b565b005b34801561056757600080fd5b50610582600480360381019061057d919061328a565b61112d565b60405161058f9190613df1565b60405180910390f35b3480156105a457600080fd5b506105ad611216565b005b3480156105bb57600080fd5b506105d660048036038101906105d191906134ad565b61122a565b005b3480156105e457600080fd5b506105ff60048036038101906105fa91906135a1565b611248565b005b34801561060d57600080fd5b5061061661125a565b6040516106239190613a94565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e91906135a1565b61126d565b005b34801561066157600080fd5b5061066a611282565b6040516106779190613a2d565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a291906135a1565b6112ac565b6040516106b49190613df1565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df91906135a1565b6112d0565b005b3480156106f257600080fd5b506106fb6112e2565b6040516107089190613aaf565b60405180910390f35b61072b600480360381019061072691906135a1565b611374565b005b34801561073957600080fd5b50610754600480360381019061074f91906133cd565b61146b565b005b34801561076257600080fd5b5061076b6115ec565b005b34801561077957600080fd5b50610794600480360381019061078f919061334a565b611620565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906135a1565b61167c565b6040516107ca9190613df1565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f5919061344d565b611772565b005b34801561080857600080fd5b50610823600480360381019061081e91906135a1565b6117d2565b6040516108309190613aaf565b60405180910390f35b34801561084557600080fd5b5061084e611879565b60405161085b9190613df1565b60405180910390f35b34801561087057600080fd5b5061087961187f565b6040516108869190613df1565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b1919061328a565b611885565b6040516108c39190613df1565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee91906134ad565b611897565b005b34801561090157600080fd5b5061091c600480360381019061091791906132b7565b6118b5565b6040516109299190613a94565b60405180910390f35b34801561093e57600080fd5b506109596004803603810190610954919061328a565b611949565b005b34801561096757600080fd5b506109706119cd565b60405161097d9190613df1565b60405180910390f35b34801561099257600080fd5b5061099b6119d3565b6040516109a89190613df1565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af45750610af3826119d9565b5b9050919050565b600f8181548110610b0b57600080fd5b906000526020600020016000915090505481565b606060018054610b2e90614130565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614130565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b5050505050905090565b6000610bbc82611a43565b610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613db1565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c4182611077565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613cd1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd1611a50565b73ffffffffffffffffffffffffffffffffffffffff161480610d005750610cff81610cfa611a50565b6118b5565b5b610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690613bb1565b60405180910390fd5b610d4a838383611a58565b505050565b60008054905090565b60116020528060005260406000206000915090505481565b610d7b838383611b0a565b505050565b6000610d8b8361112d565b8210610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390613ad1565b60405180910390fd5b6000610dd6610d4f565b905060008060005b83811015610f3c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ed057806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f285786841415610f19578195505050505050610f78565b8380610f2490614193565b9450505b508080610f3490614193565b915050610dde565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90613d51565b60405180910390fd5b92915050565b610f866120c3565b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610fe3573d6000803e3d6000fd5b50565b61100183838360405180602001604052806000815250611620565b505050565b6000611010610d4f565b8210611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613b51565b60405180910390fd5b819050919050565b6110616120c3565b8181600c9190611072929190612f85565b505050565b600061108282612141565b600001519050919050565b600c805461109a90614130565b80601f01602080910402602001604051908101604052809291908181526020018280546110c690614130565b80156111135780601f106110e857610100808354040283529160200191611113565b820191906000526020600020905b8154815290600101906020018083116110f657829003601f168201915b505050505081565b6111236120c3565b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613bd1565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61121e6120c3565b6112286000612344565b565b6112326120c3565b81816010919061124392919061300b565b505050565b6112506120c3565b80600d8190555050565b600a60009054906101000a900460ff1681565b6112756120c3565b61127f338261240a565b50565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601081815481106112bc57600080fd5b906000526020600020016000915090505481565b6112d86120c3565b80600b8190555050565b6060600280546112f190614130565b80601f016020809104026020016040519081016040528092919081815260200182805461131d90614130565b801561136a5780601f1061133f5761010080835404028352916020019161136a565b820191906000526020600020905b81548152906001019060200180831161134d57829003601f168201915b5050505050905090565b600a60009054906101000a900460ff166113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613af1565b60405180910390fd5b600d54811115611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90613c31565b60405180910390fd5b600e5481611414610d4f565b61141e9190613eeb565b111561145f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145690613c11565b60405180910390fd5b61146881612428565b50565b611473611a50565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613c91565b60405180910390fd5b80600660006114ee611a50565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159b611a50565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e09190613a94565b60405180910390a35050565b6115f46120c3565b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b61162b848484611b0a565b61163784848484612604565b611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d90613cf1565b60405180910390fd5b50505050565b600060106000815481106116935761169261429a565b5b90600052602060002001548210156116cc57600f6000815481106116ba576116b961429a565b5b9060005260206000200154905061176d565b60106001815481106116e1576116e061429a565b5b906000526020600020015482101561171a57600f6001815481106117085761170761429a565b5b9060005260206000200154905061176d565b601060028154811061172f5761172e61429a565b5b906000526020600020015482101561176857600f6002815481106117565761175561429a565b5b9060005260206000200154905061176d565b600090505b919050565b61177a6120c3565b60005b838390508110156117cc576117b984848381811061179e5761179d61429a565b5b90506020020160208101906117b3919061328a565b8361240a565b80806117c490614193565b91505061177d565b50505050565b60606117dd82611a43565b61181c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181390613c71565b60405180910390fd5b600061182661279b565b905060008151116118465760405180602001604052806000815250611871565b806118508461282d565b604051602001611861929190613a09565b6040516020818303038152906040525b915050919050565b600e5481565b60075481565b60006118908261298e565b9050919050565b61189f6120c3565b8181600f91906118b092919061300b565b505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119516120c3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890613b11565b60405180910390fd5b6119ca81612344565b50565b600d5481565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611b1582612141565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b3c611a50565b73ffffffffffffffffffffffffffffffffffffffff161480611b985750611b61611a50565b73ffffffffffffffffffffffffffffffffffffffff16611b8084610bb1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bb45750611bb38260000151611bae611a50565b6118b5565b5b905080611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed90613cb1565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5f90613bf1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf90613b71565b60405180910390fd5b611ce58585856001612a77565b611cf56000848460000151611a58565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611d639190613fcc565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611e079190613ea5565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611f0d9190613eeb565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561205357611f8381611a43565b15612052576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120bb8686866001612a7d565b505050505050565b6120cb611a50565b73ffffffffffffffffffffffffffffffffffffffff166120e9611282565b73ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690613c51565b60405180910390fd5b565b612149613058565b61215282611a43565b612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890613b31565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106121f55760017f0000000000000000000000000000000000000000000000000000000000000000846121e89190614000565b6121f29190613eeb565b90505b60008390505b818110612303576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122ef5780935050505061233f565b5080806122fb90614106565b9150506121fb565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690613d91565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612424828260405180602001604052806000815250612a83565b5050565b600061243a612435610d4f565b61167c565b905080601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561254f578082101561248f578091505b600b54818361249e9190614000565b6124a89190613f72565b3410156124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e190613d71565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125399190613eeb565b9250508190555061254a338361240a565b612600565b600b548261255d9190613f72565b34101561259f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259690613d71565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ee9190613eeb565b925050819055506125ff338361240a565b5b5050565b60006126258473ffffffffffffffffffffffffffffffffffffffff16612f62565b1561278e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261264e611a50565b8786866040518563ffffffff1660e01b81526004016126709493929190613a48565b602060405180830381600087803b15801561268a57600080fd5b505af19250505080156126bb57506040513d601f19601f820116820180604052508101906126b89190613527565b60015b61273e573d80600081146126eb576040519150601f19603f3d011682016040523d82523d6000602084013e6126f0565b606091505b50600081511415612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272d90613cf1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612793565b600190505b949350505050565b6060600c80546127aa90614130565b80601f01602080910402602001604051908101604052809291908181526020018280546127d690614130565b80156128235780601f106127f857610100808354040283529160200191612823565b820191906000526020600020905b81548152906001019060200180831161280657829003601f168201915b5050505050905090565b60606000821415612875576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612989565b600082905060005b600082146128a757808061289090614193565b915050600a826128a09190613f41565b915061287d565b60008167ffffffffffffffff8111156128c3576128c26142c9565b5b6040519080825280601f01601f1916602001820160405280156128f55781602001600182028036833780820191505090505b5090505b600085146129825760018261290e9190614000565b9150600a8561291d91906141dc565b60306129299190613eeb565b60f81b81838151811061293f5761293e61429a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561297b9190613f41565b94506128f9565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f690613b91565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090613d31565b60405180910390fd5b612b0281611a43565b15612b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3990613d11565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c90613dd1565b60405180910390fd5b612bb26000858386612a77565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612caf9190613ea5565b6fffffffffffffffffffffffffffffffff168152602001858360200151612cd69190613ea5565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612f4557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ee56000888488612604565b612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b90613cf1565b60405180910390fd5b8180612f2f90614193565b9250508080612f3d90614193565b915050612e74565b5080600081905550612f5a6000878588612a7d565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612f9190614130565b90600052602060002090601f016020900481019282612fb35760008555612ffa565b82601f10612fcc57803560ff1916838001178555612ffa565b82800160010185558215612ffa579182015b82811115612ff9578235825591602001919060010190612fde565b5b5090506130079190613092565b5090565b828054828255906000526020600020908101928215613047579160200282015b8281111561304657823582559160200191906001019061302b565b5b5090506130549190613092565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156130ab576000816000905550600101613093565b5090565b60006130c26130bd84613e31565b613e0c565b9050828152602081018484840111156130de576130dd614307565b5b6130e98482856140c4565b509392505050565b600081359050613100816149d4565b92915050565b60008083601f84011261311c5761311b6142fd565b5b8235905067ffffffffffffffff811115613139576131386142f8565b5b60208301915083602082028301111561315557613154614302565b5b9250929050565b60008083601f840112613172576131716142fd565b5b8235905067ffffffffffffffff81111561318f5761318e6142f8565b5b6020830191508360208202830111156131ab576131aa614302565b5b9250929050565b6000813590506131c1816149eb565b92915050565b6000813590506131d681614a02565b92915050565b6000815190506131eb81614a02565b92915050565b600082601f830112613206576132056142fd565b5b81356132168482602086016130af565b91505092915050565b60008083601f840112613235576132346142fd565b5b8235905067ffffffffffffffff811115613252576132516142f8565b5b60208301915083600182028301111561326e5761326d614302565b5b9250929050565b60008135905061328481614a19565b92915050565b6000602082840312156132a05761329f614311565b5b60006132ae848285016130f1565b91505092915050565b600080604083850312156132ce576132cd614311565b5b60006132dc858286016130f1565b92505060206132ed858286016130f1565b9150509250929050565b6000806000606084860312156133105761330f614311565b5b600061331e868287016130f1565b935050602061332f868287016130f1565b925050604061334086828701613275565b9150509250925092565b6000806000806080858703121561336457613363614311565b5b6000613372878288016130f1565b9450506020613383878288016130f1565b935050604061339487828801613275565b925050606085013567ffffffffffffffff8111156133b5576133b461430c565b5b6133c1878288016131f1565b91505092959194509250565b600080604083850312156133e4576133e3614311565b5b60006133f2858286016130f1565b9250506020613403858286016131b2565b9150509250929050565b6000806040838503121561342457613423614311565b5b6000613432858286016130f1565b925050602061344385828601613275565b9150509250929050565b60008060006040848603121561346657613465614311565b5b600084013567ffffffffffffffff8111156134845761348361430c565b5b61349086828701613106565b935093505060206134a386828701613275565b9150509250925092565b600080602083850312156134c4576134c3614311565b5b600083013567ffffffffffffffff8111156134e2576134e161430c565b5b6134ee8582860161315c565b92509250509250929050565b6000602082840312156135105761350f614311565b5b600061351e848285016131c7565b91505092915050565b60006020828403121561353d5761353c614311565b5b600061354b848285016131dc565b91505092915050565b6000806020838503121561356b5761356a614311565b5b600083013567ffffffffffffffff8111156135895761358861430c565b5b6135958582860161321f565b92509250509250929050565b6000602082840312156135b7576135b6614311565b5b60006135c584828501613275565b91505092915050565b6135d781614034565b82525050565b6135e681614046565b82525050565b60006135f782613e62565b6136018185613e78565b93506136118185602086016140d3565b61361a81614316565b840191505092915050565b600061363082613e6d565b61363a8185613e89565b935061364a8185602086016140d3565b61365381614316565b840191505092915050565b600061366982613e6d565b6136738185613e9a565b93506136838185602086016140d3565b80840191505092915050565b600061369c602283613e89565b91506136a782614327565b604082019050919050565b60006136bf601583613e89565b91506136ca82614376565b602082019050919050565b60006136e2602683613e89565b91506136ed8261439f565b604082019050919050565b6000613705602a83613e89565b9150613710826143ee565b604082019050919050565b6000613728602383613e89565b91506137338261443d565b604082019050919050565b600061374b602583613e89565b91506137568261448c565b604082019050919050565b600061376e603183613e89565b9150613779826144db565b604082019050919050565b6000613791603983613e89565b915061379c8261452a565b604082019050919050565b60006137b4602b83613e89565b91506137bf82614579565b604082019050919050565b60006137d7602683613e89565b91506137e2826145c8565b604082019050919050565b60006137fa600f83613e89565b915061380582614617565b602082019050919050565b600061381d601283613e89565b915061382882614640565b602082019050919050565b6000613840602083613e89565b915061384b82614669565b602082019050919050565b6000613863602f83613e89565b915061386e82614692565b604082019050919050565b6000613886601a83613e89565b9150613891826146e1565b602082019050919050565b60006138a9603283613e89565b91506138b48261470a565b604082019050919050565b60006138cc602283613e89565b91506138d782614759565b604082019050919050565b60006138ef603383613e89565b91506138fa826147a8565b604082019050919050565b6000613912601d83613e89565b915061391d826147f7565b602082019050919050565b6000613935602183613e89565b915061394082614820565b604082019050919050565b6000613958602e83613e89565b91506139638261486f565b604082019050919050565b600061397b601a83613e89565b9150613986826148be565b602082019050919050565b600061399e602f83613e89565b91506139a9826148e7565b604082019050919050565b60006139c1602d83613e89565b91506139cc82614936565b604082019050919050565b60006139e4602283613e89565b91506139ef82614985565b604082019050919050565b613a03816140ba565b82525050565b6000613a15828561365e565b9150613a21828461365e565b91508190509392505050565b6000602082019050613a4260008301846135ce565b92915050565b6000608082019050613a5d60008301876135ce565b613a6a60208301866135ce565b613a7760408301856139fa565b8181036060830152613a8981846135ec565b905095945050505050565b6000602082019050613aa960008301846135dd565b92915050565b60006020820190508181036000830152613ac98184613625565b905092915050565b60006020820190508181036000830152613aea8161368f565b9050919050565b60006020820190508181036000830152613b0a816136b2565b9050919050565b60006020820190508181036000830152613b2a816136d5565b9050919050565b60006020820190508181036000830152613b4a816136f8565b9050919050565b60006020820190508181036000830152613b6a8161371b565b9050919050565b60006020820190508181036000830152613b8a8161373e565b9050919050565b60006020820190508181036000830152613baa81613761565b9050919050565b60006020820190508181036000830152613bca81613784565b9050919050565b60006020820190508181036000830152613bea816137a7565b9050919050565b60006020820190508181036000830152613c0a816137ca565b9050919050565b60006020820190508181036000830152613c2a816137ed565b9050919050565b60006020820190508181036000830152613c4a81613810565b9050919050565b60006020820190508181036000830152613c6a81613833565b9050919050565b60006020820190508181036000830152613c8a81613856565b9050919050565b60006020820190508181036000830152613caa81613879565b9050919050565b60006020820190508181036000830152613cca8161389c565b9050919050565b60006020820190508181036000830152613cea816138bf565b9050919050565b60006020820190508181036000830152613d0a816138e2565b9050919050565b60006020820190508181036000830152613d2a81613905565b9050919050565b60006020820190508181036000830152613d4a81613928565b9050919050565b60006020820190508181036000830152613d6a8161394b565b9050919050565b60006020820190508181036000830152613d8a8161396e565b9050919050565b60006020820190508181036000830152613daa81613991565b9050919050565b60006020820190508181036000830152613dca816139b4565b9050919050565b60006020820190508181036000830152613dea816139d7565b9050919050565b6000602082019050613e0660008301846139fa565b92915050565b6000613e16613e27565b9050613e228282614162565b919050565b6000604051905090565b600067ffffffffffffffff821115613e4c57613e4b6142c9565b5b613e5582614316565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613eb08261407e565b9150613ebb8361407e565b9250826fffffffffffffffffffffffffffffffff03821115613ee057613edf61420d565b5b828201905092915050565b6000613ef6826140ba565b9150613f01836140ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f3657613f3561420d565b5b828201905092915050565b6000613f4c826140ba565b9150613f57836140ba565b925082613f6757613f6661423c565b5b828204905092915050565b6000613f7d826140ba565b9150613f88836140ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fc157613fc061420d565b5b828202905092915050565b6000613fd78261407e565b9150613fe28361407e565b925082821015613ff557613ff461420d565b5b828203905092915050565b600061400b826140ba565b9150614016836140ba565b9250828210156140295761402861420d565b5b828203905092915050565b600061403f8261409a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140f15780820151818401526020810190506140d6565b83811115614100576000848401525b50505050565b6000614111826140ba565b915060008214156141255761412461420d565b5b600182039050919050565b6000600282049050600182168061414857607f821691505b6020821081141561415c5761415b61426b565b5b50919050565b61416b82614316565b810181811067ffffffffffffffff8211171561418a576141896142c9565b5b80604052505050565b600061419e826140ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141d1576141d061420d565b5b600182019050919050565b60006141e7826140ba565b91506141f2836140ba565b9250826142025761420161423c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f41676e6572204d696e74696e6720436c6f736520210000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f41676e657220536f6c646f757420210000000000000000000000000000000000600082015250565b7f41676e6572204d61782050657220547820210000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f41676e657220496e73756666696369656e742046756e64732021000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6149dd81614034565b81146149e857600080fd5b50565b6149f481614046565b81146149ff57600080fd5b50565b614a0b81614052565b8114614a1657600080fd5b50565b614a22816140ba565b8114614a2d57600080fd5b5056fea264697066735822122038e99dd0434f1c3200cf0685fe4302dd91a06a8465056742c80f0fe84a96bb5664736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102465760003560e01c806380c90d3011610139578063ba7b82a9116100b6578063dc33e6811161007a578063dc33e6811461088f578063e63b211f146108cc578063e985e9c5146108f5578063f2fde38b14610932578063f968adbe1461095b578063fdbf9ef21461098657610246565b8063ba7b82a914610796578063c204642c146107d3578063c87b56dd146107fc578063d5abeb0114610839578063d7224ba01461086457610246565b806395d89b41116100fd57806395d89b41146106e6578063a0712d6814610711578063a22cb4651461072d578063ac915c0614610756578063b88d4fde1461076d57610246565b806380c90d30146106015780638171609b1461062c5780638da5cb5b146106555780638e7d556e1461068057806391b7f5ed146106bd57610246565b806342842e0e116101c75780636f8b44b01161018b5780636f8b44b01461053257806370a082311461055b578063715018a6146105985780637eb63c66146105af578063805dcae5146105d857610246565b806342842e0e1461043b5780634f6ccce71461046457806355f804b3146104a15780636352211e146104ca5780636c0360eb1461050757610246565b806318160ddd1161020e57806318160ddd146103565780631e7269c51461038157806323b872dd146103be5780632f745c59146103e75780633ccfd60b1461042457610246565b806301ffc9a71461024b578063040755cb1461028857806306fdde03146102c5578063081812fc146102f0578063095ea7b31461032d575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906134fa565b6109b1565b60405161027f9190613a94565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906135a1565b610afb565b6040516102bc9190613df1565b60405180910390f35b3480156102d157600080fd5b506102da610b1f565b6040516102e79190613aaf565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906135a1565b610bb1565b6040516103249190613a2d565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f919061340d565b610c36565b005b34801561036257600080fd5b5061036b610d4f565b6040516103789190613df1565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a3919061328a565b610d58565b6040516103b59190613df1565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906132f7565b610d70565b005b3480156103f357600080fd5b5061040e6004803603810190610409919061340d565b610d80565b60405161041b9190613df1565b60405180910390f35b34801561043057600080fd5b50610439610f7e565b005b34801561044757600080fd5b50610462600480360381019061045d91906132f7565b610fe6565b005b34801561047057600080fd5b5061048b600480360381019061048691906135a1565b611006565b6040516104989190613df1565b60405180910390f35b3480156104ad57600080fd5b506104c860048036038101906104c39190613554565b611059565b005b3480156104d657600080fd5b506104f160048036038101906104ec91906135a1565b611077565b6040516104fe9190613a2d565b60405180910390f35b34801561051357600080fd5b5061051c61108d565b6040516105299190613aaf565b60405180910390f35b34801561053e57600080fd5b50610559600480360381019061055491906135a1565b61111b565b005b34801561056757600080fd5b50610582600480360381019061057d919061328a565b61112d565b60405161058f9190613df1565b60405180910390f35b3480156105a457600080fd5b506105ad611216565b005b3480156105bb57600080fd5b506105d660048036038101906105d191906134ad565b61122a565b005b3480156105e457600080fd5b506105ff60048036038101906105fa91906135a1565b611248565b005b34801561060d57600080fd5b5061061661125a565b6040516106239190613a94565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e91906135a1565b61126d565b005b34801561066157600080fd5b5061066a611282565b6040516106779190613a2d565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a291906135a1565b6112ac565b6040516106b49190613df1565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df91906135a1565b6112d0565b005b3480156106f257600080fd5b506106fb6112e2565b6040516107089190613aaf565b60405180910390f35b61072b600480360381019061072691906135a1565b611374565b005b34801561073957600080fd5b50610754600480360381019061074f91906133cd565b61146b565b005b34801561076257600080fd5b5061076b6115ec565b005b34801561077957600080fd5b50610794600480360381019061078f919061334a565b611620565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906135a1565b61167c565b6040516107ca9190613df1565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f5919061344d565b611772565b005b34801561080857600080fd5b50610823600480360381019061081e91906135a1565b6117d2565b6040516108309190613aaf565b60405180910390f35b34801561084557600080fd5b5061084e611879565b60405161085b9190613df1565b60405180910390f35b34801561087057600080fd5b5061087961187f565b6040516108869190613df1565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b1919061328a565b611885565b6040516108c39190613df1565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee91906134ad565b611897565b005b34801561090157600080fd5b5061091c600480360381019061091791906132b7565b6118b5565b6040516109299190613a94565b60405180910390f35b34801561093e57600080fd5b506109596004803603810190610954919061328a565b611949565b005b34801561096757600080fd5b506109706119cd565b60405161097d9190613df1565b60405180910390f35b34801561099257600080fd5b5061099b6119d3565b6040516109a89190613df1565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ae457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af45750610af3826119d9565b5b9050919050565b600f8181548110610b0b57600080fd5b906000526020600020016000915090505481565b606060018054610b2e90614130565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614130565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b5050505050905090565b6000610bbc82611a43565b610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613db1565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c4182611077565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613cd1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd1611a50565b73ffffffffffffffffffffffffffffffffffffffff161480610d005750610cff81610cfa611a50565b6118b5565b5b610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690613bb1565b60405180910390fd5b610d4a838383611a58565b505050565b60008054905090565b60116020528060005260406000206000915090505481565b610d7b838383611b0a565b505050565b6000610d8b8361112d565b8210610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390613ad1565b60405180910390fd5b6000610dd6610d4f565b905060008060005b83811015610f3c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ed057806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f285786841415610f19578195505050505050610f78565b8380610f2490614193565b9450505b508080610f3490614193565b915050610dde565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90613d51565b60405180910390fd5b92915050565b610f866120c3565b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610fe3573d6000803e3d6000fd5b50565b61100183838360405180602001604052806000815250611620565b505050565b6000611010610d4f565b8210611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613b51565b60405180910390fd5b819050919050565b6110616120c3565b8181600c9190611072929190612f85565b505050565b600061108282612141565b600001519050919050565b600c805461109a90614130565b80601f01602080910402602001604051908101604052809291908181526020018280546110c690614130565b80156111135780601f106110e857610100808354040283529160200191611113565b820191906000526020600020905b8154815290600101906020018083116110f657829003601f168201915b505050505081565b6111236120c3565b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613bd1565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61121e6120c3565b6112286000612344565b565b6112326120c3565b81816010919061124392919061300b565b505050565b6112506120c3565b80600d8190555050565b600a60009054906101000a900460ff1681565b6112756120c3565b61127f338261240a565b50565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601081815481106112bc57600080fd5b906000526020600020016000915090505481565b6112d86120c3565b80600b8190555050565b6060600280546112f190614130565b80601f016020809104026020016040519081016040528092919081815260200182805461131d90614130565b801561136a5780601f1061133f5761010080835404028352916020019161136a565b820191906000526020600020905b81548152906001019060200180831161134d57829003601f168201915b5050505050905090565b600a60009054906101000a900460ff166113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613af1565b60405180910390fd5b600d54811115611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90613c31565b60405180910390fd5b600e5481611414610d4f565b61141e9190613eeb565b111561145f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145690613c11565b60405180910390fd5b61146881612428565b50565b611473611a50565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613c91565b60405180910390fd5b80600660006114ee611a50565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159b611a50565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e09190613a94565b60405180910390a35050565b6115f46120c3565b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b61162b848484611b0a565b61163784848484612604565b611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d90613cf1565b60405180910390fd5b50505050565b600060106000815481106116935761169261429a565b5b90600052602060002001548210156116cc57600f6000815481106116ba576116b961429a565b5b9060005260206000200154905061176d565b60106001815481106116e1576116e061429a565b5b906000526020600020015482101561171a57600f6001815481106117085761170761429a565b5b9060005260206000200154905061176d565b601060028154811061172f5761172e61429a565b5b906000526020600020015482101561176857600f6002815481106117565761175561429a565b5b9060005260206000200154905061176d565b600090505b919050565b61177a6120c3565b60005b838390508110156117cc576117b984848381811061179e5761179d61429a565b5b90506020020160208101906117b3919061328a565b8361240a565b80806117c490614193565b91505061177d565b50505050565b60606117dd82611a43565b61181c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181390613c71565b60405180910390fd5b600061182661279b565b905060008151116118465760405180602001604052806000815250611871565b806118508461282d565b604051602001611861929190613a09565b6040516020818303038152906040525b915050919050565b600e5481565b60075481565b60006118908261298e565b9050919050565b61189f6120c3565b8181600f91906118b092919061300b565b505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119516120c3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890613b11565b60405180910390fd5b6119ca81612344565b50565b600d5481565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611b1582612141565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611b3c611a50565b73ffffffffffffffffffffffffffffffffffffffff161480611b985750611b61611a50565b73ffffffffffffffffffffffffffffffffffffffff16611b8084610bb1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bb45750611bb38260000151611bae611a50565b6118b5565b5b905080611bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bed90613cb1565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5f90613bf1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf90613b71565b60405180910390fd5b611ce58585856001612a77565b611cf56000848460000151611a58565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611d639190613fcc565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611e079190613ea5565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611f0d9190613eeb565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561205357611f8381611a43565b15612052576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120bb8686866001612a7d565b505050505050565b6120cb611a50565b73ffffffffffffffffffffffffffffffffffffffff166120e9611282565b73ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690613c51565b60405180910390fd5b565b612149613058565b61215282611a43565b612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890613b31565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000001e83106121f55760017f000000000000000000000000000000000000000000000000000000000000001e846121e89190614000565b6121f29190613eeb565b90505b60008390505b818110612303576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122ef5780935050505061233f565b5080806122fb90614106565b9150506121fb565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690613d91565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612424828260405180602001604052806000815250612a83565b5050565b600061243a612435610d4f565b61167c565b905080601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561254f578082101561248f578091505b600b54818361249e9190614000565b6124a89190613f72565b3410156124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e190613d71565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125399190613eeb565b9250508190555061254a338361240a565b612600565b600b548261255d9190613f72565b34101561259f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259690613d71565b60405180910390fd5b81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ee9190613eeb565b925050819055506125ff338361240a565b5b5050565b60006126258473ffffffffffffffffffffffffffffffffffffffff16612f62565b1561278e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261264e611a50565b8786866040518563ffffffff1660e01b81526004016126709493929190613a48565b602060405180830381600087803b15801561268a57600080fd5b505af19250505080156126bb57506040513d601f19601f820116820180604052508101906126b89190613527565b60015b61273e573d80600081146126eb576040519150601f19603f3d011682016040523d82523d6000602084013e6126f0565b606091505b50600081511415612736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272d90613cf1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612793565b600190505b949350505050565b6060600c80546127aa90614130565b80601f01602080910402602001604051908101604052809291908181526020018280546127d690614130565b80156128235780601f106127f857610100808354040283529160200191612823565b820191906000526020600020905b81548152906001019060200180831161280657829003601f168201915b5050505050905090565b60606000821415612875576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612989565b600082905060005b600082146128a757808061289090614193565b915050600a826128a09190613f41565b915061287d565b60008167ffffffffffffffff8111156128c3576128c26142c9565b5b6040519080825280601f01601f1916602001820160405280156128f55781602001600182028036833780820191505090505b5090505b600085146129825760018261290e9190614000565b9150600a8561291d91906141dc565b60306129299190613eeb565b60f81b81838151811061293f5761293e61429a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561297b9190613f41565b94506128f9565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f690613b91565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090613d31565b60405180910390fd5b612b0281611a43565b15612b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3990613d11565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000001e831115612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c90613dd1565b60405180910390fd5b612bb26000858386612a77565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612caf9190613ea5565b6fffffffffffffffffffffffffffffffff168152602001858360200151612cd69190613ea5565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612f4557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ee56000888488612604565b612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b90613cf1565b60405180910390fd5b8180612f2f90614193565b9250508080612f3d90614193565b915050612e74565b5080600081905550612f5a6000878588612a7d565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612f9190614130565b90600052602060002090601f016020900481019282612fb35760008555612ffa565b82601f10612fcc57803560ff1916838001178555612ffa565b82800160010185558215612ffa579182015b82811115612ff9578235825591602001919060010190612fde565b5b5090506130079190613092565b5090565b828054828255906000526020600020908101928215613047579160200282015b8281111561304657823582559160200191906001019061302b565b5b5090506130549190613092565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156130ab576000816000905550600101613093565b5090565b60006130c26130bd84613e31565b613e0c565b9050828152602081018484840111156130de576130dd614307565b5b6130e98482856140c4565b509392505050565b600081359050613100816149d4565b92915050565b60008083601f84011261311c5761311b6142fd565b5b8235905067ffffffffffffffff811115613139576131386142f8565b5b60208301915083602082028301111561315557613154614302565b5b9250929050565b60008083601f840112613172576131716142fd565b5b8235905067ffffffffffffffff81111561318f5761318e6142f8565b5b6020830191508360208202830111156131ab576131aa614302565b5b9250929050565b6000813590506131c1816149eb565b92915050565b6000813590506131d681614a02565b92915050565b6000815190506131eb81614a02565b92915050565b600082601f830112613206576132056142fd565b5b81356132168482602086016130af565b91505092915050565b60008083601f840112613235576132346142fd565b5b8235905067ffffffffffffffff811115613252576132516142f8565b5b60208301915083600182028301111561326e5761326d614302565b5b9250929050565b60008135905061328481614a19565b92915050565b6000602082840312156132a05761329f614311565b5b60006132ae848285016130f1565b91505092915050565b600080604083850312156132ce576132cd614311565b5b60006132dc858286016130f1565b92505060206132ed858286016130f1565b9150509250929050565b6000806000606084860312156133105761330f614311565b5b600061331e868287016130f1565b935050602061332f868287016130f1565b925050604061334086828701613275565b9150509250925092565b6000806000806080858703121561336457613363614311565b5b6000613372878288016130f1565b9450506020613383878288016130f1565b935050604061339487828801613275565b925050606085013567ffffffffffffffff8111156133b5576133b461430c565b5b6133c1878288016131f1565b91505092959194509250565b600080604083850312156133e4576133e3614311565b5b60006133f2858286016130f1565b9250506020613403858286016131b2565b9150509250929050565b6000806040838503121561342457613423614311565b5b6000613432858286016130f1565b925050602061344385828601613275565b9150509250929050565b60008060006040848603121561346657613465614311565b5b600084013567ffffffffffffffff8111156134845761348361430c565b5b61349086828701613106565b935093505060206134a386828701613275565b9150509250925092565b600080602083850312156134c4576134c3614311565b5b600083013567ffffffffffffffff8111156134e2576134e161430c565b5b6134ee8582860161315c565b92509250509250929050565b6000602082840312156135105761350f614311565b5b600061351e848285016131c7565b91505092915050565b60006020828403121561353d5761353c614311565b5b600061354b848285016131dc565b91505092915050565b6000806020838503121561356b5761356a614311565b5b600083013567ffffffffffffffff8111156135895761358861430c565b5b6135958582860161321f565b92509250509250929050565b6000602082840312156135b7576135b6614311565b5b60006135c584828501613275565b91505092915050565b6135d781614034565b82525050565b6135e681614046565b82525050565b60006135f782613e62565b6136018185613e78565b93506136118185602086016140d3565b61361a81614316565b840191505092915050565b600061363082613e6d565b61363a8185613e89565b935061364a8185602086016140d3565b61365381614316565b840191505092915050565b600061366982613e6d565b6136738185613e9a565b93506136838185602086016140d3565b80840191505092915050565b600061369c602283613e89565b91506136a782614327565b604082019050919050565b60006136bf601583613e89565b91506136ca82614376565b602082019050919050565b60006136e2602683613e89565b91506136ed8261439f565b604082019050919050565b6000613705602a83613e89565b9150613710826143ee565b604082019050919050565b6000613728602383613e89565b91506137338261443d565b604082019050919050565b600061374b602583613e89565b91506137568261448c565b604082019050919050565b600061376e603183613e89565b9150613779826144db565b604082019050919050565b6000613791603983613e89565b915061379c8261452a565b604082019050919050565b60006137b4602b83613e89565b91506137bf82614579565b604082019050919050565b60006137d7602683613e89565b91506137e2826145c8565b604082019050919050565b60006137fa600f83613e89565b915061380582614617565b602082019050919050565b600061381d601283613e89565b915061382882614640565b602082019050919050565b6000613840602083613e89565b915061384b82614669565b602082019050919050565b6000613863602f83613e89565b915061386e82614692565b604082019050919050565b6000613886601a83613e89565b9150613891826146e1565b602082019050919050565b60006138a9603283613e89565b91506138b48261470a565b604082019050919050565b60006138cc602283613e89565b91506138d782614759565b604082019050919050565b60006138ef603383613e89565b91506138fa826147a8565b604082019050919050565b6000613912601d83613e89565b915061391d826147f7565b602082019050919050565b6000613935602183613e89565b915061394082614820565b604082019050919050565b6000613958602e83613e89565b91506139638261486f565b604082019050919050565b600061397b601a83613e89565b9150613986826148be565b602082019050919050565b600061399e602f83613e89565b91506139a9826148e7565b604082019050919050565b60006139c1602d83613e89565b91506139cc82614936565b604082019050919050565b60006139e4602283613e89565b91506139ef82614985565b604082019050919050565b613a03816140ba565b82525050565b6000613a15828561365e565b9150613a21828461365e565b91508190509392505050565b6000602082019050613a4260008301846135ce565b92915050565b6000608082019050613a5d60008301876135ce565b613a6a60208301866135ce565b613a7760408301856139fa565b8181036060830152613a8981846135ec565b905095945050505050565b6000602082019050613aa960008301846135dd565b92915050565b60006020820190508181036000830152613ac98184613625565b905092915050565b60006020820190508181036000830152613aea8161368f565b9050919050565b60006020820190508181036000830152613b0a816136b2565b9050919050565b60006020820190508181036000830152613b2a816136d5565b9050919050565b60006020820190508181036000830152613b4a816136f8565b9050919050565b60006020820190508181036000830152613b6a8161371b565b9050919050565b60006020820190508181036000830152613b8a8161373e565b9050919050565b60006020820190508181036000830152613baa81613761565b9050919050565b60006020820190508181036000830152613bca81613784565b9050919050565b60006020820190508181036000830152613bea816137a7565b9050919050565b60006020820190508181036000830152613c0a816137ca565b9050919050565b60006020820190508181036000830152613c2a816137ed565b9050919050565b60006020820190508181036000830152613c4a81613810565b9050919050565b60006020820190508181036000830152613c6a81613833565b9050919050565b60006020820190508181036000830152613c8a81613856565b9050919050565b60006020820190508181036000830152613caa81613879565b9050919050565b60006020820190508181036000830152613cca8161389c565b9050919050565b60006020820190508181036000830152613cea816138bf565b9050919050565b60006020820190508181036000830152613d0a816138e2565b9050919050565b60006020820190508181036000830152613d2a81613905565b9050919050565b60006020820190508181036000830152613d4a81613928565b9050919050565b60006020820190508181036000830152613d6a8161394b565b9050919050565b60006020820190508181036000830152613d8a8161396e565b9050919050565b60006020820190508181036000830152613daa81613991565b9050919050565b60006020820190508181036000830152613dca816139b4565b9050919050565b60006020820190508181036000830152613dea816139d7565b9050919050565b6000602082019050613e0660008301846139fa565b92915050565b6000613e16613e27565b9050613e228282614162565b919050565b6000604051905090565b600067ffffffffffffffff821115613e4c57613e4b6142c9565b5b613e5582614316565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613eb08261407e565b9150613ebb8361407e565b9250826fffffffffffffffffffffffffffffffff03821115613ee057613edf61420d565b5b828201905092915050565b6000613ef6826140ba565b9150613f01836140ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f3657613f3561420d565b5b828201905092915050565b6000613f4c826140ba565b9150613f57836140ba565b925082613f6757613f6661423c565b5b828204905092915050565b6000613f7d826140ba565b9150613f88836140ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fc157613fc061420d565b5b828202905092915050565b6000613fd78261407e565b9150613fe28361407e565b925082821015613ff557613ff461420d565b5b828203905092915050565b600061400b826140ba565b9150614016836140ba565b9250828210156140295761402861420d565b5b828203905092915050565b600061403f8261409a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140f15780820151818401526020810190506140d6565b83811115614100576000848401525b50505050565b6000614111826140ba565b915060008214156141255761412461420d565b5b600182039050919050565b6000600282049050600182168061414857607f821691505b6020821081141561415c5761415b61426b565b5b50919050565b61416b82614316565b810181811067ffffffffffffffff8211171561418a576141896142c9565b5b80604052505050565b600061419e826140ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141d1576141d061420d565b5b600182019050919050565b60006141e7826140ba565b91506141f2836140ba565b9250826142025761420161423c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f41676e6572204d696e74696e6720436c6f736520210000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f41676e657220536f6c646f757420210000000000000000000000000000000000600082015250565b7f41676e6572204d61782050657220547820210000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f41676e657220496e73756666696369656e742046756e64732021000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6149dd81614034565b81146149e857600080fd5b50565b6149f481614046565b81146149ff57600080fd5b50565b614a0b81614052565b8114614a1657600080fd5b50565b614a22816140ba565b8114614a2d57600080fd5b5056fea264697066735822122038e99dd0434f1c3200cf0685fe4302dd91a06a8465056742c80f0fe84a96bb5664736f6c63430008070033
Deployed Bytecode Sourcemap
207:3277:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4251:370:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;458:40:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5977:94:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7502:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7065:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2812:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;563:42:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8352:142:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3443:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3363:116:11;;;;;;;;;;;;;:::i;:::-;;8557:157:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2975:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2657:102:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5800:118:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;353:21:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3257:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4677:211:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1831:101:0;;;;;;;;;;;;;:::i;:::-;;2971:137:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2865:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;268:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2445:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1201:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;505:51:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2767:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6132:98:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;682:262:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7770:274:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2559:86:11;;;;;;;;;;;;;:::i;:::-;;8777:311:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1546:436:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2227:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6293:394:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;420:31:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13192:43:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1990:113:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3120:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8107:186:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2081:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;383:28:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;303:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4251:370:12;4378:4;4423:25;4408:40;;;:11;:40;;;;:99;;;;4474:33;4459:48;;;:11;:48;;;;4408:99;:160;;;;4533:35;4518:50;;;:11;:50;;;;4408:160;:207;;;;4579:36;4603:11;4579:23;:36::i;:::-;4408:207;4394:221;;4251:370;;;:::o;458:40:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5977:94:12:-;6031:13;6060:5;6053:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5977:94;:::o;7502:204::-;7570:7;7594:16;7602:7;7594;:16::i;:::-;7586:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7676:15;:24;7692:7;7676:24;;;;;;;;;;;;;;;;;;;;;7669:31;;7502:204;;;:::o;7065:379::-;7134:13;7150:24;7166:7;7150:15;:24::i;:::-;7134:40;;7195:5;7189:11;;:2;:11;;;;7181:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;7280:5;7264:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;7289:37;7306:5;7313:12;:10;:12::i;:::-;7289:16;:37::i;:::-;7264:62;7248:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;7410:28;7419:2;7423:7;7432:5;7410:8;:28::i;:::-;7127:317;7065:379;;:::o;2812:94::-;2865:7;2888:12;;2881:19;;2812:94;:::o;563:42:11:-;;;;;;;;;;;;;;;;;:::o;8352:142:12:-;8460:28;8470:4;8476:2;8480:7;8460:9;:28::i;:::-;8352:142;;;:::o;3443:744::-;3552:7;3587:16;3597:5;3587:9;:16::i;:::-;3579:5;:24;3571:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3649:22;3674:13;:11;:13::i;:::-;3649:38;;3694:19;3724:25;3774:9;3769:350;3793:14;3789:1;:18;3769:350;;;3823:31;3857:11;:14;3869:1;3857:14;;;;;;;;;;;3823:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3910:1;3884:28;;:9;:14;;;:28;;;3880:89;;3945:9;:14;;;3925:34;;3880:89;4002:5;3981:26;;:17;:26;;;3977:135;;;4039:5;4024:11;:20;4020:59;;;4066:1;4059:8;;;;;;;;;4020:59;4089:13;;;;;:::i;:::-;;;;3977:135;3814:305;3809:3;;;;;:::i;:::-;;;;3769:350;;;;4125:56;;;;;;;;;;:::i;:::-;;;;;;;;3443:744;;;;;:::o;3363:116:11:-;1094:13:0;:11;:13::i;:::-;3419:10:11::1;3411:28;;:60;3456:4;3440:30;;;3411:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3363:116::o:0;8557:157:12:-;8669:39;8686:4;8692:2;8696:7;8669:39;;;;;;;;;;;;:16;:39::i;:::-;8557:157;;;:::o;2975:177::-;3042:7;3074:13;:11;:13::i;:::-;3066:5;:21;3058:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;3141:5;3134:12;;2975:177;;;:::o;2657:102:11:-;1094:13:0;:11;:13::i;:::-;2743:8:11::1;;2733:7;:18;;;;;;;:::i;:::-;;2657:102:::0;;:::o;5800:118:12:-;5864:7;5887:20;5899:7;5887:11;:20::i;:::-;:25;;;5880:32;;5800:118;;;:::o;353:21:11:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3257:98::-;1094:13:0;:11;:13::i;:::-;3339:8:11::1;3327:9;:20;;;;3257:98:::0;:::o;4677:211:12:-;4741:7;4782:1;4765:19;;:5;:19;;;;4757:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4854:12;:19;4867:5;4854:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4846:36;;4839:43;;4677:211;;;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;2971:137:11:-;1094:13:0;:11;:13::i;:::-;3084:16:11::1;;3066:15;:34;;;;;;;:::i;:::-;;2971:137:::0;;:::o;2865:98::-;1094:13:0;:11;:13::i;:::-;2946:9:11::1;2935:8;:20;;;;2865:98:::0;:::o;268:28::-;;;;;;;;;;;;;:::o;2445:106::-;1094:13:0;:11;:13::i;:::-;2517:26:11::1;2527:10;2539:3;2517:9;:26::i;:::-;2445:106:::0;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;505:51:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2767:90::-;1094:13:0;:11;:13::i;:::-;2843:6:11::1;2831:9;:18;;;;2767:90:::0;:::o;6132:98:12:-;6188:13;6217:7;6210:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6132:98;:::o;682:262:11:-;750:7;;;;;;;;;;;742:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;810:8;;803:3;:15;;795:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;883:9;;876:3;860:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:32;;852:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;922:14;932:3;922:9;:14::i;:::-;682:262;:::o;7770:274:12:-;7873:12;:10;:12::i;:::-;7861:24;;:8;:24;;;;7853:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7970:8;7925:18;:32;7944:12;:10;:12::i;:::-;7925:32;;;;;;;;;;;;;;;:42;7958:8;7925:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;8019:8;7990:48;;8005:12;:10;:12::i;:::-;7990:48;;;8029:8;7990:48;;;;;;:::i;:::-;;;;;;;;7770:274;;:::o;2559:86:11:-;1094:13:0;:11;:13::i;:::-;2629:7:11::1;;;;;;;;;;;2628:8;2617:7;;:19;;;;;;;;;;;;;;;;;;2559:86::o:0;8777:311:12:-;8914:28;8924:4;8930:2;8934:7;8914:9;:28::i;:::-;8965:48;8988:4;8994:2;8998:7;9007:5;8965:22;:48::i;:::-;8949:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;8777:311;;;;:::o;1546:436:11:-;1600:7;1629:15;1645:1;1629:18;;;;;;;;:::i;:::-;;;;;;;;;;1623:3;:24;1620:355;;;1680:13;1694:1;1680:16;;;;;;;;:::i;:::-;;;;;;;;;;1673:23;;;;1620:355;1733:15;1749:1;1733:18;;;;;;;;:::i;:::-;;;;;;;;;;1727:3;:24;1723:252;;;1784:13;1798:1;1784:16;;;;;;;;:::i;:::-;;;;;;;;;;1777:23;;;;1723:252;1837:15;1853:1;1837:18;;;;;;;;:::i;:::-;;;;;;;;;;1831:3;:24;1827:148;;;1888:13;1902:1;1888:16;;;;;;;;:::i;:::-;;;;;;;;;;1881:23;;;;1827:148;1962:1;1955:8;;1546:436;;;;:::o;2227:210::-;1094:13:0;:11;:13::i;:::-;2326:9:11::1;2321:109;2345:13;;:20;;2341:1;:24;2321:109;;;2386:32;2396:13;;2410:1;2396:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2414:3;2386:9;:32::i;:::-;2367:3;;;;;:::i;:::-;;;;2321:109;;;;2227:210:::0;;;:::o;6293:394:12:-;6391:13;6432:16;6440:7;6432;:16::i;:::-;6416:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;6522:21;6546:10;:8;:10::i;:::-;6522:34;;6601:1;6583:7;6577:21;:25;:104;;;;;;;;;;;;;;;;;6638:7;6647:18;:7;:16;:18::i;:::-;6621:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6577:104;6563:118;;;6293:394;;;:::o;420:31:11:-;;;;:::o;13192:43:12:-;;;;:::o;1990:113:11:-;2048:7;2075:20;2089:5;2075:13;:20::i;:::-;2068:27;;1990:113;;;:::o;3120:129::-;1094:13:0;:11;:13::i;:::-;3227:14:11::1;;3211:13;:30;;;;;;;:::i;:::-;;3120:129:::0;;:::o;8107:186:12:-;8229:4;8252:18;:25;8271:5;8252:25;;;;;;;;;;;;;;;:35;8278:8;8252:35;;;;;;;;;;;;;;;;;;;;;;;;;8245:42;;8107:186;;;;:::o;2081:198:0:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;;;2161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;383:28:11:-;;;;:::o;303:43::-;;;;:::o;829:155:9:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;9327:105:12:-;9384:4;9414:12;;9404:7;:22;9397:29;;9327:105;;;:::o;640:96:7:-;693:7;719:10;712:17;;640:96;:::o;13014:172:12:-;13138:2;13111:15;:24;13127:7;13111:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;13172:7;13168:2;13152:28;;13161:5;13152:28;;;;;;;;;;;;13014:172;;;:::o;11379:1529::-;11476:35;11514:20;11526:7;11514:11;:20::i;:::-;11476:58;;11543:22;11585:13;:18;;;11569:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;11638:12;:10;:12::i;:::-;11614:36;;:20;11626:7;11614:11;:20::i;:::-;:36;;;11569:81;:142;;;;11661:50;11678:13;:18;;;11698:12;:10;:12::i;:::-;11661:16;:50::i;:::-;11569:142;11543:169;;11737:17;11721:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;11869:4;11847:26;;:13;:18;;;:26;;;11831:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;11958:1;11944:16;;:2;:16;;;;11936:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12011:43;12033:4;12039:2;12043:7;12052:1;12011:21;:43::i;:::-;12111:49;12128:1;12132:7;12141:13;:18;;;12111:8;:49::i;:::-;12199:1;12169:12;:18;12182:4;12169:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12235:1;12207:12;:16;12220:2;12207:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12266:43;;;;;;;;12281:2;12266:43;;;;;;12292:15;12266:43;;;;;12243:11;:20;12255:7;12243:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12537:19;12569:1;12559:7;:11;;;;:::i;:::-;12537:33;;12622:1;12581:43;;:11;:24;12593:11;12581:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;12577:236;;;12639:20;12647:11;12639:7;:20::i;:::-;12635:171;;;12699:97;;;;;;;;12726:13;:18;;;12699:97;;;;;;12757:13;:28;;;12699:97;;;;;12672:11;:24;12684:11;12672:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12635:171;12577:236;12845:7;12841:2;12826:27;;12835:4;12826:27;;;;;;;;;;;;12860:42;12881:4;12887:2;12891:7;12900:1;12860:20;:42::i;:::-;11469:1439;;;11379:1529;;;:::o;1359:130:0:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;5140:606:12:-;5216:21;;:::i;:::-;5257:16;5265:7;5257;:16::i;:::-;5249:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5329:26;5377:12;5366:7;:23;5362:93;;5446:1;5431:12;5421:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5400:47;;5362:93;5468:12;5483:7;5468:22;;5463:212;5500:18;5492:4;:26;5463:212;;5537:31;5571:11;:17;5583:4;5571:17;;;;;;;;;;;5537:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5627:1;5601:28;;:9;:14;;;:28;;;5597:71;;5649:9;5642:16;;;;;;;5597:71;5528:147;5520:6;;;;;:::i;:::-;;;;5463:212;;;;5683:57;;;;;;;;;;:::i;:::-;;;;;;;;5140:606;;;;:::o;2433:187:0:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;9438:98:12:-;9503:27;9513:2;9517:8;9503:27;;;;;;;;;;;;:9;:27::i;:::-;9438:98;;:::o;950:588:11:-;1003:13;1019:28;1033:13;:11;:13::i;:::-;1019;:28::i;:::-;1003:44;;1082:8;1061:6;:18;1068:10;1061:18;;;;;;;;;;;;;;;;:29;1058:473;;;1126:8;1120:3;:14;1117:33;;;1142:8;1136:14;;1117:33;1204:9;;1192:8;1186:3;:14;;;;:::i;:::-;1185:28;;;;:::i;:::-;1172:9;:41;;1164:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;1280:3;1258:6;:18;1265:10;1258:18;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;1297:26;1307:10;1319:3;1297:9;:26::i;:::-;1058:473;;;1400:9;;1394:3;:15;;;;:::i;:::-;1381:9;:28;;1373:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1476:3;1454:6;:18;1461:10;1454:18;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;1493:26;1503:10;1515:3;1493:9;:26::i;:::-;1058:473;992:546;950:588;:::o;14729:690:12:-;14866:4;14883:15;:2;:13;;;:15::i;:::-;14879:535;;;14938:2;14922:36;;;14959:12;:10;:12::i;:::-;14973:4;14979:7;14988:5;14922:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14909:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15170:1;15153:6;:13;:18;15149:215;;;15186:61;;;;;;;;;;:::i;:::-;;;;;;;;15149:215;15332:6;15326:13;15317:6;15313:2;15309:15;15302:38;14909:464;15054:45;;;15044:55;;;:6;:55;;;;15037:62;;;;;14879:535;15402:4;15395:11;;14729:690;;;;;;;:::o;2111:108:11:-;2171:13;2204:7;2197:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2111:108;:::o;392:703:8:-;448:13;674:1;665:5;:10;661:51;;;691:10;;;;;;;;;;;;;;;;;;;;;661:51;721:12;736:5;721:20;;751:14;775:75;790:1;782:4;:9;775:75;;807:8;;;;;:::i;:::-;;;;837:2;829:10;;;;;:::i;:::-;;;775:75;;;859:19;891:6;881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;859:39;;908:150;924:1;915:5;:10;908:150;;951:1;941:11;;;;;:::i;:::-;;;1017:2;1009:5;:10;;;;:::i;:::-;996:2;:24;;;;:::i;:::-;983:39;;966:6;973;966:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1045:2;1036:11;;;;;:::i;:::-;;;908:150;;;1081:6;1067:21;;;;;392:703;;;;:::o;4894:240:12:-;4955:7;5004:1;4987:19;;:5;:19;;;;4971:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;5095:12;:19;5108:5;5095:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;5087:41;;5080:48;;4894:240;;;:::o;15881:141::-;;;;;:::o;16408:140::-;;;;;:::o;9875:1272::-;9980:20;10003:12;;9980:35;;10044:1;10030:16;;:2;:16;;;;10022:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10221:21;10229:12;10221:7;:21::i;:::-;10220:22;10212:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10303:12;10291:8;:24;;10283:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10363:61;10393:1;10397:2;10401:12;10415:8;10363:21;:61::i;:::-;10433:30;10466:12;:16;10479:2;10466:16;;;;;;;;;;;;;;;10433:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10508:119;;;;;;;;10558:8;10528:11;:19;;;:39;;;;:::i;:::-;10508:119;;;;;;10611:8;10576:11;:24;;;:44;;;;:::i;:::-;10508:119;;;;;10489:12;:16;10502:2;10489:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10662:43;;;;;;;;10677:2;10662:43;;;;;;10688:15;10662:43;;;;;10634:11;:25;10646:12;10634:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10714:20;10737:12;10714:35;;10763:9;10758:281;10782:8;10778:1;:12;10758:281;;;10836:12;10832:2;10811:38;;10828:1;10811:38;;;;;;;;;;;;10876:59;10907:1;10911:2;10915:12;10929:5;10876:22;:59::i;:::-;10858:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;11017:14;;;;;:::i;:::-;;;;10792:3;;;;;:::i;:::-;;;;10758:281;;;;11062:12;11047;:27;;;;11081:60;11110:1;11114:2;11118:12;11132:8;11081:20;:60::i;:::-;9973:1174;;;9875:1272;;;:::o;1175:320:6:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1176:::-;1249:8;1259:6;1309:3;1302:4;1294:6;1290:17;1286:27;1276:122;;1317:79;;:::i;:::-;1276:122;1430:6;1417:20;1407:30;;1460:18;1452:6;1449:30;1446:117;;;1482:79;;:::i;:::-;1446:117;1596:4;1588:6;1584:17;1572:29;;1650:3;1642:4;1634:6;1630:17;1620:8;1616:32;1613:41;1610:128;;;1657:79;;:::i;:::-;1610:128;1176:568;;;;;:::o;1750:133::-;1793:5;1831:6;1818:20;1809:29;;1847:30;1871:5;1847:30;:::i;:::-;1750:133;;;;:::o;1889:137::-;1934:5;1972:6;1959:20;1950:29;;1988:32;2014:5;1988:32;:::i;:::-;1889:137;;;;:::o;2032:141::-;2088:5;2119:6;2113:13;2104:22;;2135:32;2161:5;2135:32;:::i;:::-;2032:141;;;;:::o;2192:338::-;2247:5;2296:3;2289:4;2281:6;2277:17;2273:27;2263:122;;2304:79;;:::i;:::-;2263:122;2421:6;2408:20;2446:78;2520:3;2512:6;2505:4;2497:6;2493:17;2446:78;:::i;:::-;2437:87;;2253:277;2192:338;;;;:::o;2550:553::-;2608:8;2618:6;2668:3;2661:4;2653:6;2649:17;2645:27;2635:122;;2676:79;;:::i;:::-;2635:122;2789:6;2776:20;2766:30;;2819:18;2811:6;2808:30;2805:117;;;2841:79;;:::i;:::-;2805:117;2955:4;2947:6;2943:17;2931:29;;3009:3;3001:4;2993:6;2989:17;2979:8;2975:32;2972:41;2969:128;;;3016:79;;:::i;:::-;2969:128;2550:553;;;;;:::o;3109:139::-;3155:5;3193:6;3180:20;3171:29;;3209:33;3236:5;3209:33;:::i;:::-;3109:139;;;;:::o;3254:329::-;3313:6;3362:2;3350:9;3341:7;3337:23;3333:32;3330:119;;;3368:79;;:::i;:::-;3330:119;3488:1;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3459:117;3254:329;;;;:::o;3589:474::-;3657:6;3665;3714:2;3702:9;3693:7;3689:23;3685:32;3682:119;;;3720:79;;:::i;:::-;3682:119;3840:1;3865:53;3910:7;3901:6;3890:9;3886:22;3865:53;:::i;:::-;3855:63;;3811:117;3967:2;3993:53;4038:7;4029:6;4018:9;4014:22;3993:53;:::i;:::-;3983:63;;3938:118;3589:474;;;;;:::o;4069:619::-;4146:6;4154;4162;4211:2;4199:9;4190:7;4186:23;4182:32;4179:119;;;4217:79;;:::i;:::-;4179:119;4337:1;4362:53;4407:7;4398:6;4387:9;4383:22;4362:53;:::i;:::-;4352:63;;4308:117;4464:2;4490:53;4535:7;4526:6;4515:9;4511:22;4490:53;:::i;:::-;4480:63;;4435:118;4592:2;4618:53;4663:7;4654:6;4643:9;4639:22;4618:53;:::i;:::-;4608:63;;4563:118;4069:619;;;;;:::o;4694:943::-;4789:6;4797;4805;4813;4862:3;4850:9;4841:7;4837:23;4833:33;4830:120;;;4869:79;;:::i;:::-;4830:120;4989:1;5014:53;5059:7;5050:6;5039:9;5035:22;5014:53;:::i;:::-;5004:63;;4960:117;5116:2;5142:53;5187:7;5178:6;5167:9;5163:22;5142:53;:::i;:::-;5132:63;;5087:118;5244:2;5270:53;5315:7;5306:6;5295:9;5291:22;5270:53;:::i;:::-;5260:63;;5215:118;5400:2;5389:9;5385:18;5372:32;5431:18;5423:6;5420:30;5417:117;;;5453:79;;:::i;:::-;5417:117;5558:62;5612:7;5603:6;5592:9;5588:22;5558:62;:::i;:::-;5548:72;;5343:287;4694:943;;;;;;;:::o;5643:468::-;5708:6;5716;5765:2;5753:9;5744:7;5740:23;5736:32;5733:119;;;5771:79;;:::i;:::-;5733:119;5891:1;5916:53;5961:7;5952:6;5941:9;5937:22;5916:53;:::i;:::-;5906:63;;5862:117;6018:2;6044:50;6086:7;6077:6;6066:9;6062:22;6044:50;:::i;:::-;6034:60;;5989:115;5643:468;;;;;:::o;6117:474::-;6185:6;6193;6242:2;6230:9;6221:7;6217:23;6213:32;6210:119;;;6248:79;;:::i;:::-;6210:119;6368:1;6393:53;6438:7;6429:6;6418:9;6414:22;6393:53;:::i;:::-;6383:63;;6339:117;6495:2;6521:53;6566:7;6557:6;6546:9;6542:22;6521:53;:::i;:::-;6511:63;;6466:118;6117:474;;;;;:::o;6597:704::-;6692:6;6700;6708;6757:2;6745:9;6736:7;6732:23;6728:32;6725:119;;;6763:79;;:::i;:::-;6725:119;6911:1;6900:9;6896:17;6883:31;6941:18;6933:6;6930:30;6927:117;;;6963:79;;:::i;:::-;6927:117;7076:80;7148:7;7139:6;7128:9;7124:22;7076:80;:::i;:::-;7058:98;;;;6854:312;7205:2;7231:53;7276:7;7267:6;7256:9;7252:22;7231:53;:::i;:::-;7221:63;;7176:118;6597:704;;;;;:::o;7307:559::-;7393:6;7401;7450:2;7438:9;7429:7;7425:23;7421:32;7418:119;;;7456:79;;:::i;:::-;7418:119;7604:1;7593:9;7589:17;7576:31;7634:18;7626:6;7623:30;7620:117;;;7656:79;;:::i;:::-;7620:117;7769:80;7841:7;7832:6;7821:9;7817:22;7769:80;:::i;:::-;7751:98;;;;7547:312;7307:559;;;;;:::o;7872:327::-;7930:6;7979:2;7967:9;7958:7;7954:23;7950:32;7947:119;;;7985:79;;:::i;:::-;7947:119;8105:1;8130:52;8174:7;8165:6;8154:9;8150:22;8130:52;:::i;:::-;8120:62;;8076:116;7872:327;;;;:::o;8205:349::-;8274:6;8323:2;8311:9;8302:7;8298:23;8294:32;8291:119;;;8329:79;;:::i;:::-;8291:119;8449:1;8474:63;8529:7;8520:6;8509:9;8505:22;8474:63;:::i;:::-;8464:73;;8420:127;8205:349;;;;:::o;8560:529::-;8631:6;8639;8688:2;8676:9;8667:7;8663:23;8659:32;8656:119;;;8694:79;;:::i;:::-;8656:119;8842:1;8831:9;8827:17;8814:31;8872:18;8864:6;8861:30;8858:117;;;8894:79;;:::i;:::-;8858:117;9007:65;9064:7;9055:6;9044:9;9040:22;9007:65;:::i;:::-;8989:83;;;;8785:297;8560:529;;;;;:::o;9095:329::-;9154:6;9203:2;9191:9;9182:7;9178:23;9174:32;9171:119;;;9209:79;;:::i;:::-;9171:119;9329:1;9354:53;9399:7;9390:6;9379:9;9375:22;9354:53;:::i;:::-;9344:63;;9300:117;9095:329;;;;:::o;9430:118::-;9517:24;9535:5;9517:24;:::i;:::-;9512:3;9505:37;9430:118;;:::o;9554:109::-;9635:21;9650:5;9635:21;:::i;:::-;9630:3;9623:34;9554:109;;:::o;9669:360::-;9755:3;9783:38;9815:5;9783:38;:::i;:::-;9837:70;9900:6;9895:3;9837:70;:::i;:::-;9830:77;;9916:52;9961:6;9956:3;9949:4;9942:5;9938:16;9916:52;:::i;:::-;9993:29;10015:6;9993:29;:::i;:::-;9988:3;9984:39;9977:46;;9759:270;9669:360;;;;:::o;10035:364::-;10123:3;10151:39;10184:5;10151:39;:::i;:::-;10206:71;10270:6;10265:3;10206:71;:::i;:::-;10199:78;;10286:52;10331:6;10326:3;10319:4;10312:5;10308:16;10286:52;:::i;:::-;10363:29;10385:6;10363:29;:::i;:::-;10358:3;10354:39;10347:46;;10127:272;10035:364;;;;:::o;10405:377::-;10511:3;10539:39;10572:5;10539:39;:::i;:::-;10594:89;10676:6;10671:3;10594:89;:::i;:::-;10587:96;;10692:52;10737:6;10732:3;10725:4;10718:5;10714:16;10692:52;:::i;:::-;10769:6;10764:3;10760:16;10753:23;;10515:267;10405:377;;;;:::o;10788:366::-;10930:3;10951:67;11015:2;11010:3;10951:67;:::i;:::-;10944:74;;11027:93;11116:3;11027:93;:::i;:::-;11145:2;11140:3;11136:12;11129:19;;10788:366;;;:::o;11160:::-;11302:3;11323:67;11387:2;11382:3;11323:67;:::i;:::-;11316:74;;11399:93;11488:3;11399:93;:::i;:::-;11517:2;11512:3;11508:12;11501:19;;11160:366;;;:::o;11532:::-;11674:3;11695:67;11759:2;11754:3;11695:67;:::i;:::-;11688:74;;11771:93;11860:3;11771:93;:::i;:::-;11889:2;11884:3;11880:12;11873:19;;11532:366;;;:::o;11904:::-;12046:3;12067:67;12131:2;12126:3;12067:67;:::i;:::-;12060:74;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11904:366;;;:::o;12276:::-;12418:3;12439:67;12503:2;12498:3;12439:67;:::i;:::-;12432:74;;12515:93;12604:3;12515:93;:::i;:::-;12633:2;12628:3;12624:12;12617:19;;12276:366;;;:::o;12648:::-;12790:3;12811:67;12875:2;12870:3;12811:67;:::i;:::-;12804:74;;12887:93;12976:3;12887:93;:::i;:::-;13005:2;13000:3;12996:12;12989:19;;12648:366;;;:::o;13020:::-;13162:3;13183:67;13247:2;13242:3;13183:67;:::i;:::-;13176:74;;13259:93;13348:3;13259:93;:::i;:::-;13377:2;13372:3;13368:12;13361:19;;13020:366;;;:::o;13392:::-;13534:3;13555:67;13619:2;13614:3;13555:67;:::i;:::-;13548:74;;13631:93;13720:3;13631:93;:::i;:::-;13749:2;13744:3;13740:12;13733:19;;13392:366;;;:::o;13764:::-;13906:3;13927:67;13991:2;13986:3;13927:67;:::i;:::-;13920:74;;14003:93;14092:3;14003:93;:::i;:::-;14121:2;14116:3;14112:12;14105:19;;13764:366;;;:::o;14136:::-;14278:3;14299:67;14363:2;14358:3;14299:67;:::i;:::-;14292:74;;14375:93;14464:3;14375:93;:::i;:::-;14493:2;14488:3;14484:12;14477:19;;14136:366;;;:::o;14508:::-;14650:3;14671:67;14735:2;14730:3;14671:67;:::i;:::-;14664:74;;14747:93;14836:3;14747:93;:::i;:::-;14865:2;14860:3;14856:12;14849:19;;14508:366;;;:::o;14880:::-;15022:3;15043:67;15107:2;15102:3;15043:67;:::i;:::-;15036:74;;15119:93;15208:3;15119:93;:::i;:::-;15237:2;15232:3;15228:12;15221:19;;14880:366;;;:::o;15252:::-;15394:3;15415:67;15479:2;15474:3;15415:67;:::i;:::-;15408:74;;15491:93;15580:3;15491:93;:::i;:::-;15609:2;15604:3;15600:12;15593:19;;15252:366;;;:::o;15624:::-;15766:3;15787:67;15851:2;15846:3;15787:67;:::i;:::-;15780:74;;15863:93;15952:3;15863:93;:::i;:::-;15981:2;15976:3;15972:12;15965:19;;15624:366;;;:::o;15996:::-;16138:3;16159:67;16223:2;16218:3;16159:67;:::i;:::-;16152:74;;16235:93;16324:3;16235:93;:::i;:::-;16353:2;16348:3;16344:12;16337:19;;15996:366;;;:::o;16368:::-;16510:3;16531:67;16595:2;16590:3;16531:67;:::i;:::-;16524:74;;16607:93;16696:3;16607:93;:::i;:::-;16725:2;16720:3;16716:12;16709:19;;16368:366;;;:::o;16740:::-;16882:3;16903:67;16967:2;16962:3;16903:67;:::i;:::-;16896:74;;16979:93;17068:3;16979:93;:::i;:::-;17097:2;17092:3;17088:12;17081:19;;16740:366;;;:::o;17112:::-;17254:3;17275:67;17339:2;17334:3;17275:67;:::i;:::-;17268:74;;17351:93;17440:3;17351:93;:::i;:::-;17469:2;17464:3;17460:12;17453:19;;17112:366;;;:::o;17484:::-;17626:3;17647:67;17711:2;17706:3;17647:67;:::i;:::-;17640:74;;17723:93;17812:3;17723:93;:::i;:::-;17841:2;17836:3;17832:12;17825:19;;17484:366;;;:::o;17856:::-;17998:3;18019:67;18083:2;18078:3;18019:67;:::i;:::-;18012:74;;18095:93;18184:3;18095:93;:::i;:::-;18213:2;18208:3;18204:12;18197:19;;17856:366;;;:::o;18228:::-;18370:3;18391:67;18455:2;18450:3;18391:67;:::i;:::-;18384:74;;18467:93;18556:3;18467:93;:::i;:::-;18585:2;18580:3;18576:12;18569:19;;18228:366;;;:::o;18600:::-;18742:3;18763:67;18827:2;18822:3;18763:67;:::i;:::-;18756:74;;18839:93;18928:3;18839:93;:::i;:::-;18957:2;18952:3;18948:12;18941:19;;18600:366;;;:::o;18972:::-;19114:3;19135:67;19199:2;19194:3;19135:67;:::i;:::-;19128:74;;19211:93;19300:3;19211:93;:::i;:::-;19329:2;19324:3;19320:12;19313:19;;18972:366;;;:::o;19344:::-;19486:3;19507:67;19571:2;19566:3;19507:67;:::i;:::-;19500:74;;19583:93;19672:3;19583:93;:::i;:::-;19701:2;19696:3;19692:12;19685:19;;19344:366;;;:::o;19716:::-;19858:3;19879:67;19943:2;19938:3;19879:67;:::i;:::-;19872:74;;19955:93;20044:3;19955:93;:::i;:::-;20073:2;20068:3;20064:12;20057:19;;19716:366;;;:::o;20088:118::-;20175:24;20193:5;20175:24;:::i;:::-;20170:3;20163:37;20088:118;;:::o;20212:435::-;20392:3;20414:95;20505:3;20496:6;20414:95;:::i;:::-;20407:102;;20526:95;20617:3;20608:6;20526:95;:::i;:::-;20519:102;;20638:3;20631:10;;20212:435;;;;;:::o;20653:222::-;20746:4;20784:2;20773:9;20769:18;20761:26;;20797:71;20865:1;20854:9;20850:17;20841:6;20797:71;:::i;:::-;20653:222;;;;:::o;20881:640::-;21076:4;21114:3;21103:9;21099:19;21091:27;;21128:71;21196:1;21185:9;21181:17;21172:6;21128:71;:::i;:::-;21209:72;21277:2;21266:9;21262:18;21253:6;21209:72;:::i;:::-;21291;21359:2;21348:9;21344:18;21335:6;21291:72;:::i;:::-;21410:9;21404:4;21400:20;21395:2;21384:9;21380:18;21373:48;21438:76;21509:4;21500:6;21438:76;:::i;:::-;21430:84;;20881:640;;;;;;;:::o;21527:210::-;21614:4;21652:2;21641:9;21637:18;21629:26;;21665:65;21727:1;21716:9;21712:17;21703:6;21665:65;:::i;:::-;21527:210;;;;:::o;21743:313::-;21856:4;21894:2;21883:9;21879:18;21871:26;;21943:9;21937:4;21933:20;21929:1;21918:9;21914:17;21907:47;21971:78;22044:4;22035:6;21971:78;:::i;:::-;21963:86;;21743:313;;;;:::o;22062:419::-;22228:4;22266:2;22255:9;22251:18;22243:26;;22315:9;22309:4;22305:20;22301:1;22290:9;22286:17;22279:47;22343:131;22469:4;22343:131;:::i;:::-;22335:139;;22062:419;;;:::o;22487:::-;22653:4;22691:2;22680:9;22676:18;22668:26;;22740:9;22734:4;22730:20;22726:1;22715:9;22711:17;22704:47;22768:131;22894:4;22768:131;:::i;:::-;22760:139;;22487:419;;;:::o;22912:::-;23078:4;23116:2;23105:9;23101:18;23093:26;;23165:9;23159:4;23155:20;23151:1;23140:9;23136:17;23129:47;23193:131;23319:4;23193:131;:::i;:::-;23185:139;;22912:419;;;:::o;23337:::-;23503:4;23541:2;23530:9;23526:18;23518:26;;23590:9;23584:4;23580:20;23576:1;23565:9;23561:17;23554:47;23618:131;23744:4;23618:131;:::i;:::-;23610:139;;23337:419;;;:::o;23762:::-;23928:4;23966:2;23955:9;23951:18;23943:26;;24015:9;24009:4;24005:20;24001:1;23990:9;23986:17;23979:47;24043:131;24169:4;24043:131;:::i;:::-;24035:139;;23762:419;;;:::o;24187:::-;24353:4;24391:2;24380:9;24376:18;24368:26;;24440:9;24434:4;24430:20;24426:1;24415:9;24411:17;24404:47;24468:131;24594:4;24468:131;:::i;:::-;24460:139;;24187:419;;;:::o;24612:::-;24778:4;24816:2;24805:9;24801:18;24793:26;;24865:9;24859:4;24855:20;24851:1;24840:9;24836:17;24829:47;24893:131;25019:4;24893:131;:::i;:::-;24885:139;;24612:419;;;:::o;25037:::-;25203:4;25241:2;25230:9;25226:18;25218:26;;25290:9;25284:4;25280:20;25276:1;25265:9;25261:17;25254:47;25318:131;25444:4;25318:131;:::i;:::-;25310:139;;25037:419;;;:::o;25462:::-;25628:4;25666:2;25655:9;25651:18;25643:26;;25715:9;25709:4;25705:20;25701:1;25690:9;25686:17;25679:47;25743:131;25869:4;25743:131;:::i;:::-;25735:139;;25462:419;;;:::o;25887:::-;26053:4;26091:2;26080:9;26076:18;26068:26;;26140:9;26134:4;26130:20;26126:1;26115:9;26111:17;26104:47;26168:131;26294:4;26168:131;:::i;:::-;26160:139;;25887:419;;;:::o;26312:::-;26478:4;26516:2;26505:9;26501:18;26493:26;;26565:9;26559:4;26555:20;26551:1;26540:9;26536:17;26529:47;26593:131;26719:4;26593:131;:::i;:::-;26585:139;;26312:419;;;:::o;26737:::-;26903:4;26941:2;26930:9;26926:18;26918:26;;26990:9;26984:4;26980:20;26976:1;26965:9;26961:17;26954:47;27018:131;27144:4;27018:131;:::i;:::-;27010:139;;26737:419;;;:::o;27162:::-;27328:4;27366:2;27355:9;27351:18;27343:26;;27415:9;27409:4;27405:20;27401:1;27390:9;27386:17;27379:47;27443:131;27569:4;27443:131;:::i;:::-;27435:139;;27162:419;;;:::o;27587:::-;27753:4;27791:2;27780:9;27776:18;27768:26;;27840:9;27834:4;27830:20;27826:1;27815:9;27811:17;27804:47;27868:131;27994:4;27868:131;:::i;:::-;27860:139;;27587:419;;;:::o;28012:::-;28178:4;28216:2;28205:9;28201:18;28193:26;;28265:9;28259:4;28255:20;28251:1;28240:9;28236:17;28229:47;28293:131;28419:4;28293:131;:::i;:::-;28285:139;;28012:419;;;:::o;28437:::-;28603:4;28641:2;28630:9;28626:18;28618:26;;28690:9;28684:4;28680:20;28676:1;28665:9;28661:17;28654:47;28718:131;28844:4;28718:131;:::i;:::-;28710:139;;28437:419;;;:::o;28862:::-;29028:4;29066:2;29055:9;29051:18;29043:26;;29115:9;29109:4;29105:20;29101:1;29090:9;29086:17;29079:47;29143:131;29269:4;29143:131;:::i;:::-;29135:139;;28862:419;;;:::o;29287:::-;29453:4;29491:2;29480:9;29476:18;29468:26;;29540:9;29534:4;29530:20;29526:1;29515:9;29511:17;29504:47;29568:131;29694:4;29568:131;:::i;:::-;29560:139;;29287:419;;;:::o;29712:::-;29878:4;29916:2;29905:9;29901:18;29893:26;;29965:9;29959:4;29955:20;29951:1;29940:9;29936:17;29929:47;29993:131;30119:4;29993:131;:::i;:::-;29985:139;;29712:419;;;:::o;30137:::-;30303:4;30341:2;30330:9;30326:18;30318:26;;30390:9;30384:4;30380:20;30376:1;30365:9;30361:17;30354:47;30418:131;30544:4;30418:131;:::i;:::-;30410:139;;30137:419;;;:::o;30562:::-;30728:4;30766:2;30755:9;30751:18;30743:26;;30815:9;30809:4;30805:20;30801:1;30790:9;30786:17;30779:47;30843:131;30969:4;30843:131;:::i;:::-;30835:139;;30562:419;;;:::o;30987:::-;31153:4;31191:2;31180:9;31176:18;31168:26;;31240:9;31234:4;31230:20;31226:1;31215:9;31211:17;31204:47;31268:131;31394:4;31268:131;:::i;:::-;31260:139;;30987:419;;;:::o;31412:::-;31578:4;31616:2;31605:9;31601:18;31593:26;;31665:9;31659:4;31655:20;31651:1;31640:9;31636:17;31629:47;31693:131;31819:4;31693:131;:::i;:::-;31685:139;;31412:419;;;:::o;31837:::-;32003:4;32041:2;32030:9;32026:18;32018:26;;32090:9;32084:4;32080:20;32076:1;32065:9;32061:17;32054:47;32118:131;32244:4;32118:131;:::i;:::-;32110:139;;31837:419;;;:::o;32262:::-;32428:4;32466:2;32455:9;32451:18;32443:26;;32515:9;32509:4;32505:20;32501:1;32490:9;32486:17;32479:47;32543:131;32669:4;32543:131;:::i;:::-;32535:139;;32262:419;;;:::o;32687:222::-;32780:4;32818:2;32807:9;32803:18;32795:26;;32831:71;32899:1;32888:9;32884:17;32875:6;32831:71;:::i;:::-;32687:222;;;;:::o;32915:129::-;32949:6;32976:20;;:::i;:::-;32966:30;;33005:33;33033:4;33025:6;33005:33;:::i;:::-;32915:129;;;:::o;33050:75::-;33083:6;33116:2;33110:9;33100:19;;33050:75;:::o;33131:307::-;33192:4;33282:18;33274:6;33271:30;33268:56;;;33304:18;;:::i;:::-;33268:56;33342:29;33364:6;33342:29;:::i;:::-;33334:37;;33426:4;33420;33416:15;33408:23;;33131:307;;;:::o;33444:98::-;33495:6;33529:5;33523:12;33513:22;;33444:98;;;:::o;33548:99::-;33600:6;33634:5;33628:12;33618:22;;33548:99;;;:::o;33653:168::-;33736:11;33770:6;33765:3;33758:19;33810:4;33805:3;33801:14;33786:29;;33653:168;;;;:::o;33827:169::-;33911:11;33945:6;33940:3;33933:19;33985:4;33980:3;33976:14;33961:29;;33827:169;;;;:::o;34002:148::-;34104:11;34141:3;34126:18;;34002:148;;;;:::o;34156:273::-;34196:3;34215:20;34233:1;34215:20;:::i;:::-;34210:25;;34249:20;34267:1;34249:20;:::i;:::-;34244:25;;34371:1;34335:34;34331:42;34328:1;34325:49;34322:75;;;34377:18;;:::i;:::-;34322:75;34421:1;34418;34414:9;34407:16;;34156:273;;;;:::o;34435:305::-;34475:3;34494:20;34512:1;34494:20;:::i;:::-;34489:25;;34528:20;34546:1;34528:20;:::i;:::-;34523:25;;34682:1;34614:66;34610:74;34607:1;34604:81;34601:107;;;34688:18;;:::i;:::-;34601:107;34732:1;34729;34725:9;34718:16;;34435:305;;;;:::o;34746:185::-;34786:1;34803:20;34821:1;34803:20;:::i;:::-;34798:25;;34837:20;34855:1;34837:20;:::i;:::-;34832:25;;34876:1;34866:35;;34881:18;;:::i;:::-;34866:35;34923:1;34920;34916:9;34911:14;;34746:185;;;;:::o;34937:348::-;34977:7;35000:20;35018:1;35000:20;:::i;:::-;34995:25;;35034:20;35052:1;35034:20;:::i;:::-;35029:25;;35222:1;35154:66;35150:74;35147:1;35144:81;35139:1;35132:9;35125:17;35121:105;35118:131;;;35229:18;;:::i;:::-;35118:131;35277:1;35274;35270:9;35259:20;;34937:348;;;;:::o;35291:191::-;35331:4;35351:20;35369:1;35351:20;:::i;:::-;35346:25;;35385:20;35403:1;35385:20;:::i;:::-;35380:25;;35424:1;35421;35418:8;35415:34;;;35429:18;;:::i;:::-;35415:34;35474:1;35471;35467:9;35459:17;;35291:191;;;;:::o;35488:::-;35528:4;35548:20;35566:1;35548:20;:::i;:::-;35543:25;;35582:20;35600:1;35582:20;:::i;:::-;35577:25;;35621:1;35618;35615:8;35612:34;;;35626:18;;:::i;:::-;35612:34;35671:1;35668;35664:9;35656:17;;35488:191;;;;:::o;35685:96::-;35722:7;35751:24;35769:5;35751:24;:::i;:::-;35740:35;;35685:96;;;:::o;35787:90::-;35821:7;35864:5;35857:13;35850:21;35839:32;;35787:90;;;:::o;35883:149::-;35919:7;35959:66;35952:5;35948:78;35937:89;;35883:149;;;:::o;36038:118::-;36075:7;36115:34;36108:5;36104:46;36093:57;;36038:118;;;:::o;36162:126::-;36199:7;36239:42;36232:5;36228:54;36217:65;;36162:126;;;:::o;36294:77::-;36331:7;36360:5;36349:16;;36294:77;;;:::o;36377:154::-;36461:6;36456:3;36451;36438:30;36523:1;36514:6;36509:3;36505:16;36498:27;36377:154;;;:::o;36537:307::-;36605:1;36615:113;36629:6;36626:1;36623:13;36615:113;;;36714:1;36709:3;36705:11;36699:18;36695:1;36690:3;36686:11;36679:39;36651:2;36648:1;36644:10;36639:15;;36615:113;;;36746:6;36743:1;36740:13;36737:101;;;36826:1;36817:6;36812:3;36808:16;36801:27;36737:101;36586:258;36537:307;;;:::o;36850:171::-;36889:3;36912:24;36930:5;36912:24;:::i;:::-;36903:33;;36958:4;36951:5;36948:15;36945:41;;;36966:18;;:::i;:::-;36945:41;37013:1;37006:5;37002:13;36995:20;;36850:171;;;:::o;37027:320::-;37071:6;37108:1;37102:4;37098:12;37088:22;;37155:1;37149:4;37145:12;37176:18;37166:81;;37232:4;37224:6;37220:17;37210:27;;37166:81;37294:2;37286:6;37283:14;37263:18;37260:38;37257:84;;;37313:18;;:::i;:::-;37257:84;37078:269;37027:320;;;:::o;37353:281::-;37436:27;37458:4;37436:27;:::i;:::-;37428:6;37424:40;37566:6;37554:10;37551:22;37530:18;37518:10;37515:34;37512:62;37509:88;;;37577:18;;:::i;:::-;37509:88;37617:10;37613:2;37606:22;37396:238;37353:281;;:::o;37640:233::-;37679:3;37702:24;37720:5;37702:24;:::i;:::-;37693:33;;37748:66;37741:5;37738:77;37735:103;;;37818:18;;:::i;:::-;37735:103;37865:1;37858:5;37854:13;37847:20;;37640:233;;;:::o;37879:176::-;37911:1;37928:20;37946:1;37928:20;:::i;:::-;37923:25;;37962:20;37980:1;37962:20;:::i;:::-;37957:25;;38001:1;37991:35;;38006:18;;:::i;:::-;37991:35;38047:1;38044;38040:9;38035:14;;37879:176;;;;:::o;38061:180::-;38109:77;38106:1;38099:88;38206:4;38203:1;38196:15;38230:4;38227:1;38220:15;38247:180;38295:77;38292:1;38285:88;38392:4;38389:1;38382:15;38416:4;38413:1;38406:15;38433:180;38481:77;38478:1;38471:88;38578:4;38575:1;38568:15;38602:4;38599:1;38592:15;38619:180;38667:77;38664:1;38657:88;38764:4;38761:1;38754:15;38788:4;38785:1;38778:15;38805:180;38853:77;38850:1;38843:88;38950:4;38947:1;38940:15;38974:4;38971:1;38964:15;38991:117;39100:1;39097;39090:12;39114:117;39223:1;39220;39213:12;39237:117;39346:1;39343;39336:12;39360:117;39469:1;39466;39459:12;39483:117;39592:1;39589;39582:12;39606:117;39715:1;39712;39705:12;39729:102;39770:6;39821:2;39817:7;39812:2;39805:5;39801:14;39797:28;39787:38;;39729:102;;;:::o;39837:221::-;39977:34;39973:1;39965:6;39961:14;39954:58;40046:4;40041:2;40033:6;40029:15;40022:29;39837:221;:::o;40064:171::-;40204:23;40200:1;40192:6;40188:14;40181:47;40064:171;:::o;40241:225::-;40381:34;40377:1;40369:6;40365:14;40358:58;40450:8;40445:2;40437:6;40433:15;40426:33;40241:225;:::o;40472:229::-;40612:34;40608:1;40600:6;40596:14;40589:58;40681:12;40676:2;40668:6;40664:15;40657:37;40472:229;:::o;40707:222::-;40847:34;40843:1;40835:6;40831:14;40824:58;40916:5;40911:2;40903:6;40899:15;40892:30;40707:222;:::o;40935:224::-;41075:34;41071:1;41063:6;41059:14;41052:58;41144:7;41139:2;41131:6;41127:15;41120:32;40935:224;:::o;41165:236::-;41305:34;41301:1;41293:6;41289:14;41282:58;41374:19;41369:2;41361:6;41357:15;41350:44;41165:236;:::o;41407:244::-;41547:34;41543:1;41535:6;41531:14;41524:58;41616:27;41611:2;41603:6;41599:15;41592:52;41407:244;:::o;41657:230::-;41797:34;41793:1;41785:6;41781:14;41774:58;41866:13;41861:2;41853:6;41849:15;41842:38;41657:230;:::o;41893:225::-;42033:34;42029:1;42021:6;42017:14;42010:58;42102:8;42097:2;42089:6;42085:15;42078:33;41893:225;:::o;42124:165::-;42264:17;42260:1;42252:6;42248:14;42241:41;42124:165;:::o;42295:168::-;42435:20;42431:1;42423:6;42419:14;42412:44;42295:168;:::o;42469:182::-;42609:34;42605:1;42597:6;42593:14;42586:58;42469:182;:::o;42657:234::-;42797:34;42793:1;42785:6;42781:14;42774:58;42866:17;42861:2;42853:6;42849:15;42842:42;42657:234;:::o;42897:176::-;43037:28;43033:1;43025:6;43021:14;43014:52;42897:176;:::o;43079:237::-;43219:34;43215:1;43207:6;43203:14;43196:58;43288:20;43283:2;43275:6;43271:15;43264:45;43079:237;:::o;43322:221::-;43462:34;43458:1;43450:6;43446:14;43439:58;43531:4;43526:2;43518:6;43514:15;43507:29;43322:221;:::o;43549:238::-;43689:34;43685:1;43677:6;43673:14;43666:58;43758:21;43753:2;43745:6;43741:15;43734:46;43549:238;:::o;43793:179::-;43933:31;43929:1;43921:6;43917:14;43910:55;43793:179;:::o;43978:220::-;44118:34;44114:1;44106:6;44102:14;44095:58;44187:3;44182:2;44174:6;44170:15;44163:28;43978:220;:::o;44204:233::-;44344:34;44340:1;44332:6;44328:14;44321:58;44413:16;44408:2;44400:6;44396:15;44389:41;44204:233;:::o;44443:176::-;44583:28;44579:1;44571:6;44567:14;44560:52;44443:176;:::o;44625:234::-;44765:34;44761:1;44753:6;44749:14;44742:58;44834:17;44829:2;44821:6;44817:15;44810:42;44625:234;:::o;44865:232::-;45005:34;45001:1;44993:6;44989:14;44982:58;45074:15;45069:2;45061:6;45057:15;45050:40;44865:232;:::o;45103:221::-;45243:34;45239:1;45231:6;45227:14;45220:58;45312:4;45307:2;45299:6;45295:15;45288:29;45103:221;:::o;45330:122::-;45403:24;45421:5;45403:24;:::i;:::-;45396:5;45393:35;45383:63;;45442:1;45439;45432:12;45383:63;45330:122;:::o;45458:116::-;45528:21;45543:5;45528:21;:::i;:::-;45521:5;45518:32;45508:60;;45564:1;45561;45554:12;45508:60;45458:116;:::o;45580:120::-;45652:23;45669:5;45652:23;:::i;:::-;45645:5;45642:34;45632:62;;45690:1;45687;45680:12;45632:62;45580:120;:::o;45706:122::-;45779:24;45797:5;45779:24;:::i;:::-;45772:5;45769:35;45759:63;;45818:1;45815;45808:12;45759:63;45706:122;:::o
Swarm Source
ipfs://38e99dd0434f1c3200cf0685fe4302dd91a06a8465056742c80f0fe84a96bb56
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.