Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
Latest 25 from a total of 1,172 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Buy Lands | 14513164 | 998 days ago | IN | 0.339841 ETH | 0.00160944 | ||||
Withdraw | 14448093 | 1008 days ago | IN | 0 ETH | 0.00110696 | ||||
Set Receiver | 14447255 | 1008 days ago | IN | 0 ETH | 0.00085084 | ||||
Buy Lands | 14446219 | 1008 days ago | IN | 0.11894435 ETH | 0.00093289 | ||||
Buy Lands | 14445672 | 1008 days ago | IN | 0.15292845 ETH | 0.0014316 | ||||
Buy Lands | 14445575 | 1008 days ago | IN | 0.11894435 ETH | 0.0092694 | ||||
Buy Lands | 14445551 | 1008 days ago | IN | 0.45878535 ETH | 0.02152732 | ||||
Buy Lands | 14445525 | 1008 days ago | IN | 0.15292845 ETH | 0.01076747 | ||||
Buy Lands By LOK... | 14445510 | 1008 days ago | IN | 0 ETH | 0.00258759 | ||||
Buy Lands By LOK... | 14445510 | 1008 days ago | IN | 0 ETH | 0.01068331 | ||||
Buy Lands | 14445425 | 1008 days ago | IN | 0.35683305 ETH | 0.01938991 | ||||
Buy Lands | 14445284 | 1008 days ago | IN | 0.11894435 ETH | 0.00152394 | ||||
Buy Lands By LOK... | 14445273 | 1008 days ago | IN | 0 ETH | 0.01794898 | ||||
Buy Lands | 14445267 | 1008 days ago | IN | 0.11894435 ETH | 0.00946719 | ||||
Buy Lands | 14445253 | 1008 days ago | IN | 0.11894435 ETH | 0.01334789 | ||||
Buy Lands By LOK... | 14445245 | 1008 days ago | IN | 0 ETH | 0.04489817 | ||||
Buy Lands | 14445226 | 1008 days ago | IN | 0.15292845 ETH | 0.01585573 | ||||
Buy Lands | 14445064 | 1008 days ago | IN | 0.15292845 ETH | 0.00954199 | ||||
Buy Lands | 14444962 | 1008 days ago | IN | 0.15292845 ETH | 0.00900279 | ||||
Buy Lands | 14444822 | 1008 days ago | IN | 0.15292845 ETH | 0.00619278 | ||||
Buy Lands | 14444789 | 1008 days ago | IN | 0.15292845 ETH | 0.00765316 | ||||
Buy Lands By LOK... | 14444769 | 1008 days ago | IN | 0 ETH | 0.00898352 | ||||
Buy Lands By LOK... | 14444733 | 1008 days ago | IN | 0 ETH | 0.00733752 | ||||
Buy Lands | 14444731 | 1008 days ago | IN | 0.11894435 ETH | 0.00126456 | ||||
Buy Lands | 14444721 | 1008 days ago | IN | 0.11894435 ETH | 0.0077779 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14448093 | 1008 days ago | 192.46464236 ETH |
Loading...
Loading
Contract Name:
LOKLandSaleSecond
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-24 */ // SPDX-License-Identifier: MIT pragma solidity ^0.5.12; /* * @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 GSN 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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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. * * 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. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _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 onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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 onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC721 compliant contract. */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of NFTs in `owner`'s account. */ function balanceOf(address owner) public view returns (uint256 balance); /** * @dev Returns the owner of the NFT specified by `tokenId`. */ function ownerOf(uint256 tokenId) public view returns (address owner); /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * * * Requirements: * - `from`, `to` cannot be zero. * - `tokenId` must be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this * NFT by either {approve} or {setApprovalForAll}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public; /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * Requirements: * - If the caller is not `from`, it must be approved to move this NFT by * either {approve} or {setApprovalForAll}. */ function transferFrom(address from, address to, uint256 tokenId) public; function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a {IERC721-safeTransferFrom}. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @param operator The address which called `safeTransferFrom` function * @param from The address which previously owned the token * @param tokenId The NFT identifier which is being transferred * @param data Additional data with no specified format * @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing 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. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * NOTE: This is a feature of the next version of OpenZeppelin Contracts. * @dev Get it via `npm install @openzeppelin/contracts@next`. */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath} * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never * directly accessed. */ library Counters { using SafeMath for uint256; struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { // The {SafeMath} overflow check can be skipped here, see the comment at the top counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721 is Context, ERC165, IERC721 { using SafeMath for uint256; using Address for address; using Counters for Counters.Counter; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from token ID to owner mapping (uint256 => address) private _tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to number of owned token mapping (address => Counters.Counter) private _ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /* * bytes4(keccak256('balanceOf(address)')) == 0x70a08231 * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3 * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde * * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^ * 0xa22cb465 ^ 0xe985e9c ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd */ bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; constructor () public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); } /** * @dev Gets the balance of the specified address. * @param owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address owner) public view returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _ownedTokensCount[owner].current(); } /** * @dev Gets the owner of the specified token ID. * @param tokenId uint256 ID of the token to query the owner of * @return address currently marked as the owner of the given token ID */ function ownerOf(uint256 tokenId) public view returns (address) { address owner = _tokenOwner[tokenId]; // require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev Approves another address to transfer the given token ID * The zero address indicates there is no approved address. * There can only be one approved address per token at a given time. * Can only be called by the token owner or an approved operator. * @param to address to be approved for the given token ID * @param tokenId uint256 ID of the token to be approved */ function approve(address to, uint256 tokenId) public { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev Sets or unsets the approval of a given operator * An operator is allowed to transfer all tokens of the sender on their behalf. * @param to operator address to set the approval * @param approved representing the status of the approval to be set */ function setApprovalForAll(address to, bool approved) public { require(to != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][to] = approved; emit ApprovalForAll(_msgSender(), to, approved); } /** * @dev Tells whether an operator is approved by a given owner. * @param owner owner address which you want to query the approval of * @param operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll(address owner, address operator) public view returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Transfers the ownership of a given token ID to another address. * Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * Requires the msg.sender to be the owner, approved, or operator. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function transferFrom(address from, address to, uint256 tokenId) public { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transferFrom(from, to, tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the _msgSender() to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransferFrom(from, to, tokenId, _data); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function _safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) internal { _transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether the specified token exists. * @param tokenId uint256 ID of the token to query the existence of * @return bool whether the token exists */ function _exists(uint256 tokenId) internal view returns (bool) { address owner = _tokenOwner[tokenId]; return owner != address(0); } /** * @dev Returns whether the given spender can transfer a given token ID. * @param spender address of the spender to query * @param tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Internal function to safely mint a new token. * Reverts if the given token ID already exists. * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _safeMint(address to, uint256 tokenId) internal { _safeMint(to, tokenId, ""); } /** * @dev Internal function to safely mint a new token. * Reverts if the given token ID already exists. * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted * @param _data bytes data to send along with a safe transfer check */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Internal function to mint a new token. * Reverts if the given token ID already exists. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _tokenOwner[tokenId] = to; _ownedTokensCount[to].increment(); emit Transfer(address(0), to, tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use {_burn} instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { require(ownerOf(tokenId) == owner, "ERC721: burn of token that is not own"); _clearApproval(tokenId); _ownedTokensCount[owner].decrement(); _tokenOwner[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * @param tokenId uint256 ID of the token being burned */ function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), tokenId); } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _clearApproval(tokenId); _ownedTokensCount[from].decrement(); _ownedTokensCount[to].increment(); _tokenOwner[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * This function is deprecated. * @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) internal returns (bool) { if (!to.isContract()) { return true; } bytes4 retval = IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data); return (retval == _ERC721_RECEIVED); } /** * @dev Private function to clear current approval of a given token ID. * @param tokenId uint256 ID of the token to be transferred */ function _clearApproval(uint256 tokenId) private { if (_tokenApprovals[tokenId] != address(0)) { _tokenApprovals[tokenId] = address(0); } } } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Enumerable is IERC721 { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId); function tokenByIndex(uint256 index) public view returns (uint256); } /** * @title ERC-721 Non-Fungible Token with optional enumeration extension logic * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Enumerable is Context, ERC165, ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => uint256[]) internal _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) internal _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] internal _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) internal _allTokensIndex; /* * bytes4(keccak256('totalSupply()')) == 0x18160ddd * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59 * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7 * * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63 */ bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /** * @dev Constructor function. */ constructor () public { // register the supported interface to conform to ERC721Enumerable via ERC165 _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner. * @param owner address owning the tokens list to be accessed * @param index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) { require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev Gets the total amount of tokens stored by the contract. * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return _allTokens.length; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * Reverts if the index is greater or equal to the total number of tokens. * @param index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 index) public view returns (uint256) { require(index < totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { super._transferFrom(from, to, tokenId); _removeTokenFromOwnerEnumeration(from, tokenId); _addTokenToOwnerEnumeration(to, tokenId); } /** * @dev Internal function to mint a new token. * Reverts if the given token ID already exists. * @param to address the beneficiary that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { super._mint(to, tokenId); _addTokenToOwnerEnumeration(to, tokenId); _addTokenToAllTokensEnumeration(tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use {ERC721-_burn} instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); _removeTokenFromOwnerEnumeration(owner, tokenId); // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund _ownedTokensIndex[tokenId] = 0; _removeTokenFromAllTokensEnumeration(tokenId); } /** * @dev Gets the list of token IDs of the requested owner. * @param owner address owning the tokens * @return uint256[] List of token IDs owned by the requested address */ function _tokensOfOwner(address owner) internal view returns (uint256[] storage) { return _ownedTokens[owner]; } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { _ownedTokensIndex[tokenId] = _ownedTokens[to].length; _ownedTokens[to].push(tokenId); } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _ownedTokens[from].length.sub(1); uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array _ownedTokens[from].length--; // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by // lastTokenId, or just over the end of the array if the token was the last one). } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length.sub(1); uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array _allTokens.length--; _allTokensIndex[tokenId] = 0; } } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } contract ERC721Metadata is Context, ERC165, ERC721, IERC721Metadata { // Token name string private _name; // Token symbol string private _symbol; /* * bytes4(keccak256('name()')) == 0x06fdde03 * bytes4(keccak256('symbol()')) == 0x95d89b41 * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd * * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f */ bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /** * @dev Constructor function */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_METADATA); } /** * @dev Gets the token name. * @return string representing the token name */ function name() external view returns (string memory) { return _name; } /** * @dev Gets the token symbol. * @return string representing the token symbol */ function symbol() external view returns (string memory) { return _symbol; } } /** * @title Full ERC721 Token * @dev This implementation includes all the required and some optional functionality of the ERC721 standard * Moreover, it includes approve all functionality using operator terminology. * * See https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata { constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) { // solhint-disable-previous-line no-empty-blocks } } contract Ownership is Ownable { event OwnershipChanged(address indexed owner, uint256 level); mapping(address => uint256) internal ownership; constructor () internal { setOwnership(_msgSender(), 1); } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); setOwnership(newOwner, 1); } function setOwnership(address key, uint256 level) public onlyOwner { ownership[key] = level; emit OwnershipChanged(key, level); } modifier onlyMinter() { require(isMinter(), "Ownerhsip : caller is not the minter"); _; } function isMinter() public view returns (bool) { return ownership[_msgSender()] > 0; } } library Strings { // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (uint i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (uint i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (uint i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory) { return strConcat(_a, _b, _c, _d, ""); } function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) { return strConcat(_a, _b, _c, "", ""); } function strConcat(string memory _a, string memory _b) internal pure returns (string memory) { return strConcat(_a, _b, "", "", ""); } function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } } contract Metadata { using Strings for string; string public baseUri; function tokenURI(uint256 _id) external view returns (string memory) { return Strings.strConcat(baseUri, Strings.uint2str(_id)); } function uri(uint256 _id) external view returns (string memory) { return Strings.strConcat(baseUri, Strings.uint2str(_id)); } } contract OwnableDelegateProxy { } contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract KingdomLand is ERC721Full, Ownership, Metadata { ProxyRegistry public proxyRegistry; constructor(ProxyRegistry proxy, string memory uri, string memory name, string memory symbol) public ERC721Full(name, symbol) { proxyRegistry = proxy; baseUri = uri; } function setBaseURI(string memory uri) public onlyOwner { baseUri = uri; } function mint(address to, uint256 tokenId) public onlyMinter { _mint(to, tokenId); } function isApprovedForAll(address owner, address operator) public view returns (bool){ if (address(proxyRegistry.proxies(owner)) == operator) return true; return super.isApprovedForAll(owner, operator); } function allTokens() public view returns (uint256[] memory){ return _allTokens; } function getTokens(uint256 start, uint256 end) public view returns (uint256[] memory) { if(end <= start || _allTokens.length <= start) return new uint256[](0); uint256 length = end-start; if(end > _allTokens.length) length = _allTokens.length-start; uint256[] memory outputs = new uint256[](length); for (uint256 i = 0; i < length; ++i) { outputs[i] = _allTokens[start+i]; } return outputs; } function ownedTokens(address owner) public view returns (uint256[] memory){ return _ownedTokens[owner]; } } // https://github.com/ethereum/EIPs/issues/20 interface IERC20 { function transfer(address _to, uint _value) external returns (bool success); function transferFrom(address _from, address _to, uint _value) external returns (bool success); function approve(address _spender, uint _value) external returns (bool success); function totalSupply() external view returns (uint supply); function balanceOf(address _owner) external view returns (uint balance); function allowance(address _owner, address _spender) external view returns (uint remaining); function decimals() external view returns(uint digits); event Approval(address indexed _owner, address indexed _spender, uint _value); } contract LOKLandSaleSecond is Ownable { struct Range { uint256 min; uint256 max; } struct Dutch { uint256 min; uint256 max; uint256 discount; uint256 term; } IERC20 private loka; KingdomLand private land; mapping(address => uint256) private lokas; mapping(address => uint256) private whitelist; uint256[] internal prices; //dollar uint256[] internal counts; uint256[] internal limits; uint256 internal ethExchange; uint256 internal lokaExchange; Range private duration; Range private guild; Dutch private dutch; address payable private receiver; address private tokenReceiver; constructor(KingdomLand _land, IERC20 _loka, uint256 start, uint256[] memory ls, uint256[] memory cs, uint256[] memory ps) public { setLand(_land); setLoka(_loka); uint256 DAY = 86400; setDuration(start, start + DAY * 7); setGuildRound(start + DAY * 2, start + DAY * 3); setDutch(1000, 7000, 125, 3600); setLimits(ls); setCounts(cs); setPrices(ps); setReceiver(_msgSender()); setTokenReceiver(_msgSender()); } function() external payable {} function setWhitelist(address[] memory addrs, uint256[] memory values) public onlyOwner { for (uint256 i = 0; i < addrs.length; ++i) { whitelist[addrs[i]] = values[i]; } } function getWhitelist(address addr) public view returns (uint256 count) { return whitelist[addr]; } function setLand(KingdomLand _land) public onlyOwner { land = _land; } function setDutch(uint256 min, uint256 max, uint256 discount, uint256 term) public onlyOwner { dutch.min = min; dutch.max = max; dutch.discount = discount; dutch.term = term; } function setDuration(uint256 min, uint256 max) public onlyOwner { duration.min = min; duration.max = max; } function setGuildRound(uint256 min, uint256 max) public onlyOwner { guild.min = min; guild.max = max; } function setLimits(uint256[] memory values) public onlyOwner { limits = values; } function setCounts(uint256[] memory values) public onlyOwner { counts = values; } function setPrices(uint256[] memory values) public onlyOwner { prices = values; } function setEthExchange(uint256 ex) public onlyOwner { ethExchange = ex; } function setLokaExchange(uint256 ex) public onlyOwner { lokaExchange = ex; } function setLoka(IERC20 addr) public onlyOwner { loka = addr; } function inDurationRange() public view returns (bool) { uint256 value = getTimestamp(); return value > duration.min && value < duration.max; } function inGuildRound() public view returns (bool) { uint256 value = getTimestamp(); return value > guild.min && value < guild.max; } function getCounts() public view returns (uint256[] memory) { return counts; } function getLimits() public view returns (uint256[] memory) { return limits; } function getRemains() public view returns (uint256[] memory) { uint256[] memory outputs = new uint256[](limits.length); for (uint256 i = 0; i < limits.length; ++i) { outputs[i] = limits[i] - counts[i]; } return outputs; } function getLokaExchange() public view returns (uint256) { return lokaExchange; } function getEthExchange() public view returns (uint256) { return ethExchange; } function rate() public view returns (uint256) { uint256 time = getTimestamp(); if (duration.min >= time) return 0; uint256 step = (time - duration.min) / dutch.term; uint256 discount = step * dutch.discount; if ((dutch.min + discount) >= dutch.max) return dutch.min; return dutch.max - discount; } function distance(uint256 px, uint256 py, uint256 c) internal pure returns (uint256) { return max(round(px, c), round(py, c)); } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function round(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? (b - a - 1) : (a - b); } function rankByDistance(uint256 dc) internal pure returns (uint256) { if (dc >= 98) return 1; if (dc >= 68) return 2; if (dc >= 38) return 3; if (dc >= 24) return 4; if (dc >= 12) return 5; return 6; } function rankByShrine(uint256 px, uint256 py, uint256 dc) internal pure returns (uint256) { uint256 pros = 5 - dc / 32; if (pros <= 2) return 1; uint256 m = 2 * distance(px % 32, py % 32, 16) + 1; return pros - (m / 2 / (pros + 6)); } function rankByPos(uint256 px, uint256 py) internal pure returns (uint256) { uint256 dc = distance(px, py, 128); return max(rankByDistance(dc), rankByShrine(px, py, dc)); } function getRank(uint256 id) public pure returns (uint256) { if (id < 100000 || id > 165535) return 0; uint256 index = id % 100000; uint256 px = index % 256; uint256 py = index / 256; if (py < 128) return 0; return rankByPos(px, py); } function mint(address to, uint256 tokenId) internal { land.mint(to, tokenId); uint256 rank = getRank(tokenId); counts[rank]++; } function computePrice(uint256[] memory landIds) public view returns (uint256) { uint256 price = 0; uint256[] memory rankCounts = new uint256[](10); for (uint256 i = 0; i < landIds.length; ++i) { uint256 landId = landIds[i]; require(land.ownerOf(landId) == address(0), "This land is already sold"); uint256 rank = getRank(landId); require(rank > 0, "This land is unavailable"); price += prices[rank]; rankCounts[rank]++; } for (uint256 i = 0; i < rankCounts.length; ++i) { if (rankCounts[i] > 0) { require(counts[i] + rankCounts[i] <= limits[i], "No more of the land available"); } } return price * rate() / dutch.min; } function buyLandsByLOKA(uint256[] memory landIds, uint256 value) public { checkCondition(landIds.length); uint256 usd = computePrice(landIds); uint256 price = usd * lokaExchange; require(usd > 0, "Incorrect amount paid"); require(price > 0, "Incorrect amount paid"); require(value >= price, "Incorrect amount paid"); require(loka.balanceOf(_msgSender())>=price, "Incorrect amount paid"); require(loka.allowance(_msgSender(), address(this))>=price, "Incorrect amount paid"); loka.transferFrom(_msgSender(), tokenReceiver, price); mintLands(landIds); lokas[_msgSender()] += usd; } function buyLands(uint256[] memory landIds) public payable { checkCondition(landIds.length); uint256 price = computePrice(landIds) * ethExchange; require(msg.value >= price, "Incorrect amount paid"); mintLands(landIds); } function checkCondition(uint256 count) internal { require(count > 0, "Please select land"); require(inDurationRange(), "Only available during sales period"); //길드 라운드이면 길드 화이트 리스트만 if (inGuildRound()) { require(whitelist[_msgSender()] >= count, "No more of the land available"); whitelist[_msgSender()] -= count; } } function mintLands(uint256[] memory landIds) internal { for (uint256 i = 0; i < landIds.length; ++i) { mint(_msgSender(), landIds[i]); } } function setReceiver(address payable r) public onlyOwner { receiver = r; } function setTokenReceiver(address r) public onlyOwner { tokenReceiver = r; } function withdraw() public { require(_msgSender() == receiver || _msgSender() == owner(), "Incorrect address"); receiver.transfer(address(this).balance); } function ownersOf(uint256[] memory landIds) public view returns (address[] memory) { address[] memory owners = new address[](landIds.length); for (uint256 i = 0; i < landIds.length; ++i) { owners[i] = land.ownerOf(landIds[i]); } return owners; } function ownersOfRange(uint256 start, uint256 end) public view returns (address[] memory) { address[] memory owners = new address[](end - start); for (uint256 i = start; i < end; ++i) { owners[i - start] = land.ownerOf(i); } return owners; } function getRanks(uint256[] memory landIds) public pure returns (uint256[] memory) { uint256[] memory outputs = new uint256[](landIds.length); for (uint256 i = 0; i < landIds.length; ++i) { outputs[i] = getRank(landIds[i]); } return outputs; } function getRankRange(uint256 start, uint256 end) public pure returns (uint256[] memory) { uint256 length = end - start; uint256[] memory outputs = new uint256[](length + 1); for (uint256 i = 0; i <= length; ++i) { outputs[i] = getRank(i + start); } return outputs; } function getLokaSpent(address addr) public view returns (uint256 amount) { return lokas[addr]; } function getTimestamp() public view returns (uint256 amount) { return block.timestamp; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract KingdomLand","name":"_land","type":"address"},{"internalType":"contract IERC20","name":"_loka","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256[]","name":"ls","type":"uint256[]"},{"internalType":"uint256[]","name":"cs","type":"uint256[]"},{"internalType":"uint256[]","name":"ps","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"landIds","type":"uint256[]"}],"name":"buyLands","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"landIds","type":"uint256[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"buyLandsByLOKA","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256[]","name":"landIds","type":"uint256[]"}],"name":"computePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCounts","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getEthExchange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLokaExchange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getLokaSpent","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getRank","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getRankRange","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256[]","name":"landIds","type":"uint256[]"}],"name":"getRanks","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getRemains","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getWhitelist","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"inDurationRange","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"inGuildRound","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256[]","name":"landIds","type":"uint256[]"}],"name":"ownersOf","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"ownersOfRange","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"setCounts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"},{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"term","type":"uint256"}],"name":"setDutch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"ex","type":"uint256"}],"name":"setEthExchange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setGuildRound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract KingdomLand","name":"_land","type":"address"}],"name":"setLand","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"setLimits","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"addr","type":"address"}],"name":"setLoka","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"ex","type":"uint256"}],"name":"setLokaExchange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"setPrices","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"r","type":"address"}],"name":"setReceiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setTokenReceiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"setWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620042ab380380620042ab833981810160405260c08110156200003757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805160405193929190846401000000008211156200007657600080fd5b838201915060208201858111156200008d57600080fd5b8251866020820283011164010000000082111715620000ab57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620000e4578082015181840152602081019050620000c7565b50505050905001604052602001805160405193929190846401000000008211156200010e57600080fd5b838201915060208201858111156200012557600080fd5b82518660208202830111640100000000821117156200014357600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200017c5780820151818401526020810190506200015f565b5050505090500160405260200180516040519392919084640100000000821115620001a657600080fd5b83820191506020820185811115620001bd57600080fd5b8251866020820283011164010000000082111715620001db57600080fd5b8083526020830192505050908051906020019060200280838360005b8381101562000214578082015181840152602081019050620001f7565b50505050905001604052505050600062000233620003c960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002e286620003d160201b60201c565b620002f3856200049860201b60201c565b600062015180905062000312856007830287016200055f60201b60201c565b6200032e600282028601600383028701620005fa60201b60201c565b620003496103e8611b58607d610e106200069560201b60201c565b6200035a846200074660201b60201c565b6200036b83620007e560201b60201c565b6200037c826200088460201b60201c565b6200039c62000390620003c960201b60201c565b6200092360201b60201c565b620003bc620003b0620003c960201b60201c565b620009ea60201b60201c565b5050505050505062000b91565b600033905090565b620003e162000ab160201b60201c565b62000454576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620004a862000ab160201b60201c565b6200051b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6200056f62000ab160201b60201c565b620005e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600a6000018190555080600a600101819055505050565b6200060a62000ab160201b60201c565b6200067d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600c6000018190555080600c600101819055505050565b620006a562000ab160201b60201c565b62000718576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b83600e6000018190555082600e6001018190555081600e6002018190555080600e6003018190555050505050565b6200075662000ab160201b60201c565b620007c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060079080519060200190620007e192919062000b17565b5050565b620007f562000ab160201b60201c565b62000868576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600690805190602001906200088092919062000b17565b5050565b6200089462000ab160201b60201c565b62000907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600590805190602001906200091f92919062000b17565b5050565b6200093362000ab160201b60201c565b620009a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620009fa62000ab160201b60201c565b62000a6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000afb620003c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b82805482825590600052602060002090810192821562000b56579160200282015b8281111562000b5557825182559160200191906001019062000b38565b5b50905062000b65919062000b69565b5090565b62000b8e91905b8082111562000b8a57600081600090555060010162000b70565b5090565b90565b61370a8062000ba16000396000f3fe60806040526004361061021a5760003560e01c80637fb27cab11610123578063a5373899116100ab578063de46eaf31161006f578063de46eaf314610f66578063e891e9d114611000578063ee2092af14611051578063f013e0e1146110eb578063f2fde38b146112445761021a565b8063a537389914610d66578063aeb766e214610dd2578063c0b9310714610ea1578063c7d2a19514610edc578063cd7ea09514610f215761021a565b80638f32d59b116100f25780638f32d59b14610b7457806391d6a13114610ba3578063954bb8a314610bd2578063961758a714610bfd578063a5099bae14610d175761021a565b80637fb27cab14610a3157806381d9e0cf14610a60578063879985ad14610ab15780638da5cb5b14610b1d5761021a565b80635ff2f2e8116101a6578063715018a611610175578063715018a6146107f0578063718da7ee1461080757806379cf92d3146108585780637ce91c271461091d5780637f38fc15146109585761021a565b80635ff2f2e8146105e657806362833a83146107005780636a67ad87146107595780636f89e409146107845761021a565b80632c4e722e116101ed5780632c4e722e1461042957806330edc0f5146104545780633ccfd60b146104b957806355d95e0b146104d05780635919ffb2146105215761021a565b80630551b6e71461021c57806305c19190146102e1578063188ec3561461034657806320649c3414610371575b005b34801561022857600080fd5b506102df6004803603602081101561023f57600080fd5b810190808035906020019064010000000081111561025c57600080fd5b82018360208201111561026e57600080fd5b8035906020019184602083028401116401000000008311171561029057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611295565b005b3480156102ed57600080fd5b506103306004803603602081101561030457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611329565b6040518082815260200191505060405180910390f35b34801561035257600080fd5b5061035b611372565b6040518082815260200191505060405180910390f35b6104276004803603602081101561038757600080fd5b81019080803590602001906401000000008111156103a457600080fd5b8201836020820111156103b657600080fd5b803590602001918460208302840111640100000000831117156103d857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061137a565b005b34801561043557600080fd5b5061043e611418565b6040518082815260200191505060405180910390f35b34801561046057600080fd5b506104a36004803603602081101561047757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611495565b6040518082815260200191505060405180910390f35b3480156104c557600080fd5b506104ce6114de565b005b3480156104dc57600080fd5b5061051f600480360360208110156104f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611657565b005b34801561052d57600080fd5b506105e46004803603602081101561054457600080fd5b810190808035906020019064010000000081111561056157600080fd5b82018360208201111561057357600080fd5b8035906020019184602083028401116401000000008311171561059557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611715565b005b3480156105f257600080fd5b506106a96004803603602081101561060957600080fd5b810190808035906020019064010000000081111561062657600080fd5b82018360208201111561063857600080fd5b8035906020019184602083028401116401000000008311171561065a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506117a9565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106ec5780820151818401526020810190506106d1565b505050509050019250505060405180910390f35b34801561070c57600080fd5b506107576004803603608081101561072357600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919050505061190a565b005b34801561076557600080fd5b5061076e6119b2565b6040518082815260200191505060405180910390f35b34801561079057600080fd5b506107996119bc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107dc5780820151818401526020810190506107c1565b505050509050019250505060405180910390f35b3480156107fc57600080fd5b50610805611a14565b005b34801561081357600080fd5b506108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b4d565b005b34801561086457600080fd5b5061091b6004803603602081101561087b57600080fd5b810190808035906020019064010000000081111561089857600080fd5b8201836020820111156108aa57600080fd5b803590602001918460208302840111640100000000831117156108cc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611c0b565b005b34801561092957600080fd5b506109566004803603602081101561094057600080fd5b8101908080359060200190929190505050611c9f565b005b34801561096457600080fd5b50610a1b6004803603602081101561097b57600080fd5b810190808035906020019064010000000081111561099857600080fd5b8201836020820111156109aa57600080fd5b803590602001918460208302840111640100000000831117156109cc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611d23565b6040518082815260200191505060405180910390f35b348015610a3d57600080fd5b50610a466120b3565b604051808215151515815260200191505060405180910390f35b348015610a6c57600080fd5b50610aaf60048036036020811015610a8357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120de565b005b348015610abd57600080fd5b50610ac661219c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610b09578082015181840152602081019050610aee565b505050509050019250505060405180910390f35b348015610b2957600080fd5b50610b32612245565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8057600080fd5b50610b8961226e565b604051808215151515815260200191505060405180910390f35b348015610baf57600080fd5b50610bb86122cc565b604051808215151515815260200191505060405180910390f35b348015610bde57600080fd5b50610be76122f7565b6040518082815260200191505060405180910390f35b348015610c0957600080fd5b50610cc060048036036020811015610c2057600080fd5b8101908080359060200190640100000000811115610c3d57600080fd5b820183602082011115610c4f57600080fd5b80359060200191846020830284011164010000000083111715610c7157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612301565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d03578082015181840152602081019050610ce8565b505050509050019250505060405180910390f35b348015610d2357600080fd5b50610d5060048036036020811015610d3a57600080fd5b810190808035906020019092919050505061238f565b6040518082815260200191505060405180910390f35b348015610d7257600080fd5b50610d7b61240d565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610dbe578082015181840152602081019050610da3565b505050509050019250505060405180910390f35b348015610dde57600080fd5b50610e9f60048036036040811015610df557600080fd5b8101908080359060200190640100000000811115610e1257600080fd5b820183602082011115610e2457600080fd5b80359060200191846020830284011164010000000083111715610e4657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612465565b005b348015610ead57600080fd5b50610eda60048036036020811015610ec457600080fd5b8101908080359060200190929190505050612a6c565b005b348015610ee857600080fd5b50610f1f60048036036040811015610eff57600080fd5b810190808035906020019092919080359060200190929190505050612af0565b005b348015610f2d57600080fd5b50610f6460048036036040811015610f4457600080fd5b810190808035906020019092919080359060200190929190505050612b82565b005b348015610f7257600080fd5b50610fa960048036036040811015610f8957600080fd5b810190808035906020019092919080359060200190929190505050612c14565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610fec578082015181840152602081019050610fd1565b505050509050019250505060405180910390f35b34801561100c57600080fd5b5061104f6004803603602081101561102357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c9b565b005b34801561105d57600080fd5b506110946004803603604081101561107457600080fd5b810190808035906020019092919080359060200190929190505050612d59565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156110d75780820151818401526020810190506110bc565b505050509050019250505060405180910390f35b3480156110f757600080fd5b506112426004803603604081101561110e57600080fd5b810190808035906020019064010000000081111561112b57600080fd5b82018360208201111561113d57600080fd5b8035906020019184602083028401116401000000008311171561115f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156111bf57600080fd5b8201836020820111156111d157600080fd5b803590602001918460208302840111640100000000831117156111f357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612eaa565b005b34801561125057600080fd5b506112936004803603602081101561126757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fad565b005b61129d61226e565b61130f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806006908051906020019061132592919061361b565b5050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600042905090565b6113848151613033565b600060085461139283611d23565b0290508034101561140b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b61141482613227565b5050565b600080611423611372565b905080600a600001541061143b576000915050611492565b6000600e60030154600a6000015483038161145257fe5b0490506000600e6002015482029050600e6001015481600e60000154011061148457600e600001549350505050611492565b80600e600101540393505050505b90565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661151f613269565b73ffffffffffffffffffffffffffffffffffffffff16148061157a5750611544612245565b73ffffffffffffffffffffffffffffffffffffffff16611562613269565b73ffffffffffffffffffffffffffffffffffffffff16145b6115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e636f7272656374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611654573d6000803e3d6000fd5b50565b61165f61226e565b6116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61171d61226e565b61178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600790805190602001906117a592919061361b565b5050565b60608082516040519080825280602002602001820160405280156117dc5781602001602082028038833980820191505090505b50905060008090505b835181101561190057600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e85838151811061183857fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561187457600080fd5b505afa158015611888573d6000803e3d6000fd5b505050506040513d602081101561189e57600080fd5b81019080805190602001909291905050508282815181106118bb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060010190506117e5565b5080915050919050565b61191261226e565b611984576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b83600e6000018190555082600e6001018190555081600e6002018190555080600e6003018190555050505050565b6000600854905090565b60606007805480602002602001604051908101604052809291908181526020018280548015611a0a57602002820191906000526020600020905b8154815260200190600101908083116119f6575b5050505050905090565b611a1c61226e565b611a8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b5561226e565b611bc7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c1361226e565b611c85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060059080519060200190611c9b92919061361b565b5050565b611ca761226e565b611d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060088190555050565b600080600090506060600a604051908082528060200260200182016040528015611d5c5781602001602082028038833980820191505090505b50905060008090505b8451811015611fa0576000858281518110611d7c57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611e1157600080fd5b505afa158015611e25573d6000803e3d6000fd5b505050506040513d6020811015611e3b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611ed5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f54686973206c616e6420697320616c726561647920736f6c640000000000000081525060200191505060405180910390fd5b6000611ee08261238f565b905060008111611f58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686973206c616e6420697320756e617661696c61626c65000000000000000081525060200191505060405180910390fd5b60058181548110611f6557fe5b906000526020600020015485019450838181518110611f8057fe5b602002602001018051809190600101815250505050806001019050611d65565b5060008090505b8151811015612091576000828281518110611fbe57fe5b602002602001015111156120865760078181548110611fd957fe5b9060005260206000200154828281518110611ff057fe5b60200260200101516006838154811061200557fe5b9060005260206000200154011115612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4e6f206d6f7265206f6620746865206c616e6420617661696c61626c6500000081525060200191505060405180910390fd5b5b806001019050611fa7565b50600e600001546120a0611418565b8302816120a957fe5b0492505050919050565b6000806120be611372565b9050600c60000154811180156120d85750600c6001015481105b91505090565b6120e661226e565b612158576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060806007805490506040519080825280602002602001820160405280156121d35781602001602082028038833980820191505090505b50905060008090505b60078054905081101561223d57600681815481106121f657fe5b90600052602060002001546007828154811061220e57fe5b90600052602060002001540382828151811061222657fe5b6020026020010181815250508060010190506121dc565b508091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122b0613269565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000806122d7611372565b9050600a60000154811180156122f15750600a6001015481105b91505090565b6000600954905090565b60608082516040519080825280602002602001820160405280156123345781602001602082028038833980820191505090505b50905060008090505b83518110156123855761236284828151811061235557fe5b602002602001015161238f565b82828151811061236e57fe5b60200260200101818152505080600101905061233d565b5080915050919050565b6000620186a08210806123a457506202869f82115b156123b25760009050612408565b6000620186a083816123c057fe5b069050600061010082816123d057fe5b069050600061010083816123e057fe5b04905060808110156123f85760009350505050612408565b6124028282613271565b93505050505b919050565b6060600680548060200260200160405190810160405280929190818152602001828054801561245b57602002820191906000526020600020905b815481526020019060010190808311612447575b5050505050905090565b61246f8251613033565b600061247a83611d23565b9050600060095482029050600082116124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b60008111612571576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b808310156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b80600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161262e613269565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561268e57600080fd5b505afa1580156126a2573d6000803e3d6000fd5b505050506040513d60208110156126b857600080fd5b8101908080519060200190929190505050101561273d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b80600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e612784613269565b306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561281857600080fd5b505afa15801561282c573d6000803e3d6000fd5b505050506040513d602081101561284257600080fd5b810190808051906020019092919050505010156128c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61290d613269565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156129cd57600080fd5b505af11580156129e1573d6000803e3d6000fd5b505050506040513d60208110156129f757600080fd5b810190808051906020019092919050505050612a1284613227565b8160036000612a1f613269565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555050505050565b612a7461226e565b612ae6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b612af861226e565b612b6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600c6000018190555080600c600101819055505050565b612b8a61226e565b612bfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600a6000018190555080600a600101819055505050565b606060008383039050606060018201604051908082528060200260200182016040528015612c515781602001602082028038833980820191505090505b50905060008090505b828111612c8f57612c6c86820161238f565b828281518110612c7857fe5b602002602001018181525050806001019050612c5a565b50809250505092915050565b612ca361226e565b612d15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606080838303604051908082528060200260200182016040528015612d8d5781602001602082028038833980820191505090505b50905060008490505b83811015612e9f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612e1157600080fd5b505afa158015612e25573d6000803e3d6000fd5b505050506040513d6020811015612e3b57600080fd5b81019080805190602001909291905050508286830381518110612e5a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806001019050612d96565b508091505092915050565b612eb261226e565b612f24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b8251811015612fa857818181518110612f3f57fe5b602002602001015160046000858481518110612f5757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806001019050612f2a565b505050565b612fb561226e565b613027576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613030816132a7565b50565b600081116130a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506c656173652073656c656374206c616e64000000000000000000000000000081525060200191505060405180910390fd5b6130b16122cc565b613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806136b46022913960400191505060405180910390fd5b61310e6120b3565b15613224578060046000613120613269565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156131cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4e6f206d6f7265206f6620746865206c616e6420617661696c61626c6500000081525060200191505060405180910390fd5b80600460006131dc613269565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b50565b60008090505b81518110156132655761325a613241613269565b83838151811061324d57fe5b60200260200101516133eb565b80600101905061322d565b5050565b600033905090565b600080613280848460806134e5565b905061329e61328e8261350c565b61329986868561356d565b6135e1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561332d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061368e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561349457600080fd5b505af11580156134a8573d6000803e3d6000fd5b5050505060006134b78261238f565b9050600681815481106134c657fe5b9060005260206000200160008154809291906001019190505550505050565b60006135036134f485846135fb565b6134fe85856135fb565b6135e1565b90509392505050565b60006062821061351f5760019050613568565b604482106135305760029050613568565b602682106135415760039050613568565b601882106135525760049050613568565b600c82106135635760059050613568565b600690505b919050565b6000806020838161357a57fe5b046005039050600281116135925760019150506135da565b600060016135b6602088816135a357fe5b06602088816135ae57fe5b0660106134e5565b60020201905060068201600282816135ca57fe5b04816135d257fe5b048203925050505b9392505050565b6000818310156135f157816135f3565b825b905092915050565b600081831061360c57818303613613565b6001838303035b905092915050565b828054828255906000526020600020908101928215613657579160200282015b8281111561365657825182559160200191906001019061363b565b5b5090506136649190613668565b5090565b61368a91905b8082111561368657600081600090555060010161366e565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f6e6c7920617661696c61626c6520647572696e672073616c657320706572696f64a265627a7a72315820327ab2db2457e7abc81c6981893ba300f277eeef697228144f845b9f82f939af64736f6c634300051000320000000000000000000000006cc462bc49cecfe943bc4f477b23b92906e6074f00000000000000000000000061e90a50137e1f645c9ef4a0d3a4f014777384060000000000000000000000000000000000000000000000000000000062327a0000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fa00000000000000000000000000000000000000000000000000000000000004f50000000000000000000000000000000000000000000000000000000000000530000000000000000000000000000000000000000000000000000000000000028600000000000000000000000000000000000000000000000000000000000000b3000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055730000000000000000000000000000000000000000000000000000000000006ddd0000000000000000000000000000000000000000000000000000000000007a12000000000000000000000000000000000000000000000000000000000000dbba000000000000000000000000000000000000000000000000000000000001ab3f000000000000000000000000000000000000000000000000000000000003d0900
Deployed Bytecode
0x60806040526004361061021a5760003560e01c80637fb27cab11610123578063a5373899116100ab578063de46eaf31161006f578063de46eaf314610f66578063e891e9d114611000578063ee2092af14611051578063f013e0e1146110eb578063f2fde38b146112445761021a565b8063a537389914610d66578063aeb766e214610dd2578063c0b9310714610ea1578063c7d2a19514610edc578063cd7ea09514610f215761021a565b80638f32d59b116100f25780638f32d59b14610b7457806391d6a13114610ba3578063954bb8a314610bd2578063961758a714610bfd578063a5099bae14610d175761021a565b80637fb27cab14610a3157806381d9e0cf14610a60578063879985ad14610ab15780638da5cb5b14610b1d5761021a565b80635ff2f2e8116101a6578063715018a611610175578063715018a6146107f0578063718da7ee1461080757806379cf92d3146108585780637ce91c271461091d5780637f38fc15146109585761021a565b80635ff2f2e8146105e657806362833a83146107005780636a67ad87146107595780636f89e409146107845761021a565b80632c4e722e116101ed5780632c4e722e1461042957806330edc0f5146104545780633ccfd60b146104b957806355d95e0b146104d05780635919ffb2146105215761021a565b80630551b6e71461021c57806305c19190146102e1578063188ec3561461034657806320649c3414610371575b005b34801561022857600080fd5b506102df6004803603602081101561023f57600080fd5b810190808035906020019064010000000081111561025c57600080fd5b82018360208201111561026e57600080fd5b8035906020019184602083028401116401000000008311171561029057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611295565b005b3480156102ed57600080fd5b506103306004803603602081101561030457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611329565b6040518082815260200191505060405180910390f35b34801561035257600080fd5b5061035b611372565b6040518082815260200191505060405180910390f35b6104276004803603602081101561038757600080fd5b81019080803590602001906401000000008111156103a457600080fd5b8201836020820111156103b657600080fd5b803590602001918460208302840111640100000000831117156103d857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061137a565b005b34801561043557600080fd5b5061043e611418565b6040518082815260200191505060405180910390f35b34801561046057600080fd5b506104a36004803603602081101561047757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611495565b6040518082815260200191505060405180910390f35b3480156104c557600080fd5b506104ce6114de565b005b3480156104dc57600080fd5b5061051f600480360360208110156104f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611657565b005b34801561052d57600080fd5b506105e46004803603602081101561054457600080fd5b810190808035906020019064010000000081111561056157600080fd5b82018360208201111561057357600080fd5b8035906020019184602083028401116401000000008311171561059557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611715565b005b3480156105f257600080fd5b506106a96004803603602081101561060957600080fd5b810190808035906020019064010000000081111561062657600080fd5b82018360208201111561063857600080fd5b8035906020019184602083028401116401000000008311171561065a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506117a9565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106ec5780820151818401526020810190506106d1565b505050509050019250505060405180910390f35b34801561070c57600080fd5b506107576004803603608081101561072357600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919050505061190a565b005b34801561076557600080fd5b5061076e6119b2565b6040518082815260200191505060405180910390f35b34801561079057600080fd5b506107996119bc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107dc5780820151818401526020810190506107c1565b505050509050019250505060405180910390f35b3480156107fc57600080fd5b50610805611a14565b005b34801561081357600080fd5b506108566004803603602081101561082a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b4d565b005b34801561086457600080fd5b5061091b6004803603602081101561087b57600080fd5b810190808035906020019064010000000081111561089857600080fd5b8201836020820111156108aa57600080fd5b803590602001918460208302840111640100000000831117156108cc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611c0b565b005b34801561092957600080fd5b506109566004803603602081101561094057600080fd5b8101908080359060200190929190505050611c9f565b005b34801561096457600080fd5b50610a1b6004803603602081101561097b57600080fd5b810190808035906020019064010000000081111561099857600080fd5b8201836020820111156109aa57600080fd5b803590602001918460208302840111640100000000831117156109cc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611d23565b6040518082815260200191505060405180910390f35b348015610a3d57600080fd5b50610a466120b3565b604051808215151515815260200191505060405180910390f35b348015610a6c57600080fd5b50610aaf60048036036020811015610a8357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120de565b005b348015610abd57600080fd5b50610ac661219c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610b09578082015181840152602081019050610aee565b505050509050019250505060405180910390f35b348015610b2957600080fd5b50610b32612245565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b8057600080fd5b50610b8961226e565b604051808215151515815260200191505060405180910390f35b348015610baf57600080fd5b50610bb86122cc565b604051808215151515815260200191505060405180910390f35b348015610bde57600080fd5b50610be76122f7565b6040518082815260200191505060405180910390f35b348015610c0957600080fd5b50610cc060048036036020811015610c2057600080fd5b8101908080359060200190640100000000811115610c3d57600080fd5b820183602082011115610c4f57600080fd5b80359060200191846020830284011164010000000083111715610c7157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612301565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d03578082015181840152602081019050610ce8565b505050509050019250505060405180910390f35b348015610d2357600080fd5b50610d5060048036036020811015610d3a57600080fd5b810190808035906020019092919050505061238f565b6040518082815260200191505060405180910390f35b348015610d7257600080fd5b50610d7b61240d565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610dbe578082015181840152602081019050610da3565b505050509050019250505060405180910390f35b348015610dde57600080fd5b50610e9f60048036036040811015610df557600080fd5b8101908080359060200190640100000000811115610e1257600080fd5b820183602082011115610e2457600080fd5b80359060200191846020830284011164010000000083111715610e4657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612465565b005b348015610ead57600080fd5b50610eda60048036036020811015610ec457600080fd5b8101908080359060200190929190505050612a6c565b005b348015610ee857600080fd5b50610f1f60048036036040811015610eff57600080fd5b810190808035906020019092919080359060200190929190505050612af0565b005b348015610f2d57600080fd5b50610f6460048036036040811015610f4457600080fd5b810190808035906020019092919080359060200190929190505050612b82565b005b348015610f7257600080fd5b50610fa960048036036040811015610f8957600080fd5b810190808035906020019092919080359060200190929190505050612c14565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610fec578082015181840152602081019050610fd1565b505050509050019250505060405180910390f35b34801561100c57600080fd5b5061104f6004803603602081101561102357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c9b565b005b34801561105d57600080fd5b506110946004803603604081101561107457600080fd5b810190808035906020019092919080359060200190929190505050612d59565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156110d75780820151818401526020810190506110bc565b505050509050019250505060405180910390f35b3480156110f757600080fd5b506112426004803603604081101561110e57600080fd5b810190808035906020019064010000000081111561112b57600080fd5b82018360208201111561113d57600080fd5b8035906020019184602083028401116401000000008311171561115f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156111bf57600080fd5b8201836020820111156111d157600080fd5b803590602001918460208302840111640100000000831117156111f357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612eaa565b005b34801561125057600080fd5b506112936004803603602081101561126757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fad565b005b61129d61226e565b61130f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806006908051906020019061132592919061361b565b5050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600042905090565b6113848151613033565b600060085461139283611d23565b0290508034101561140b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b61141482613227565b5050565b600080611423611372565b905080600a600001541061143b576000915050611492565b6000600e60030154600a6000015483038161145257fe5b0490506000600e6002015482029050600e6001015481600e60000154011061148457600e600001549350505050611492565b80600e600101540393505050505b90565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661151f613269565b73ffffffffffffffffffffffffffffffffffffffff16148061157a5750611544612245565b73ffffffffffffffffffffffffffffffffffffffff16611562613269565b73ffffffffffffffffffffffffffffffffffffffff16145b6115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e636f7272656374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611654573d6000803e3d6000fd5b50565b61165f61226e565b6116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61171d61226e565b61178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600790805190602001906117a592919061361b565b5050565b60608082516040519080825280602002602001820160405280156117dc5781602001602082028038833980820191505090505b50905060008090505b835181101561190057600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e85838151811061183857fe5b60200260200101516040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561187457600080fd5b505afa158015611888573d6000803e3d6000fd5b505050506040513d602081101561189e57600080fd5b81019080805190602001909291905050508282815181106118bb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060010190506117e5565b5080915050919050565b61191261226e565b611984576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b83600e6000018190555082600e6001018190555081600e6002018190555080600e6003018190555050505050565b6000600854905090565b60606007805480602002602001604051908101604052809291908181526020018280548015611a0a57602002820191906000526020600020905b8154815260200190600101908083116119f6575b5050505050905090565b611a1c61226e565b611a8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b5561226e565b611bc7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c1361226e565b611c85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060059080519060200190611c9b92919061361b565b5050565b611ca761226e565b611d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060088190555050565b600080600090506060600a604051908082528060200260200182016040528015611d5c5781602001602082028038833980820191505090505b50905060008090505b8451811015611fa0576000858281518110611d7c57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611e1157600080fd5b505afa158015611e25573d6000803e3d6000fd5b505050506040513d6020811015611e3b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611ed5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f54686973206c616e6420697320616c726561647920736f6c640000000000000081525060200191505060405180910390fd5b6000611ee08261238f565b905060008111611f58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686973206c616e6420697320756e617661696c61626c65000000000000000081525060200191505060405180910390fd5b60058181548110611f6557fe5b906000526020600020015485019450838181518110611f8057fe5b602002602001018051809190600101815250505050806001019050611d65565b5060008090505b8151811015612091576000828281518110611fbe57fe5b602002602001015111156120865760078181548110611fd957fe5b9060005260206000200154828281518110611ff057fe5b60200260200101516006838154811061200557fe5b9060005260206000200154011115612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4e6f206d6f7265206f6620746865206c616e6420617661696c61626c6500000081525060200191505060405180910390fd5b5b806001019050611fa7565b50600e600001546120a0611418565b8302816120a957fe5b0492505050919050565b6000806120be611372565b9050600c60000154811180156120d85750600c6001015481105b91505090565b6120e661226e565b612158576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060806007805490506040519080825280602002602001820160405280156121d35781602001602082028038833980820191505090505b50905060008090505b60078054905081101561223d57600681815481106121f657fe5b90600052602060002001546007828154811061220e57fe5b90600052602060002001540382828151811061222657fe5b6020026020010181815250508060010190506121dc565b508091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122b0613269565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000806122d7611372565b9050600a60000154811180156122f15750600a6001015481105b91505090565b6000600954905090565b60608082516040519080825280602002602001820160405280156123345781602001602082028038833980820191505090505b50905060008090505b83518110156123855761236284828151811061235557fe5b602002602001015161238f565b82828151811061236e57fe5b60200260200101818152505080600101905061233d565b5080915050919050565b6000620186a08210806123a457506202869f82115b156123b25760009050612408565b6000620186a083816123c057fe5b069050600061010082816123d057fe5b069050600061010083816123e057fe5b04905060808110156123f85760009350505050612408565b6124028282613271565b93505050505b919050565b6060600680548060200260200160405190810160405280929190818152602001828054801561245b57602002820191906000526020600020905b815481526020019060010190808311612447575b5050505050905090565b61246f8251613033565b600061247a83611d23565b9050600060095482029050600082116124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b60008111612571576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b808310156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b80600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161262e613269565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561268e57600080fd5b505afa1580156126a2573d6000803e3d6000fd5b505050506040513d60208110156126b857600080fd5b8101908080519060200190929190505050101561273d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b80600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e612784613269565b306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561281857600080fd5b505afa15801561282c573d6000803e3d6000fd5b505050506040513d602081101561284257600080fd5b810190808051906020019092919050505010156128c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e636f727265637420616d6f756e742070616964000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd61290d613269565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156129cd57600080fd5b505af11580156129e1573d6000803e3d6000fd5b505050506040513d60208110156129f757600080fd5b810190808051906020019092919050505050612a1284613227565b8160036000612a1f613269565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555050505050565b612a7461226e565b612ae6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060098190555050565b612af861226e565b612b6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600c6000018190555080600c600101819055505050565b612b8a61226e565b612bfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600a6000018190555080600a600101819055505050565b606060008383039050606060018201604051908082528060200260200182016040528015612c515781602001602082028038833980820191505090505b50905060008090505b828111612c8f57612c6c86820161238f565b828281518110612c7857fe5b602002602001018181525050806001019050612c5a565b50809250505092915050565b612ca361226e565b612d15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606080838303604051908082528060200260200182016040528015612d8d5781602001602082028038833980820191505090505b50905060008490505b83811015612e9f57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612e1157600080fd5b505afa158015612e25573d6000803e3d6000fd5b505050506040513d6020811015612e3b57600080fd5b81019080805190602001909291905050508286830381518110612e5a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806001019050612d96565b508091505092915050565b612eb261226e565b612f24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b8251811015612fa857818181518110612f3f57fe5b602002602001015160046000858481518110612f5757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806001019050612f2a565b505050565b612fb561226e565b613027576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b613030816132a7565b50565b600081116130a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506c656173652073656c656374206c616e64000000000000000000000000000081525060200191505060405180910390fd5b6130b16122cc565b613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806136b46022913960400191505060405180910390fd5b61310e6120b3565b15613224578060046000613120613269565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156131cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4e6f206d6f7265206f6620746865206c616e6420617661696c61626c6500000081525060200191505060405180910390fd5b80600460006131dc613269565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b50565b60008090505b81518110156132655761325a613241613269565b83838151811061324d57fe5b60200260200101516133eb565b80600101905061322d565b5050565b600033905090565b600080613280848460806134e5565b905061329e61328e8261350c565b61329986868561356d565b6135e1565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561332d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061368e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561349457600080fd5b505af11580156134a8573d6000803e3d6000fd5b5050505060006134b78261238f565b9050600681815481106134c657fe5b9060005260206000200160008154809291906001019190505550505050565b60006135036134f485846135fb565b6134fe85856135fb565b6135e1565b90509392505050565b60006062821061351f5760019050613568565b604482106135305760029050613568565b602682106135415760039050613568565b601882106135525760049050613568565b600c82106135635760059050613568565b600690505b919050565b6000806020838161357a57fe5b046005039050600281116135925760019150506135da565b600060016135b6602088816135a357fe5b06602088816135ae57fe5b0660106134e5565b60020201905060068201600282816135ca57fe5b04816135d257fe5b048203925050505b9392505050565b6000818310156135f157816135f3565b825b905092915050565b600081831061360c57818303613613565b6001838303035b905092915050565b828054828255906000526020600020908101928215613657579160200282015b8281111561365657825182559160200191906001019061363b565b5b5090506136649190613668565b5090565b61368a91905b8082111561368657600081600090555060010161366e565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f6e6c7920617661696c61626c6520647572696e672073616c657320706572696f64a265627a7a72315820327ab2db2457e7abc81c6981893ba300f277eeef697228144f845b9f82f939af64736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006cc462bc49cecfe943bc4f477b23b92906e6074f00000000000000000000000061e90a50137e1f645c9ef4a0d3a4f014777384060000000000000000000000000000000000000000000000000000000062327a0000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009fa00000000000000000000000000000000000000000000000000000000000004f50000000000000000000000000000000000000000000000000000000000000530000000000000000000000000000000000000000000000000000000000000028600000000000000000000000000000000000000000000000000000000000000b3000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055730000000000000000000000000000000000000000000000000000000000006ddd0000000000000000000000000000000000000000000000000000000000007a12000000000000000000000000000000000000000000000000000000000000dbba000000000000000000000000000000000000000000000000000000000001ab3f000000000000000000000000000000000000000000000000000000000003d0900
-----Decoded View---------------
Arg [0] : _land (address): 0x6CC462bc49ceCFE943Bc4F477b23b92906e6074F
Arg [1] : _loka (address): 0x61E90A50137E1F645c9eF4a0d3A4f01477738406
Arg [2] : start (uint256): 1647475200
Arg [3] : ls (uint256[]): 0,2554,1269,1328,646,179,46
Arg [4] : cs (uint256[]): 0,0,0,0,0,0,0
Arg [5] : ps (uint256[]): 0,350000,450000,500000,900000,1750000,4000000
-----Encoded View---------------
30 Constructor Arguments found :
Arg [0] : 0000000000000000000000006cc462bc49cecfe943bc4f477b23b92906e6074f
Arg [1] : 00000000000000000000000061e90a50137e1f645c9ef4a0d3a4f01477738406
Arg [2] : 0000000000000000000000000000000000000000000000000000000062327a00
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [5] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 00000000000000000000000000000000000000000000000000000000000009fa
Arg [9] : 00000000000000000000000000000000000000000000000000000000000004f5
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000530
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000286
Arg [12] : 00000000000000000000000000000000000000000000000000000000000000b3
Arg [13] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [24] : 0000000000000000000000000000000000000000000000000000000000055730
Arg [25] : 000000000000000000000000000000000000000000000000000000000006ddd0
Arg [26] : 000000000000000000000000000000000000000000000000000000000007a120
Arg [27] : 00000000000000000000000000000000000000000000000000000000000dbba0
Arg [28] : 00000000000000000000000000000000000000000000000000000000001ab3f0
Arg [29] : 00000000000000000000000000000000000000000000000000000000003d0900
Deployed Bytecode Sourcemap
50058:9959:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52358:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52358:95:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52358:95:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;52358:95:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52358:95:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;52358:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;52358:95:0;;;;;;;;;;;;;;;:::i;:::-;;59798:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;59798:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;59798:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;59912:102;;8:9:-1;5:2;;;30:1;27;20:12;5:2;59912:102:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;57299:264;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;57299:264:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;57299:264:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;57299:264:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;57299:264:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;57299:264:0;;;;;;;;;;;;;;;:::i;:::-;;53819:356;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53819:356:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51569:113;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51569:113:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51569:113:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;58359:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;58359:178:0;;;:::i;:::-;;52742:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52742:77:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52742:77:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;52259:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52259:95:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52259:95:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;52259:95:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52259:95:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;52259:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;52259:95:0;;;;;;;;;;;;;;;:::i;:::-;;58541:304;;8:9:-1;5:2;;;30:1;27;20:12;5:2;58541:304:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;58541:304:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;58541:304:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;58541:304:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;58541:304:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;58541:304:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;58541:304:0;;;;;;;;;;;;;;;;;51774:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51774:217:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;51774:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53722:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53722:93:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53248:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53248:92:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;53248:92:0;;;;;;;;;;;;;;;;;2862:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2862:140:0;;;:::i;:::-;;58173:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;58173:88:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;58173:88:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;52457:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52457:95:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52457:95:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;52457:95:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52457:95:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;52457:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;52457:95:0;;;;;;;;;;;;;;;:::i;:::-;;52556:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52556:88:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52556:88:0;;;;;;;;;;;;;;;;;:::i;:::-;;55794:813;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55794:813:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;55794:813:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;55794:813:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;55794:813:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;55794:813:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;55794:813:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;52992:156;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52992:156:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;51686:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51686:84:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51686:84:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;53344:275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53344:275:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;53344:275:0;;;;;;;;;;;;;;;;;2051:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2051:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2417:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2417:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;52823:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52823:165:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;53623:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53623:95:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;59153:302;;8:9:-1;5:2;;;30:1;27;20:12;5:2;59153:302:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;59153:302:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;59153:302:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;59153:302:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;59153:302:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;59153:302:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;59153:302:0;;;;;;;;;;;;;;;;;55306:320;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55306:320:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;55306:320:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53152:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53152:92:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;53152:92:0;;;;;;;;;;;;;;;;;56611:684;;8:9:-1;5:2;;;30:1;27;20:12;5:2;56611:684:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;56611:684:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;56611:684:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;56611:684:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;56611:684:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;56611:684:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;52648:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52648:90:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52648:90:0;;;;;;;;;;;;;;;;;:::i;:::-;;52129:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52129:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52129:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51995:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51995:130:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51995:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;59459:335;;8:9:-1;5:2;;;30:1;27;20:12;5:2;59459:335:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;59459:335:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;59459:335:0;;;;;;;;;;;;;;;;;58265:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;58265:90:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;58265:90:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;58849:300;;8:9:-1;5:2;;;30:1;27;20:12;5:2;58849:300:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;58849:300:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;58849:300:0;;;;;;;;;;;;;;;;;51353:212;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51353:212:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51353:212:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;51353:212:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51353:212:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;51353:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;51353:212:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;51353:212:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51353:212:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;51353:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;51353:212:0;;;;;;;;;;;;;;;:::i;:::-;;3157:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3157:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3157:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;52358:95;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52439:6;52430;:15;;;;;;;;;;;;:::i;:::-;;52358:95;:::o;59798:110::-;59855:14;59889:5;:11;59895:4;59889:11;;;;;;;;;;;;;;;;59882:18;;59798:110;;;:::o;59912:102::-;59957:14;59991:15;59984:22;;59912:102;:::o;57299:264::-;57369:30;57384:7;:14;57369;:30::i;:::-;57412:13;57452:11;;57428:21;57441:7;57428:12;:21::i;:::-;:35;57412:51;;57495:5;57482:9;:18;;57474:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57537:18;57547:7;57537:9;:18::i;:::-;57299:264;;:::o;53819:356::-;53856:7;53876:12;53891:14;:12;:14::i;:::-;53876:29;;53936:4;53920:8;:12;;;:20;53916:34;;53949:1;53942:8;;;;;53916:34;53961:12;54000:5;:10;;;53984:8;:12;;;53977:4;:19;53976:34;;;;;;53961:49;;54021:16;54047:5;:14;;;54040:4;:21;54021:40;;54102:5;:9;;;54089:8;54077:5;:9;;;:20;54076:35;54072:57;;54120:5;:9;;;54113:16;;;;;;;54072:57;54159:8;54147:5;:9;;;:20;54140:27;;;;;53819:356;;:::o;51569:113::-;51626:13;51659:9;:15;51669:4;51659:15;;;;;;;;;;;;;;;;51652:22;;51569:113;;;:::o;58359:178::-;58421:8;;;;;;;;;;;58405:24;;:12;:10;:12::i;:::-;:24;;;:51;;;;58449:7;:5;:7::i;:::-;58433:23;;:12;:10;:12::i;:::-;:23;;;58405:51;58397:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58489:8;;;;;;;;;;;:17;;:40;58507:21;58489:40;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58489:40:0;58359:178::o;52742:77::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52807:4;52800;;:11;;;;;;;;;;;;;;;;;;52742:77;:::o;52259:95::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52340:6;52331;:15;;;;;;;;;;;;:::i;:::-;;52259:95;:::o;58541:304::-;58606:16;58640:23;58680:7;:14;58666:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;58666:29:0;;;;58640:55;;58711:9;58723:1;58711:13;;58706:108;58730:7;:14;58726:1;:18;58706:108;;;58778:4;;;;;;;;;;;:12;;;58791:7;58799:1;58791:10;;;;;;;;;;;;;;58778:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;58778:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58778:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;58778:24:0;;;;;;;;;;;;;;;;58766:6;58773:1;58766:9;;;;;;;;;;;;;:36;;;;;;;;;;;58746:3;;;;;58706:108;;;;58831:6;58824:13;;;58541:304;;;:::o;51774:217::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51890:3;51878:5;:9;;:15;;;;51916:3;51904:5;:9;;:15;;;;51947:8;51930:5;:14;;:25;;;;51979:4;51966:5;:10;;:17;;;;51774:217;;;;:::o;53722:93::-;53769:7;53796:11;;53789:18;;53722:93;:::o;53248:92::-;53290:16;53326:6;53319:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53248:92;:::o;2862:140::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2961:1;2924:40;;2945:6;;;;;;;;;;;2924:40;;;;;;;;;;;;2992:1;2975:6;;:19;;;;;;;;;;;;;;;;;;2862:140::o;58173:88::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58252:1;58241:8;;:12;;;;;;;;;;;;;;;;;;58173:88;:::o;52457:95::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52538:6;52529;:15;;;;;;;;;;;;:::i;:::-;;52457:95;:::o;52556:88::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52634:2;52620:11;:16;;;;52556:88;:::o;55794:813::-;55863:7;55888:13;55904:1;55888:17;;55916:27;55960:2;55946:17;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;55946:17:0;;;;55916:47;;55979:9;55991:1;55979:13;;55974:360;55998:7;:14;55994:1;:18;55974:360;;;56034:14;56051:7;56059:1;56051:10;;;;;;;;;;;;;;56034:27;;56116:1;56084:34;;:4;;;;;;;;;;;:12;;;56097:6;56084:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;56084:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56084:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;56084:20:0;;;;;;;;;;;;;;;;:34;;;56076:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56163:12;56178:15;56186:6;56178:7;:15::i;:::-;56163:30;;56223:1;56216:4;:8;56208:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56277:6;56284:4;56277:12;;;;;;;;;;;;;;;;56268:21;;;;56304:10;56315:4;56304:16;;;;;;;;;;;;;:18;;;;;;;;;;;55974:360;;56014:3;;;;;55974:360;;;;56349:9;56361:1;56349:13;;56344:212;56368:10;:17;56364:1;:21;56344:212;;;56427:1;56411:10;56422:1;56411:13;;;;;;;;;;;;;;:17;56407:138;;;56486:6;56493:1;56486:9;;;;;;;;;;;;;;;;56469:10;56480:1;56469:13;;;;;;;;;;;;;;56457:6;56464:1;56457:9;;;;;;;;;;;;;;;;:25;:38;;56449:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56407:138;56387:3;;;;;56344:212;;;;56590:5;:9;;;56581:6;:4;:6::i;:::-;56573:5;:14;:26;;;;;;56566:33;;;;55794:813;;;:::o;52992:156::-;53037:4;53054:13;53070:14;:12;:14::i;:::-;53054:30;;53110:5;:9;;;53102:5;:17;:38;;;;;53131:5;:9;;;53123:5;:17;53102:38;53095:45;;;52992:156;:::o;51686:84::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51757:5;51750:4;;:12;;;;;;;;;;;;;;;;;;51686:84;:::o;53344:275::-;53387:16;53416:24;53457:6;:13;;;;53443:28;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;53443:28:0;;;;53416:55;;53487:9;53499:1;53487:13;;53482:105;53506:6;:13;;;;53502:1;:17;53482:105;;;53566:6;53573:1;53566:9;;;;;;;;;;;;;;;;53554:6;53561:1;53554:9;;;;;;;;;;;;;;;;:21;53541:7;53549:1;53541:10;;;;;;;;;;;;;:34;;;;;53521:3;;;;;53482:105;;;;53604:7;53597:14;;;53344:275;:::o;2051:79::-;2089:7;2116:6;;;;;;;;;;;2109:13;;2051:79;:::o;2417:94::-;2457:4;2497:6;;;;;;;;;;;2481:22;;:12;:10;:12::i;:::-;:22;;;2474:29;;2417:94;:::o;52823:165::-;52871:4;52888:13;52904:14;:12;:14::i;:::-;52888:30;;52944:8;:12;;;52936:5;:20;:44;;;;;52968:8;:12;;;52960:5;:20;52936:44;52929:51;;;52823:165;:::o;53623:95::-;53671:7;53698:12;;53691:19;;53623:95;:::o;59153:302::-;59218:16;59252:24;59293:7;:14;59279:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;59279:29:0;;;;59252:56;;59324:9;59336:1;59324:13;;59319:104;59343:7;:14;59339:1;:18;59319:104;;;59392:19;59400:7;59408:1;59400:10;;;;;;;;;;;;;;59392:7;:19::i;:::-;59379:7;59387:1;59379:10;;;;;;;;;;;;;:32;;;;;59359:3;;;;;59319:104;;;;59440:7;59433:14;;;59153:302;;;:::o;55306:320::-;55356:7;55385:6;55380:2;:11;:26;;;;55400:6;55395:2;:11;55380:26;55376:53;;;55428:1;55421:8;;;;55376:53;55440:13;55461:6;55456:2;:11;;;;;;55440:27;;55478:10;55499:3;55491:5;:11;;;;;;55478:24;;55513:10;55534:3;55526:5;:11;;;;;;55513:24;;55557:3;55552:2;:8;55548:35;;;55582:1;55575:8;;;;;;;55548:35;55601:17;55611:2;55615;55601:9;:17::i;:::-;55594:24;;;;;55306:320;;;;:::o;53152:92::-;53194:16;53230:6;53223:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53152:92;:::o;56611:684::-;56694:30;56709:7;:14;56694;:30::i;:::-;56737:11;56751:21;56764:7;56751:12;:21::i;:::-;56737:35;;56783:13;56805:12;;56799:3;:18;56783:34;;56842:1;56836:3;:7;56828:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56896:1;56888:5;:9;56880:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56951:5;56942;:14;;56934:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57031:5;57001:4;;;;;;;;;;;:14;;;57016:12;:10;:12::i;:::-;57001:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;57001:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57001:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;57001:28:0;;;;;;;;;;;;;;;;:35;;56993:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57126:5;57081:4;;;;;;;;;;;:14;;;57096:12;:10;:12::i;:::-;57118:4;57081:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;57081:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57081:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;57081:43:0;;;;;;;;;;;;;;;;:50;;57073:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57168:4;;;;;;;;;;;:17;;;57186:12;:10;:12::i;:::-;57200:13;;;;;;;;;;;57215:5;57168:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;57168:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57168:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;57168:53:0;;;;;;;;;;;;;;;;;57232:18;57242:7;57232:9;:18::i;:::-;57284:3;57261:5;:19;57267:12;:10;:12::i;:::-;57261:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;56611:684;;;;:::o;52648:90::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52728:2;52713:12;:17;;;;52648:90;:::o;52129:126::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52218:3;52206:5;:9;;:15;;;;52244:3;52232:5;:9;;:15;;;;52129:126;;:::o;51995:130::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52085:3;52070:8;:12;;:18;;;;52114:3;52099:8;:12;;:18;;;;51995:130;;:::o;59459:335::-;59530:16;59564:14;59587:5;59581:3;:11;59564:28;;59603:24;59653:1;59644:6;:10;59630:25;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;59630:25:0;;;;59603:52;;59671:9;59683:1;59671:13;;59666:96;59691:6;59686:1;:11;59666:96;;59732:18;59744:5;59740:1;:9;59732:7;:18::i;:::-;59719:7;59727:1;59719:10;;;;;;;;;;;;;:31;;;;;59699:3;;;;;59666:96;;;;59779:7;59772:14;;;;59459:335;;;;:::o;58265:90::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58346:1;58330:13;;:17;;;;;;;;;;;;;;;;;;58265:90;:::o;58849:300::-;58921:16;58955:23;59001:5;58995:3;:11;58981:26;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;58981:26:0;;;;58955:52;;59023:9;59035:5;59023:17;;59018:100;59046:3;59042:1;:7;59018:100;;;59091:4;;;;;;;;;;;:12;;;59104:1;59091:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;59091:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;59091:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;59091:15:0;;;;;;;;;;;;;;;;59071:6;59082:5;59078:1;:9;59071:17;;;;;;;;;;;;;:35;;;;;;;;;;;59051:3;;;;;59018:100;;;;59135:6;59128:13;;;58849:300;;;;:::o;51353:212::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51462:9;51474:1;51462:13;;51457:101;51481:5;:12;51477:1;:16;51457:101;;;51537:6;51544:1;51537:9;;;;;;;;;;;;;;51515;:19;51525:5;51531:1;51525:8;;;;;;;;;;;;;;51515:19;;;;;;;;;;;;;;;:31;;;;51495:3;;;;;51457:101;;;;51353:212;;:::o;3157:109::-;2263:9;:7;:9::i;:::-;2255:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3230:28;3249:8;3230:18;:28::i;:::-;3157:109;:::o;57567:424::-;57642:1;57634:5;:9;57626:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57685:17;:15;:17::i;:::-;57677:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57820:14;:12;:14::i;:::-;57816:168;;;57886:5;57859:9;:23;57869:12;:10;:12::i;:::-;57859:23;;;;;;;;;;;;;;;;:32;;57851:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57967:5;57940:9;:23;57950:12;:10;:12::i;:::-;57940:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;57816:168;57567:424;:::o;57995:174::-;58065:9;58077:1;58065:13;;58060:102;58084:7;:14;58080:1;:18;58060:102;;;58120:30;58125:12;:10;:12::i;:::-;58139:7;58147:1;58139:10;;;;;;;;;;;;;;58120:4;:30::i;:::-;58100:3;;;;;58060:102;;;;57995:174;:::o;842:98::-;887:15;922:10;915:17;;842:98;:::o;55107:195::-;55173:7;55193:10;55206:21;55215:2;55219;55223:3;55206:8;:21::i;:::-;55193:34;;55245:49;55249:18;55264:2;55249:14;:18::i;:::-;55269:24;55282:2;55286;55290;55269:12;:24::i;:::-;55245:3;:49::i;:::-;55238:56;;;55107:195;;;;:::o;3372:229::-;3466:1;3446:22;;:8;:22;;;;3438:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3556:8;3527:38;;3548:6;;;;;;;;;;;3527:38;;;;;;;;;;;;3585:8;3576:6;;:17;;;;;;;;;;;;;;;;;;3372:229;:::o;55630:160::-;55693:4;;;;;;;;;;;:9;;;55703:2;55707:7;55693:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55693:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55693:22:0;;;;55726:12;55741:16;55749:7;55741;:16::i;:::-;55726:31;;55768:6;55775:4;55768:12;;;;;;;;;;;;;;;;:14;;;;;;;;;;;;;55630:160;;;:::o;54179:142::-;54255:7;54282:31;54286:12;54292:2;54296:1;54286:5;:12::i;:::-;54300;54306:2;54310:1;54300:5;:12::i;:::-;54282:3;:31::i;:::-;54275:38;;54179:142;;;;;:::o;54564:260::-;54623:7;54653:2;54647;:8;54643:22;;54664:1;54657:8;;;;54643:22;54686:2;54680;:8;54676:22;;54697:1;54690:8;;;;54676:22;54719:2;54713;:8;54709:22;;54730:1;54723:8;;;;54709:22;54752:2;54746;:8;54742:22;;54763:1;54756:8;;;;54742:22;54785:2;54779;:8;54775:22;;54796:1;54789:8;;;;54775:22;54815:1;54808:8;;54564:260;;;;:::o;54828:275::-;54909:7;54929:12;54953:2;54948;:7;;;;;;54944:1;:11;54929:26;;54978:1;54970:4;:9;54966:23;;54988:1;54981:8;;;;;54966:23;55000:9;55049:1;55016:30;55030:2;55025;:7;;;;;;55039:2;55034;:7;;;;;;55043:2;55016:8;:30::i;:::-;55012:1;:34;:38;55000:50;;55092:1;55085:4;:8;55080:1;55076;:5;;;;;;:18;;;;;;55068:4;:27;55061:34;;;;54828:275;;;;;;:::o;54325:107::-;54383:7;54415:1;54410;:6;;:14;;54423:1;54410:14;;;54419:1;54410:14;54403:21;;54325:107;;;;:::o;54436:124::-;54496:7;54527:1;54523;:5;:29;;54550:1;54546;:5;54523:29;;;54540:1;54536;54532;:5;:9;54523:29;54516:36;;54436:124;;;;:::o;50058:9959::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://327ab2db2457e7abc81c6981893ba300f277eeef697228144f845b9f82f939af
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.479202 | 0.4841 | $0.23197 |
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.