Overview
ETH Balance
0.02602 ETH
Eth Value
$65.84 (@ $2,530.24/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 180 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Whitelist Ro... | 17986295 | 371 days ago | IN | 0 ETH | 0.0013442 | ||||
Set Whitelist Ro... | 17986293 | 371 days ago | IN | 0 ETH | 0.00159344 | ||||
Set Whitelist Ro... | 17986288 | 371 days ago | IN | 0 ETH | 0.00153065 | ||||
Set Whitelist Ro... | 17986283 | 371 days ago | IN | 0 ETH | 0.00165453 | ||||
Set Sale Status | 17986282 | 371 days ago | IN | 0 ETH | 0.00089758 | ||||
Mint Land | 17986268 | 371 days ago | IN | 0.00156 ETH | 0.00193809 | ||||
Mint Land | 17986268 | 371 days ago | IN | 0.00156 ETH | 0.00463634 | ||||
Mint Land | 17986179 | 371 days ago | IN | 0.00156 ETH | 0.00458433 | ||||
Set Whitelist Ro... | 17986066 | 371 days ago | IN | 0 ETH | 0.00126237 | ||||
Set Whitelist Ro... | 17986059 | 371 days ago | IN | 0 ETH | 0.0014566 | ||||
Set Whitelist Ro... | 17986056 | 371 days ago | IN | 0 ETH | 0.0012385 | ||||
Set Sale Status | 17986034 | 371 days ago | IN | 0 ETH | 0.00075273 | ||||
Set Rate | 17986031 | 371 days ago | IN | 0 ETH | 0.00124212 | ||||
Set Whitelist Ro... | 17983231 | 371 days ago | IN | 0 ETH | 0.00082163 | ||||
Set Sale Status | 17983230 | 371 days ago | IN | 0 ETH | 0.00044689 | ||||
Mint Land | 17983220 | 371 days ago | IN | 0.00016 ETH | 0.00169672 | ||||
Mint Land | 17983218 | 371 days ago | IN | 0.00016 ETH | 0.00204722 | ||||
Mint Land | 17983191 | 371 days ago | IN | 0.00064 ETH | 0.00209862 | ||||
Mint Land | 17983180 | 371 days ago | IN | 0.00016 ETH | 0.00256661 | ||||
Mint Land | 17983178 | 371 days ago | IN | 0.00047 ETH | 0.00328279 | ||||
Mint Land | 17983175 | 371 days ago | IN | 0.00156 ETH | 0.00350813 | ||||
Mint Land | 17983094 | 371 days ago | IN | 0.00156 ETH | 0.00303416 | ||||
Mint Land | 17983017 | 371 days ago | IN | 0.00047 ETH | 0.00292692 | ||||
Mint Land | 17982964 | 371 days ago | IN | 0.00016 ETH | 0.00144183 | ||||
Set Whitelist Ro... | 17982828 | 371 days ago | IN | 0 ETH | 0.0009072 |
Loading...
Loading
Contract Name:
XANALand
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-27 */ /** *Submitted for verification at BscScan.com on 2023-06-26 */ /** *Submitted for verification at BscScan.com on 2023-06-23 */ /** *Submitted for verification at Etherscan.io on 2022-10-13 */ /** *Submitted for verification at BscScan.com on 2022-10-11 */ // File: contracts/ProxyBaseStorage.sol pragma solidity ^0.8.14; contract ProxyBaseStorage { //////////////////////////////////////////// VARS ///////////////////////////////////////////// // maps functions to the delegate contracts that execute the functions. // funcId => delegate contract mapping(bytes4 => address) public delegates; // array of function signatures supported by the contract. bytes[] public funcSignatures; // maps each function signature to its position in the funcSignatures array. // signature => index+1 mapping(bytes => uint256) internal funcSignatureToIndex; // proxy address of itself, can be used for cross-delegate calls but also safety checking. address proxy; /////////////////////////////////////////////////////////////////////////////////////////////// } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: contracts/ERC721A.sol pragma solidity ^0.8.14; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ abstract contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) internal _addressData; // Mapping from token ID to approved address mapping(uint256 => address) internal _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) internal _operatorApprovals; mapping(uint256 => uint256) public _nftLockup; mapping(address => bool) public isTransferAllowed; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } modifier onlyTransferAllowed(address from) { require(isTransferAllowed[from],"ERC721: transfer not allowed"); _; } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 1; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) onlyTransferAllowed(to) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) onlyTransferAllowed(operator) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal returns(uint256, uint256) { return _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal returns(uint256, uint256) { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { // emit MintWithTokenURI(address(this), updatedIndex, to, ""); emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); return(startTokenId,_currentIndex-1); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { // emit MintWithTokenURI(address(this), updatedIndex, to, ""); emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } //erc721A transfer functions function transferFrom( address from, address to, uint256 tokenId ) public virtual { require(_nftLockup[tokenId] <= block.timestamp || _nftLockup[tokenId] == 0 , "XanaLand: NFT lockup not expired yet"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual { require(_nftLockup[tokenId] <= block.timestamp || _nftLockup[tokenId] == 0 , "XanaLand: NFT lockup not expired yet"); safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual { require(_nftLockup[tokenId] <= block.timestamp || _nftLockup[tokenId] == 0 , "XanaLand: NFT lockup not expired yet"); _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) onlyTransferAllowed(msg.sender) internal { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transferAdmin( address from, address to, uint256 tokenId ) internal { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) internal returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} event MintWithTokenURI(address indexed collection, uint256 indexed tokenId, address minter, string tokenURI); } // File: contracts/ERC721AQueryable.sol pragma solidity ^0.8.4; error InvalidQueryRange(); /** * @title ERC721A Queryable * @dev ERC721A subclass with convenience query functions. */ abstract contract ERC721AQueryable is ERC721A { /** * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting. * * If the `tokenId` is out of bounds: * - `addr` = `address(0)` * - `startTimestamp` = `0` * - `burned` = `false` * * If the `tokenId` is burned: * - `addr` = `<Address of owner before token was burned>` * - `startTimestamp` = `<Timestamp when token was burned>` * - `burned = `true` * * Otherwise: * - `addr` = `<Address of owner>` * - `startTimestamp` = `<Timestamp of start of ownership>` * - `burned = `false` */ function explicitOwnershipOf(uint256 tokenId) public view returns (TokenOwnership memory) { TokenOwnership memory ownership; if (tokenId < _startTokenId() || tokenId >= _currentIndex) { return ownership; } ownership = _ownerships[tokenId]; if (ownership.burned) { return ownership; } return _ownershipOf(tokenId); } /** * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order. * See {ERC721AQueryable-explicitOwnershipOf} */ function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory) { unchecked { uint256 tokenIdsLength = tokenIds.length; TokenOwnership[] memory ownerships = new TokenOwnership[](tokenIdsLength); for (uint256 i; i != tokenIdsLength; ++i) { ownerships[i] = explicitOwnershipOf(tokenIds[i]); } return ownerships; } } /** * @dev Returns an array of token IDs owned by `owner`, * in the range [`start`, `stop`) * (i.e. `start <= tokenId < stop`). * * This function allows for tokens to be queried if the collection * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}. * * Requirements: * * - `start` < `stop` */ function tokensOfOwnerIn( address owner, uint256 start, uint256 stop ) external view returns (uint256[] memory) { unchecked { if (start > stop) revert InvalidQueryRange(); uint256 tokenIdsIdx; uint256 stopLimit = _currentIndex + 1; // Set `start = max(start, _startTokenId())`. if (start < _startTokenId()) { start = _startTokenId(); } // Set `stop = min(stop, _currentIndex)`. if (stop > stopLimit) { stop = stopLimit; } uint256 tokenIdsMaxLength = balanceOf(owner); // Set `tokenIdsMaxLength = min(balanceOf(owner), stop - start)`, // to cater for cases where `balanceOf(owner)` is too big. if (start < stop) { uint256 rangeLength = stop - start; if (rangeLength < tokenIdsMaxLength) { tokenIdsMaxLength = rangeLength; } } else { tokenIdsMaxLength = 0; } uint256[] memory tokenIds = new uint256[](tokenIdsMaxLength); if (tokenIdsMaxLength == 0) { return tokenIds; } // We need to call `explicitOwnershipOf(start)`, // because the slot at `start` may not be initialized. TokenOwnership memory ownership = explicitOwnershipOf(start); address currOwnershipAddr; // If the starting slot exists (i.e. not burned), initialize `currOwnershipAddr`. // `ownership.address` will not be zero, as `start` is clamped to the valid token ID range. if (!ownership.burned) { currOwnershipAddr = ownership.addr; } for (uint256 i = start; i != stop && tokenIdsIdx != tokenIdsMaxLength; ++i) { ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } // Downsize the array to fit. assembly { mstore(tokenIds, tokenIdsIdx) } return tokenIds; } } /** * @dev Returns an array of token IDs owned by `owner`. * * This function scans the ownership mapping and is O(totalSupply) in complexity. * It is meant to be called off-chain. * * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into * multiple smaller scans if the collection is large enough to cause * an out-of-gas error (10K pfp collections should be fine). */ function tokensOfOwner(address owner) external view returns (uint256[] memory) { unchecked { uint256 tokenIdsIdx; address currOwnershipAddr; uint256 tokenIdsLength = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenIdsLength); TokenOwnership memory ownership; for (uint256 i = _startTokenId(); tokenIdsIdx <= tokenIdsLength; ++i) { ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } return tokenIds; } } } // File: contracts/MerkleProof.sol pragma solidity ^0.8.14; library MerkleProof { function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: contracts/Storage.sol pragma solidity ^0.8.14; abstract contract Storage { string public baseURI; // settings struct whitelist{ uint256 startTime; uint256 endTime; uint256 supply; uint256 sold; bytes32 root; } mapping(uint256 => whitelist) public whitelistRoot; mapping(uint256 => mapping(string => bool)) public isWhitelistFor; uint256 public maxMint = 0; uint256 public status = 0; struct rate { uint256 cost; uint256 total; uint256 sold; bool valid; } mapping (uint256 => mapping (string => rate)) public rates; uint256 public discount; uint256 public perTransactionLimit; mapping(uint256 => mapping(address => uint256)) public _userBought; mapping(address => bool) _isAllowAddress; address gasCollector; mapping (string => mapping(uint256 => uint256[])) public _existingTokenIds; uint256[] tempArray; event _mintCommon(address userAddress, string rarity, uint size,uint256 start, uint256 end, uint amount, uint price, bool isDiscount); event _mintLand(address userAddress, string rarity, uint size, uint256 start, uint256 end, uint amount, uint price, bool isDiscount); event NFTLockStatus(uint256[] tokenIds, bool status); event TransferLand(uint256[] tokenIds, address to, uint amount, uint price); event LockGasPaid(uint256[] tokenIds, address from, uint256 price, uint256 dbId); event UnLockGasPaid(uint256[] tokenIds, address from, uint256 price, uint256 dbId); //modifiers modifier checkSupply(uint256 _mintAmount, uint256 _size, string memory rarity) { uint256 s = rates[_size][rarity].sold; //Check Validity of land as per size require(rates[_size][rarity].valid, "XanaLand: Plot size not valid" ); //To check if contract has started sale on not require(status != 0, "XanaLand: Sale not started yet." ); require(_mintAmount > 0, "XanaLand: Amount is Zero" ); require(_mintAmount <= maxMint, "XanaLand: Amount exceeded in params" ); require(s + _mintAmount <= rates[_size][rarity].total, "XanaLand: Max Limit Reached for Common" ); require(_mintAmount <= perTransactionLimit, "XanaLand: Per transaction limit exceed" ); delete s; _; } } // File: contracts/Land.sol pragma solidity ^0.8.14; contract XANALand is ProxyBaseStorage, ERC721AQueryable, Ownable, ReentrancyGuard, Storage { using Strings for uint256; using Address for address; constructor( string memory _name, string memory _symbol ) ERC721A(_name, _symbol){} function mintNFT(address to,uint256 _mintAmount, string memory rarity, uint256 _size, bool isDiscount) internal { //Minting Land NFTs as per sent amount above (uint256 start, uint256 end) =_safeMint(to,_mintAmount); rates[_size][rarity].sold+=_mintAmount; emit _mintLand(to, rarity, _size, start, end, _mintAmount,msg.value,isDiscount); } function calculateDiscount(uint256 _size, string memory rarity) public view returns(uint256) { return SafeMath.sub(rates[_size][rarity].cost, SafeMath.div(SafeMath.mul(rates[_size][rarity].cost,discount), 100)); } //Discounted Mint Function function mintDiscountCommon(uint256 _mintAmount, bytes32[] calldata proof) checkSupply(_mintAmount,4, "Common") external payable { string memory rarity = "Common"; uint256 _size=1; //Check user buy limit merkle tree require(checkWhiteList(_mintAmount, proof, 4, true), "XanaLand: Not whitelisted"); _userBought[4][msg.sender] += _mintAmount; //check user purchase amount require(msg.value >= SafeMath.mul(calculateDiscount(_size,rarity),_mintAmount), "XanaLand: Paid amount insufficient"); mintNFT(msg.sender,_mintAmount, rarity, _size, true); } function checkWhiteList( uint256 _mintAmount, bytes32[] calldata proof, uint256 whitelistType, bool isLimit) nonReentrant internal returns (bool){ require(whitelistRoot[whitelistType].startTime <= block.timestamp, "Xanaland: not open"); require(whitelistRoot[whitelistType].endTime >= block.timestamp, "Xanaland: sale ended"); // require(whitelistRoot[whitelistType].supply >= whitelistRoot[whitelistType].sold + _mintAmount, "Xanaland: whitelist sold out"); uint256 userBuyCount = isLimit ? _userBought[whitelistType][msg.sender] + _mintAmount : 0; whitelistRoot[whitelistType].sold += _mintAmount; return status != 1 || isWhitelisted(msg.sender, proof, userBuyCount, whitelistType); } function setPremintTokenIds(uint256[] memory tokenIds, string memory rarity, uint256 _size) onlyOwner public { _existingTokenIds[rarity][_size] = tokenIds; } //Mint Common Category function mintLand(string memory rarity,uint256 _mintAmount, uint256 _size, bytes32[] calldata proof, bool isLimit, uint256 whitelistType) checkSupply(_mintAmount,_size, rarity) external payable { require(rates[_size][rarity].valid, "XanaLand: Plot size not valid" ); require(isWhitelistFor[whitelistType][rarity], "XanaLand: Invalid"); if(status == 2) require(whitelistType == 0, "XanaLand: only public sale"); else require(whitelistType != 0, "XanaLand: "); require(checkWhiteList(_mintAmount, proof, whitelistType, isLimit), "XanaLand: Not whitelisted"); //Check user buy limit merkle t _userBought[whitelistType][msg.sender] += _mintAmount; //check user purchase amount require(msg.value >= SafeMath.mul(rates[_size][rarity].cost,_mintAmount), "XanaLand: Paid amount insufficient"); //Minting Land NFTs as per sent amount above if(_existingTokenIds[rarity][_size].length > 0 && _existingTokenIds[rarity][_size].length >= _mintAmount ){ landTransferFrom(rarity, _size, _mintAmount); }else { mintNFT(msg.sender,_mintAmount, rarity, _size, false); } } function landTransferFrom(string memory rarity, uint256 _size, uint256 _mintAmount) internal { uint256 temoTokenId; rates[_size][rarity].sold+=_mintAmount; for (uint256 index = 0; index< _mintAmount; index++) { temoTokenId = _existingTokenIds[rarity][_size][_existingTokenIds[rarity][_size].length -1]; tempArray.push(temoTokenId); _transferAdmin(0xB071BaC7A7139a5427B234BeF33Da5c9b61b9Efd, msg.sender, temoTokenId); _existingTokenIds[rarity][_size].pop(); } emit TransferLand(tempArray, msg.sender, _mintAmount, 0); delete tempArray; } //Only for staking Users function freeMint(uint256 _mintAmount, bytes32[] calldata proof) checkSupply(_mintAmount, 5, "Common") external{ string memory rarity = "Common"; uint256 _size=1; //To check allowed buy amount from staking per user require(checkWhiteList(_mintAmount, proof, 5, true), "XanaLand: Not whitelisted"); _userBought[5][msg.sender] += _mintAmount; //Minting Land NFTs as per sent amount above mintNFT(msg.sender,_mintAmount, rarity, _size, false); } // internal function _baseURI() internal override view virtual returns (string memory) { return baseURI; } function tokenURI(uint256 tokenId) public override view virtual returns (string memory) { require(_exists(tokenId), "ERC721Metadata: Nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : ""; } //Merkle tree whitelist methods function isWhitelisted(address account, bytes32[] calldata proof, uint256 quantity, uint256 typeWhitelist) public view returns (bool) { return _verify(_leaf(account, quantity), proof, whitelistRoot[typeWhitelist].root); } function _leaf(address account, uint256 quantity) public pure returns (bytes32) { return keccak256(abi.encode(account, quantity)); } function _verify(bytes32 leaf,bytes32[] memory proof,bytes32 root) internal pure returns (bool) { return MerkleProof.verify(proof, root, leaf); } //only owner methods //set whitelist function setWhitelistRoot(bytes32 newWhitelistroot, uint256 typeWhitelist, uint256 startTime, uint256 endTime, uint256 supply, string[] memory rarties) public onlyOwner { whitelistRoot[typeWhitelist] = whitelist(startTime, endTime, supply, whitelistRoot[typeWhitelist].sold, newWhitelistroot); for(uint256 index =0; index < rarties.length; index++){ isWhitelistFor[typeWhitelist][rarties[index]] = true; } } function removeWhiteList(uint256 typeWhitelist, string memory rarity) public onlyOwner { isWhitelistFor[typeWhitelist][rarity] = false; } //Set max supply of land ( = 75330 ) function setMaxMintAmount(uint256 _newMaxMintAmount) public onlyOwner { maxMint = _newMaxMintAmount; } //OffCHain metaData uri settings function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } //Set discount percentage function setDiscount(uint256 percentage) public onlyOwner { discount = percentage; } //0 = Sale not started //1 = Only whitelisted/Staking //2 = Public Sale function setSaleStatus(uint256 _status) public onlyOwner { status = _status; } function setPerTransactionLimit(uint256 limit) public onlyOwner { perTransactionLimit = limit; } //Set max supply, cost per category and size. function setRate(uint256 _size, uint256 _cost, uint256 _total, string memory _rarity) public onlyOwner { rates[_size][_rarity].cost = _cost; rates[_size][_rarity].total = _total; rates[_size][_rarity].valid = true; } function setLockUp(uint256[] memory _nftIds,uint256[] memory _timestamps) public onlyOwner{ for(uint256 i=0;i< _nftIds.length;i++){ _nftLockup[_nftIds[i]] = _timestamps[i]; } } function setTransferAllowed(address _add, bool status) onlyOwner public { require(isTransferAllowed[_add] != status, "Xanaland: status already set"); isTransferAllowed[_add] = status; } //to withdraw funds function withdraw() public onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } function mintAdmin(address to_, uint256 countNFTs_, uint256 _size, string memory rarity) checkSupply(countNFTs_,_size, rarity) public onlyOwner { mintNFT(to_,countNFTs_, rarity, _size, false); } function publishLand(uint256 tokenId) public { require(ERC721A.ownerOf(tokenId) == msg.sender, "no the owner"); require(_nftLockup[tokenId] != 26783449060000, "already published"); _nftLockup[tokenId] = 26783449060000; } function unPublishLand(uint256 tokenId) public { require(ERC721A.ownerOf(tokenId) == msg.sender, "no the owner"); require(_nftLockup[tokenId] == 26783449060000, "world not published"); _nftLockup[tokenId] = 0; } function lockNFTBulk(uint256[] memory tokenIds, bool status) external { require(_isAllowAddress[msg.sender], "not authorize"); if(status){ for (uint256 index = 0; index < tokenIds.length; index++) { _nftLockup[tokenIds[index]] = 26783449060000; } }else { for (uint256 index = 0; index < tokenIds.length; index++) { _nftLockup[tokenIds[index]] = 0; } } emit NFTLockStatus(tokenIds, status); } function unLockGas(uint256[] memory tokenIds, uint256 dbId) payable external { uint256 depositAmount = msg.value; require(tokenIds.length <= 5, "not more than 5 token ids"); (bool success,) = payable(gasCollector).call{value: depositAmount}(""); if(!success) revert("unable to receive eth"); emit UnLockGasPaid(tokenIds,msg.sender,depositAmount, dbId); } function lockGas(uint256[] memory tokenIds, uint256 dbId) payable external { uint256 depositAmount = msg.value; require(tokenIds.length <= 5, "not more than 5 token ids"); (bool success,) = payable(gasCollector).call{value: depositAmount}(""); if(!success) revert("unable to receive eth"); emit LockGasPaid(tokenIds,msg.sender,depositAmount, dbId); } function setGasCollector(address _add) onlyOwner external { gasCollector = _add; } function addAllowAddress(address _add) onlyOwner external { _isAllowAddress[_add] = true; } function removeAllowAddress(address _add) onlyOwner external { _isAllowAddress[_add] = false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dbId","type":"uint256"}],"name":"LockGasPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collection","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"string","name":"tokenURI","type":"string"}],"name":"MintWithTokenURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"NFTLockStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"TransferLand","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dbId","type":"uint256"}],"name":"UnLockGasPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"string","name":"rarity","type":"string"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"end","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isDiscount","type":"bool"}],"name":"_mintCommon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"string","name":"rarity","type":"string"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"end","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isDiscount","type":"bool"}],"name":"_mintLand","type":"event"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_existingTokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"_leaf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_nftLockup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"_userBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"addAllowAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_size","type":"uint256"},{"internalType":"string","name":"rarity","type":"string"}],"name":"calculateDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"funcSignatures","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTransferAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"name":"isWhitelistFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"typeWhitelist","type":"uint256"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"dbId","type":"uint256"}],"name":"lockGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"lockNFTBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"countNFTs_","type":"uint256"},{"internalType":"uint256","name":"_size","type":"uint256"},{"internalType":"string","name":"rarity","type":"string"}],"name":"mintAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintDiscountCommon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"rarity","type":"string"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"uint256","name":"_size","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bool","name":"isLimit","type":"bool"},{"internalType":"uint256","name":"whitelistType","type":"uint256"}],"name":"mintLand","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"perTransactionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"publishLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"name":"rates","outputs":[{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"sold","type":"uint256"},{"internalType":"bool","name":"valid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"removeAllowAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeWhitelist","type":"uint256"},{"internalType":"string","name":"rarity","type":"string"}],"name":"removeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"setGasCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_nftIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_timestamps","type":"uint256[]"}],"name":"setLockUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setPerTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"string","name":"rarity","type":"string"},{"internalType":"uint256","name":"_size","type":"uint256"}],"name":"setPremintTokenIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_size","type":"uint256"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"string","name":"_rarity","type":"string"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_status","type":"uint256"}],"name":"setSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setTransferAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newWhitelistroot","type":"bytes32"},{"internalType":"uint256","name":"typeWhitelist","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"string[]","name":"rarties","type":"string[]"}],"name":"setWhitelistRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"dbId","type":"uint256"}],"name":"unLockGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unPublishLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistRoot","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"sold","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060135560006014553480156200001b57600080fd5b5060405162004fb338038062004fb38339810160408190526200003e9162000194565b818160066200004e83826200028d565b5060076200005d82826200028d565b505060016004555062000070336200007d565b50506001600f5562000359565b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000f757600080fd5b81516001600160401b0380821115620001145762000114620000cf565b604051601f8301601f19908116603f011681019082821181831017156200013f576200013f620000cf565b816040528381526020925086838588010111156200015c57600080fd5b600091505b8382101562000180578582018301518183018401529082019062000161565b600093810190920192909252949350505050565b60008060408385031215620001a857600080fd5b82516001600160401b0380821115620001c057600080fd5b620001ce86838701620000e5565b93506020850151915080821115620001e557600080fd5b50620001f485828601620000e5565b9150509250929050565b600181811c908216806200021357607f821691505b6020821081036200023457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200028857600081815260208120601f850160051c81016020861015620002635750805b601f850160051c820191505b8181101562000284578281556001016200026f565b5050505b505050565b81516001600160401b03811115620002a957620002a9620000cf565b620002c181620002ba8454620001fe565b846200023a565b602080601f831160018114620002f95760008415620002e05750858301515b600019600386901b1c1916600185901b17855562000284565b600085815260208120601f198616915b828110156200032a5788860151825594840194600190910190840162000309565b5085821015620003495787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614c4a80620003696000396000f3fe6080604052600436106103ad5760003560e01c80636b6f4a9d116101e7578063a22cb4651161010d578063cbc28116116100a0578063e2f36dce1161006f578063e2f36dce14610bf7578063e985e9c514610c17578063f29f15af14610c60578063f2fde38b14610c8057600080fd5b8063cbc2811614610b91578063cdb6751a14610ba4578063d3e0fbd414610bc4578063dabd271914610bd757600080fd5b8063bc8d4cd6116100dc578063bc8d4cd614610b04578063c0b5ba3b14610b24578063c23dc68f14610b44578063c87b56dd14610b7157600080fd5b8063a22cb46514610a84578063a8b8042814610aa4578063b61d0c6314610ac4578063b88d4fde14610ae457600080fd5b80638462151c1161018557806395d89b411161015457806395d89b41146109f957806399a2557a14610a0e5780639f4dc6fd14610a2e578063a0a2daf014610a4e57600080fd5b80638462151c146108fb5780638822048e146109285780638acdad75146109585780638da5cb5b146109db57600080fd5b806370a08231116101c157806370a0823114610890578063715018a6146108b057806374f32b3e146108c55780637501f741146108e557600080fd5b80636b6f4a9d146108455780636c0360eb1461085b5780636f27cf641461087057600080fd5b806327a8c936116102d757806350572df21161026a578063621fb96c11610239578063621fb96c146107c2578063631e4b85146107ef5780636352211e1461080557806369ff1a811461082557600080fd5b806350572df21461070957806355f804b3146107555780635bbb2177146107755780635e31fd0c146107a257600080fd5b80633ccfd60b116102a65780633ccfd60b146106a157806341e54ade146106b657806342842e0e146106c9578063456904a5146106e957600080fd5b806327a8c936146105dc5780632e8adc21146105fc5780633277f29b1461060f578063331f319c1461068157600080fd5b8063114fa62e1161034f57806322c64f2f1161031e57806322c64f2f1461055c57806323b872dd1461057c5780632529590e1461059c57806326a6860a146105bc57600080fd5b8063114fa62e146104e9578063126fe62d1461050957806318160ddd14610529578063200d2ed21461054657600080fd5b8063081812fc1161038b578063081812fc1461042b578063088a4ed0146104635780630935ef1014610483578063095ea7b3146104c957600080fd5b806301c16260146103b257806301ffc9a7146103d457806306fdde0314610409575b600080fd5b3480156103be57600080fd5b506103d26103cd366004613c8a565b610ca0565b005b3480156103e057600080fd5b506103f46103ef366004613d03565b610d16565b60405190151581526020015b60405180910390f35b34801561041557600080fd5b5061041e610d68565b6040516104009190613d70565b34801561043757600080fd5b5061044b610446366004613d83565b610dfa565b6040516001600160a01b039091168152602001610400565b34801561046f57600080fd5b506103d261047e366004613d83565b610e3e565b34801561048f57600080fd5b506104bb61049e366004613db8565b601860209081526000928352604080842090915290825290205481565b604051908152602001610400565b3480156104d557600080fd5b506103d26104e4366004613de4565b610e4b565b3480156104f557600080fd5b506103d2610504366004613e85565b610f1c565b34801561051557600080fd5b506103d2610524366004613ef1565b610f67565b34801561053557600080fd5b5060055460045403600019016104bb565b34801561055257600080fd5b506104bb60145481565b34801561056857600080fd5b506103d2610577366004613f0c565b610f90565b34801561058857600080fd5b506103d2610597366004613f6c565b61111a565b3480156105a857600080fd5b506104bb6105b7366004613fa8565b61116a565b3480156105c857600080fd5b5061041e6105d7366004613d83565b6111ef565b3480156105e857600080fd5b506103d26105f7366004613d83565b61129b565b6103d261060a366004613fe4565b6112a8565b34801561061b57600080fd5b5061065961062a366004613d83565b601160205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a001610400565b34801561068d57600080fd5b506103d261069c366004614028565b6113d5565b3480156106ad57600080fd5b506103d2611488565b6103d26106c43660046140ad565b6114e8565b3480156106d557600080fd5b506103d26106e4366004613f6c565b61174e565b3480156106f557600080fd5b506103d2610704366004613fa8565b6117ae565b34801561071557600080fd5b506103f4610724366004613fa8565b6012602090815260009283526040909220815180830184018051928152908401929093019190912091525460ff1681565b34801561076157600080fd5b506103d26107703660046140f8565b6117f6565b34801561078157600080fd5b5061079561079036600461412c565b61180e565b6040516104009190614160565b3480156107ae57600080fd5b506103d26107bd366004613d83565b6118d4565b3480156107ce57600080fd5b506104bb6107dd366004613d83565b600c6020526000908152604090205481565b3480156107fb57600080fd5b506104bb60175481565b34801561081157600080fd5b5061044b610820366004613d83565b61198d565b34801561083157600080fd5b506103d2610840366004613ef1565b61199f565b34801561085157600080fd5b506104bb60165481565b34801561086757600080fd5b5061041e6119cb565b34801561087c57600080fd5b506103d261088b366004613ef1565b6119d8565b34801561089c57600080fd5b506104bb6108ab366004613ef1565b611a02565b3480156108bc57600080fd5b506103d2611a50565b3480156108d157600080fd5b506103f46108e03660046141ca565b611a64565b3480156108f157600080fd5b506104bb60135481565b34801561090757600080fd5b5061091b610916366004613ef1565b611ac6565b6040516104009190614269565b34801561093457600080fd5b506103f4610943366004613ef1565b600d6020526000908152604090205460ff1681565b34801561096457600080fd5b506109b9610973366004613fa8565b6015602090815260009283526040909220815180830184018051928152908401929093019190912091528054600182015460028301546003909301549192909160ff1684565b6040805194855260208501939093529183015215156060820152608001610400565b3480156109e757600080fd5b50600e546001600160a01b031661044b565b348015610a0557600080fd5b5061041e611c0b565b348015610a1a57600080fd5b5061091b610a2936600461427c565b611c1a565b348015610a3a57600080fd5b506103d2610a49366004613d83565b611de5565b348015610a5a57600080fd5b5061044b610a69366004613d03565b6000602081905290815260409020546001600160a01b031681565b348015610a9057600080fd5b506103d2610a9f3660046142bf565b611ea4565b348015610ab057600080fd5b506103d2610abf3660046142bf565b611f74565b348015610ad057600080fd5b506104bb610adf366004613de4565b612017565b348015610af057600080fd5b506103d2610aff3660046142e9565b612054565b348015610b1057600080fd5b506103d2610b1f366004614358565b6120e4565b348015610b3057600080fd5b506104bb610b3f36600461439c565b612225565b348015610b5057600080fd5b50610b64610b5f366004613d83565b61226d565b60405161040091906143e9565b348015610b7d57600080fd5b5061041e610b8c366004613d83565b612327565b6103d2610b9f366004613fe4565b6123e3565b348015610bb057600080fd5b506103d2610bbf36600461441e565b612503565b6103d2610bd23660046144fd565b6125ee565b348015610be357600080fd5b506103d2610bf2366004613d83565b6129f0565b348015610c0357600080fd5b506103d2610c123660046140ad565b6129fd565b348015610c2357600080fd5b506103f4610c32366004614594565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b348015610c6c57600080fd5b506103d2610c7b366004613d83565b612c26565b348015610c8c57600080fd5b506103d2610c9b366004613ef1565b612c33565b610ca8612ca9565b60005b8251811015610d1157818181518110610cc657610cc66145be565b6020026020010151600c6000858481518110610ce457610ce46145be565b60200260200101518152602001908152602001600020819055508080610d09906145ea565b915050610cab565b505050565b60006001600160e01b031982166380ac58cd60e01b1480610d4757506001600160e01b03198216635b5e139f60e01b145b80610d6257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060068054610d7790614603565b80601f0160208091040260200160405190810160405280929190818152602001828054610da390614603565b8015610df05780601f10610dc557610100808354040283529160200191610df0565b820191906000526020600020905b815481529060010190602001808311610dd357829003601f168201915b5050505050905090565b6000610e0582612d03565b610e22576040516333d1c03960e21b815260040160405180910390fd5b506000908152600a60205260409020546001600160a01b031690565b610e46612ca9565b601355565b6001600160a01b0382166000908152600d6020526040902054829060ff16610e8e5760405162461bcd60e51b8152600401610e859061463d565b60405180910390fd5b6000610e998361198d565b9050806001600160a01b0316846001600160a01b031603610ecd5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610eed5750610eeb8133610c32565b155b15610f0b576040516367d9dca160e11b815260040160405180910390fd5b610f16848483612d3c565b50505050565b610f24612ca9565b82601b83604051610f359190614674565b908152602001604051809103902060008381526020019081526020016000209080519060200190610f16929190613b3c565b610f6f612ca9565b6001600160a01b03166000908152601960205260409020805460ff19169055565b6000828152601560205260408082209051859285928592610fb2908490614674565b90815260200160405180910390206002015490506015600084815260200190815260200160002082604051610fe79190614674565b9081526040519081900360200190206003015460ff166110195760405162461bcd60e51b8152600401610e8590614690565b60145460000361103b5760405162461bcd60e51b8152600401610e85906146c7565b6000841161105b5760405162461bcd60e51b8152600401610e85906146fe565b60135484111561107d5760405162461bcd60e51b8152600401610e8590614735565b60008381526015602052604090819020905161109a908490614674565b908152604051908190036020019020600101546110b78583614778565b11156110d55760405162461bcd60e51b8152600401610e859061478b565b6017548411156110f75760405162461bcd60e51b8152600401610e85906147d1565b506000611102612ca9565b611110888887896000612d98565b5050505050505050565b6000818152600c60205260409020544210158061114357506000818152600c6020526040902054155b61115f5760405162461bcd60e51b8152600401610e8590614817565b610d11838383612e3f565b60008281526015602052604080822090516111e8919061118b908590614674565b9081526020016040518091039020600001546111e36111dc60156000888152602001908152602001600020866040516111c49190614674565b9081526040519081900360200190205460165461304b565b6064613057565b613063565b9392505050565b600181815481106111ff57600080fd5b90600052602060002001600091509050805461121a90614603565b80601f016020809104026020016040519081016040528092919081815260200182805461124690614603565b80156112935780601f1061126857610100808354040283529160200191611293565b820191906000526020600020905b81548152906001019060200180831161127657829003601f168201915b505050505081565b6112a3612ca9565b601755565b81513490600510156112f85760405162461bcd60e51b81526020600482015260196024820152786e6f74206d6f7265207468616e203520746f6b656e2069647360381b6044820152606401610e85565b601a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611345576040519150601f19603f3d011682016040523d82523d6000602084013e61134a565b606091505b50509050806113935760405162461bcd60e51b81526020600482015260156024820152740eadcc2c4d8ca40e8de40e4cac6cad2ecca40cae8d605b1b6044820152606401610e85565b7ecdb41d94af2c216b4786938844cfdc35283f2aefae511d22a041792d78abe1843384866040516113c7949392919061485b565b60405180910390a150505050565b6113dd612ca9565b8260156000868152602001908152602001600020826040516113ff9190614674565b908152604080516020928190038301812093909355600087815260159092529020839161142d908490614674565b90815260408051918290036020908101832060019081019490945560008881526015909152209061145f908490614674565b908152604051908190036020019020600301805491151560ff1990921691909117905550505050565b611490612ca9565b604051600090339047908381818185875af1925050503d80600081146114d2576040519150601f19603f3d011682016040523d82523d6000602084013e6114d7565b606091505b50509050806114e557600080fd5b50565b8260046040518060400160405280600681526020016521b7b6b6b7b760d11b8152506000601560008481526020019081526020016000208260405161152d9190614674565b908152602001604051809103902060020154905060156000848152602001908152602001600020826040516115629190614674565b9081526040519081900360200190206003015460ff166115945760405162461bcd60e51b8152600401610e8590614690565b6014546000036115b65760405162461bcd60e51b8152600401610e85906146c7565b600084116115d65760405162461bcd60e51b8152600401610e85906146fe565b6013548411156115f85760405162461bcd60e51b8152600401610e8590614735565b600083815260156020526040908190209051611615908490614674565b908152604051908190036020019020600101546116328583614778565b11156116505760405162461bcd60e51b8152600401610e859061478b565b6017548411156116725760405162461bcd60e51b8152600401610e85906147d1565b5060408051808201909152600681526521b7b6b6b7b760d11b602082015260009060016116a389898960048561306f565b6116bf5760405162461bcd60e51b8152600401610e8590614893565b3360009081527f5b650d93b25a5c652bc6f9215f522b521daf6d36977dcec1343c2a8310b869d66020526040812080548b92906116fd908490614778565b909155506117169050611710828461116a565b8a61304b565b3410156117355760405162461bcd60e51b8152600401610e85906148ca565b611743338a84846001612d98565b505050505050505050565b6000818152600c60205260409020544210158061177757506000818152600c6020526040902054155b6117935760405162461bcd60e51b8152600401610e8590614817565b610d1183838360405180602001604052806000815250612054565b6117b6612ca9565b60008281526012602052604080822090516117d2908490614674565b908152604051908190036020019020805491151560ff199092169190911790555050565b6117fe612ca9565b601061180a8282614952565b5050565b80516060906000816001600160401b0381111561182d5761182d613bb6565b60405190808252806020026020018201604052801561187857816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161184b5790505b50905060005b8281146118cc576118a785828151811061189a5761189a6145be565b602002602001015161226d565b8282815181106118b9576118b96145be565b602090810291909101015260010161187e565b509392505050565b336118de8261198d565b6001600160a01b0316146119235760405162461bcd60e51b815260206004820152600c60248201526b3737903a34329037bbb732b960a11b6044820152606401610e85565b6000818152600c602052604090205465185c01f792a01461197c5760405162461bcd60e51b81526020600482015260136024820152721ddbdc9b19081b9bdd081c1d589b1a5cda1959606a1b6044820152606401610e85565b6000908152600c6020526040812055565b6000611998826131fd565b5192915050565b6119a7612ca9565b6001600160a01b03166000908152601960205260409020805460ff19166001179055565b6010805461121a90614603565b6119e0612ca9565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b038216611a2b576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600960205260409020546001600160401b031690565b611a58612ca9565b611a626000613324565b565b6000611abc611a738785612017565b8686808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250888152601160205260409020600401549250613376915050565b9695505050505050565b60606000806000611ad685611a02565b90506000816001600160401b03811115611af257611af2613bb6565b604051908082528060200260200182016040528015611b1b578160200160208202803683370190505b509050611b41604080516060810182526000808252602082018190529181019190915290565b60015b838611611bff57600081815260086020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529250611bf75781516001600160a01b031615611bb857815194505b876001600160a01b0316856001600160a01b031603611bf75780838780600101985081518110611bea57611bea6145be565b6020026020010181815250505b600101611b44565b50909695505050505050565b606060078054610d7790614603565b606081831115611c3d57604051631960ccad60e11b815260040160405180910390fd5b600454600090600101611c4e600190565b851015611c5a57600194505b80841115611c66578093505b6000611c7187611a02565b905084861015611c905785850381811015611c8a578091505b50611c94565b5060005b6000816001600160401b03811115611cae57611cae613bb6565b604051908082528060200260200182016040528015611cd7578160200160208202803683370190505b50905081600003611ced5793506111e892505050565b6000611cf88861226d565b905060008160400151611d09575080515b885b888114158015611d1b5750848714155b15611dd457600081815260086020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529350611dcc5782516001600160a01b031615611d8d57825191505b8a6001600160a01b0316826001600160a01b031603611dcc5780848880600101995081518110611dbf57611dbf6145be565b6020026020010181815250505b600101611d0b565b505050928352509095945050505050565b33611def8261198d565b6001600160a01b031614611e345760405162461bcd60e51b815260206004820152600c60248201526b3737903a34329037bbb732b960a11b6044820152606401610e85565b6000818152600c602052604090205465185c01f792a003611e8b5760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c1d589b1a5cda1959607a1b6044820152606401610e85565b6000908152600c6020526040902065185c01f792a09055565b6001600160a01b0382166000908152600d6020526040902054829060ff16611ede5760405162461bcd60e51b8152600401610e859061463d565b336001600160a01b03841603611f075760405163b06307db60e01b815260040160405180910390fd5b336000818152600b602090815260408083206001600160a01b03881680855290835292819020805460ff191687151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611f7c612ca9565b6001600160a01b0382166000908152600d602052604090205481151560ff909116151503611fec5760405162461bcd60e51b815260206004820152601c60248201527f58616e616c616e643a2073746174757320616c726561647920736574000000006044820152606401610e85565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b604080516001600160a01b038416602082015290810182905260009060600160405160208183030381529060405280519060200120905092915050565b6000828152600c60205260409020544210158061207d57506000828152600c6020526040902054155b6120995760405162461bcd60e51b8152600401610e8590614817565b6120a4848484612e3f565b6001600160a01b0383163b151580156120c657506120c48484848461338b565b155b15610f16576040516368d2bf6b60e11b815260040160405180910390fd5b3360009081526019602052604090205460ff166121335760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420617574686f72697a6560981b6044820152606401610e85565b80156121955760005b825181101561218f5765185c01f792a0600c6000858481518110612162576121626145be565b60200260200101518152602001908152602001600020819055508080612187906145ea565b91505061213c565b506121e8565b60005b82518110156121e6576000600c60008584815181106121b9576121b96145be565b602002602001015181526020019081526020016000208190555080806121de906145ea565b915050612198565b505b7fc55a0de0f0b6c1b85d9c52787d91c8068c5a331e926fb9e3c575b435e97fe14f8282604051612219929190614a11565b60405180910390a15050565b8251602081850181018051601b8252928201828701209290525260008281526040902080548290811061225757600080fd5b9060005260206000200160009250925050505481565b604080516060808201835260008083526020808401829052838501829052845192830185528183528201819052928101929092529060018310806122b357506004548310155b156122be5792915050565b50600082815260086020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16158015928201929092529061231e5792915050565b6111e8836131fd565b606061233282612d03565b6123885760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656044820152603760f91b6064820152608401610e85565b6000612392613476565b905060008151116123b257604051806020016040528060008152506111e8565b806123bc84613485565b6040516020016123cd929190614a35565b6040516020818303038152906040529392505050565b81513490600510156124335760405162461bcd60e51b81526020600482015260196024820152786e6f74206d6f7265207468616e203520746f6b656e2069647360381b6044820152606401610e85565b601a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612480576040519150601f19603f3d011682016040523d82523d6000602084013e612485565b606091505b50509050806124ce5760405162461bcd60e51b81526020600482015260156024820152740eadcc2c4d8ca40e8de40e4cac6cad2ecca40cae8d605b1b6044820152606401610e85565b7f9d3fc7c6858672d62378c66aabf170a70b98ed6283ed4d2367fa23ae47c6cff8843384866040516113c7949392919061485b565b61250b612ca9565b6040805160a081018252858152602080820186815282840186815260008a8152601180855295812060038101805460608801908152608088018f81528e855298909652955181559251600184015590516002830155915190925591516004909101555b81518110156125e55760016012600088815260200190815260200160002083838151811061259e5761259e6145be565b60200260200101516040516125b39190614674565b908152604051908190036020019020805491151560ff19909216919091179055806125dd816145ea565b91505061256e565b50505050505050565b6000858152601560205260408082209051889288928b92612610908490614674565b908152602001604051809103902060020154905060156000848152602001908152602001600020826040516126459190614674565b9081526040519081900360200190206003015460ff166126775760405162461bcd60e51b8152600401610e8590614690565b6014546000036126995760405162461bcd60e51b8152600401610e85906146c7565b600084116126b95760405162461bcd60e51b8152600401610e85906146fe565b6013548411156126db5760405162461bcd60e51b8152600401610e8590614735565b6000838152601560205260409081902090516126f8908490614674565b908152604051908190036020019020600101546127158583614778565b11156127335760405162461bcd60e51b8152600401610e859061478b565b6017548411156127555760405162461bcd60e51b8152600401610e85906147d1565b506000888152601560205260408082209051612772908d90614674565b9081526040519081900360200190206003015460ff166127a45760405162461bcd60e51b8152600401610e8590614690565b6000858152601260205260409081902090516127c1908d90614674565b9081526040519081900360200190205460ff166128145760405162461bcd60e51b815260206004820152601160248201527016185b9853185b990e88125b9d985b1a59607a1b6044820152606401610e85565b60145460020361287157841561286c5760405162461bcd60e51b815260206004820152601a60248201527f58616e614c616e643a206f6e6c79207075626c69632073616c650000000000006044820152606401610e85565b6128ae565b846000036128ae5760405162461bcd60e51b815260206004820152600a60248201526902c30b730a630b7321d160b51b6044820152606401610e85565b6128bb8a8989888a61306f565b6128d75760405162461bcd60e51b8152600401610e8590614893565b6000858152601860209081526040808320338452909152812080548c9290612900908490614778565b909155505060008981526015602052604090819020905161293d9190612927908e90614674565b908152604051908190036020019020548b61304b565b34101561295c5760405162461bcd60e51b8152600401610e85906148ca565b6000601b8c60405161296e9190614674565b908152604080516020928190038301902060008d815292529020541180156129c0575089601b8c6040516129a29190614674565b908152604080516020928190038301902060008d8152925290205410155b156129d5576129d08b8a8c613585565b6129e3565b6129e3338b8d8c6000612d98565b5050505050505050505050565b6129f8612ca9565b601655565b8260056040518060400160405280600681526020016521b7b6b6b7b760d11b81525060006015600084815260200190815260200160002082604051612a429190614674565b90815260200160405180910390206002015490506015600084815260200190815260200160002082604051612a779190614674565b9081526040519081900360200190206003015460ff16612aa95760405162461bcd60e51b8152600401610e8590614690565b601454600003612acb5760405162461bcd60e51b8152600401610e85906146c7565b60008411612aeb5760405162461bcd60e51b8152600401610e85906146fe565b601354841115612b0d5760405162461bcd60e51b8152600401610e8590614735565b600083815260156020526040908190209051612b2a908490614674565b90815260405190819003602001902060010154612b478583614778565b1115612b655760405162461bcd60e51b8152600401610e859061478b565b601754841115612b875760405162461bcd60e51b8152600401610e85906147d1565b5060408051808201909152600681526521b7b6b6b7b760d11b60208201526000906001612bb889898960058561306f565b612bd45760405162461bcd60e51b8152600401610e8590614893565b3360009081527f2288853b49db4f36075bf4a8cfdae4e5e3b39b7b03937d0a9148b051a6f64c5c6020526040812080548b9290612c12908490614778565b909155506117439050338a84846000612d98565b612c2e612ca9565b601455565b612c3b612ca9565b6001600160a01b038116612ca05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e85565b6114e581613324565b600e546001600160a01b03163314611a625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e85565b600081600111158015612d17575060045482105b8015610d62575050600090815260086020526040902054600160e01b900460ff161590565b6000828152600a602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600080612da58787613758565b91509150856015600086815260200190815260200160002086604051612dcb9190614674565b90815260200160405180910390206002016000828254612deb9190614778565b90915550506040517fc5e101581b86caaead7cd59d5856276f8289c3a689e5190e88cdf51a82b255b490612e2e90899088908890879087908d9034908c90614a64565b60405180910390a150505050505050565b336000818152600d602052604090205460ff16612e6e5760405162461bcd60e51b8152600401610e859061463d565b6000612e79836131fd565b9050846001600160a01b031681600001516001600160a01b031614612eb05760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0387161480612ece5750612ece8633610c32565b80612ee9575033612ede85610dfa565b6001600160a01b0316145b905080612f0957604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516612f3057604051633a954ecd60e21b815260040160405180910390fd5b612f3c60008588612d3c565b6001600160a01b038681166000908152600960209081526040808320805467ffffffffffffffff198082166001600160401b03928316600019018316179092558a86168086528386208054938416938316600190810184169490941790558a8652600890945282852080546001600160e01b031916909417600160a01b4290921691909102178355880180845292208054919390911661301057600454821461301057805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038b16171781555b50505083856001600160a01b0316876001600160a01b0316600080516020614bf583398151915260405160405180910390a45b505050505050565b60006111e88284614abe565b60006111e88284614aeb565b60006111e88284614aff565b60006002600f54036130c35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e85565b6002600f5560008381526011602052604090205442101561311b5760405162461bcd60e51b81526020600482015260126024820152712c30b730b630b7321d103737ba1037b832b760711b6044820152606401610e85565b6000838152601160205260409020600101544211156131735760405162461bcd60e51b815260206004820152601460248201527316185b985b185b990e881cd85b1948195b99195960621b6044820152606401610e85565b6000826131815760006131a6565b60008481526018602090815260408083203384529091529020546131a6908890614778565b9050866011600086815260200190815260200160002060030160008282546131ce9190614778565b909155505060145460011415806131ed57506131ed3387878488611a64565b6001600f55979650505050505050565b6040805160608101825260008082526020820181905291810191909152818060011115801561322d575060045481105b1561330b57600081815260086020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906133095780516001600160a01b0316156132a0579392505050565b5060001901600081815260086020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215613304579392505050565b6132a0565b505b604051636f96cda160e11b815260040160405180910390fd5b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000613383838386613781565b949350505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906133c0903390899088908890600401614b12565b6020604051808303816000875af19250505080156133fb575060408051601f3d908101601f191682019092526133f891810190614b45565b60015b613459573d808015613429576040519150601f19603f3d011682016040523d82523d6000602084013e61342e565b606091505b508051600003613451576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060108054610d7790614603565b6060816000036134ac5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156134d657806134c0816145ea565b91506134cf9050600a83614aeb565b91506134b0565b6000816001600160401b038111156134f0576134f0613bb6565b6040519080825280601f01601f19166020018201604052801561351a576020820181803683370190505b5090505b84156133835761352f600183614aff565b915061353c600a86614b62565b613547906030614778565b60f81b81838151811061355c5761355c6145be565b60200101906001600160f81b031916908160001a90535061357e600a86614aeb565b945061351e565b60008281526015602052604080822090518391906135a4908790614674565b908152602001604051809103902060020160008282546135c49190614778565b90915550600090505b8281101561370c57601b856040516135e59190614674565b908152604080519182900360209081018320600088815291522090600190601b90613611908990614674565b9081526040805160209281900383019020600089815292529020546136369190614aff565b81548110613646576136466145be565b6000918252602082200154601c805460018101825592527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21190910181905591506136a573b071bac7a7139a5427b234bef33da5c9b61b9efd3384613797565b601b856040516136b59190614674565b908152602001604051809103902060008581526020019081526020016000208054806136e3576136e3614b76565b600190038181906000526020600020016000905590558080613704906145ea565b9150506135cd565b507fd1a77fb0a2219bc1c0b23cf9b1d4411e792aac1eb1b916b999c930d7074315f6601c338460006040516137449493929190614b8c565b60405180910390a1610f16601c6000613b87565b600080613775848460405180602001604052806000815250613917565b915091505b9250929050565b60008261378e8584613ad0565b14949350505050565b60006137a2826131fd565b9050836001600160a01b031681600001516001600160a01b0316146137d95760405162a1148160e81b815260040160405180910390fd5b6001600160a01b03831661380057604051633a954ecd60e21b815260040160405180910390fd5b61380c60008386612d3c565b6001600160a01b038481166000908152600960209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255888616808652838620805493841693831660019081018416949094179055888652600890945282852080546001600160e01b031916909417600160a01b429092169190910217835586018084529220805491939091166138e05760045482146138e057805460208501516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038916171781555b50505081836001600160a01b0316856001600160a01b0316600080516020614bf583398151915260405160405180910390a4610f16565b60045460009081906001600160a01b03861661394557604051622e076360e81b815260040160405180910390fd5b846000036139665760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038616600081815260096020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168d0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168d01811690920217909155858452600890925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818701903b15613a7c575b60405182906001600160a01b038a1690600090600080516020614bf5833981519152908290a4613a45600089848060010195508961338b565b613a62576040516368d2bf6b60e11b815260040160405180910390fd5b808203613a0c578260045414613a7757600080fd5b613aaf565b5b6040516001830192906001600160a01b038a1690600090600080516020614bf5833981519152908290a4808203613a7d575b50600455806001600454613ac39190614aff565b9250925050935093915050565b600081815b84518110156118cc576000858281518110613af257613af26145be565b60200260200101519050808311613b185760008381526020829052604090209250613b29565b600081815260208490526040902092505b5080613b34816145ea565b915050613ad5565b828054828255906000526020600020908101928215613b77579160200282015b82811115613b77578251825591602001919060010190613b5c565b50613b83929150613ba1565b5090565b50805460008255906000526020600020908101906114e591905b5b80821115613b835760008155600101613ba2565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613bf457613bf4613bb6565b604052919050565b60006001600160401b03821115613c1557613c15613bb6565b5060051b60200190565b600082601f830112613c3057600080fd5b81356020613c45613c4083613bfc565b613bcc565b82815260059290921b84018101918181019086841115613c6457600080fd5b8286015b84811015613c7f5780358352918301918301613c68565b509695505050505050565b60008060408385031215613c9d57600080fd5b82356001600160401b0380821115613cb457600080fd5b613cc086838701613c1f565b93506020850135915080821115613cd657600080fd5b50613ce385828601613c1f565b9150509250929050565b6001600160e01b0319811681146114e557600080fd5b600060208284031215613d1557600080fd5b81356111e881613ced565b60005b83811015613d3b578181015183820152602001613d23565b50506000910152565b60008151808452613d5c816020860160208601613d20565b601f01601f19169290920160200192915050565b6020815260006111e86020830184613d44565b600060208284031215613d9557600080fd5b5035919050565b80356001600160a01b0381168114613db357600080fd5b919050565b60008060408385031215613dcb57600080fd5b82359150613ddb60208401613d9c565b90509250929050565b60008060408385031215613df757600080fd5b613e0083613d9c565b946020939093013593505050565b60006001600160401b03831115613e2757613e27613bb6565b613e3a601f8401601f1916602001613bcc565b9050828152838383011115613e4e57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613e7657600080fd5b6111e883833560208501613e0e565b600080600060608486031215613e9a57600080fd5b83356001600160401b0380821115613eb157600080fd5b613ebd87838801613c1f565b94506020860135915080821115613ed357600080fd5b50613ee086828701613e65565b925050604084013590509250925092565b600060208284031215613f0357600080fd5b6111e882613d9c565b60008060008060808587031215613f2257600080fd5b613f2b85613d9c565b9350602085013592506040850135915060608501356001600160401b03811115613f5457600080fd5b613f6087828801613e65565b91505092959194509250565b600080600060608486031215613f8157600080fd5b613f8a84613d9c565b9250613f9860208501613d9c565b9150604084013590509250925092565b60008060408385031215613fbb57600080fd5b8235915060208301356001600160401b03811115613fd857600080fd5b613ce385828601613e65565b60008060408385031215613ff757600080fd5b82356001600160401b0381111561400d57600080fd5b61401985828601613c1f565b95602094909401359450505050565b6000806000806080858703121561403e57600080fd5b84359350602085013592506040850135915060608501356001600160401b03811115613f5457600080fd5b60008083601f84011261407b57600080fd5b5081356001600160401b0381111561409257600080fd5b6020830191508360208260051b850101111561377a57600080fd5b6000806000604084860312156140c257600080fd5b8335925060208401356001600160401b038111156140df57600080fd5b6140eb86828701614069565b9497909650939450505050565b60006020828403121561410a57600080fd5b81356001600160401b0381111561412057600080fd5b61338384828501613e65565b60006020828403121561413e57600080fd5b81356001600160401b0381111561415457600080fd5b61338384828501613c1f565b6020808252825182820181905260009190848201906040850190845b81811015611bff576141b783855180516001600160a01b031682526020808201516001600160401b0316908301526040908101511515910152565b928401926060929092019160010161417c565b6000806000806000608086880312156141e257600080fd5b6141eb86613d9c565b945060208601356001600160401b0381111561420657600080fd5b61421288828901614069565b9699909850959660408101359660609091013595509350505050565b600081518084526020808501945080840160005b8381101561425e57815187529582019590820190600101614242565b509495945050505050565b6020815260006111e8602083018461422e565b60008060006060848603121561429157600080fd5b61429a84613d9c565b95602085013595506040909401359392505050565b80358015158114613db357600080fd5b600080604083850312156142d257600080fd5b6142db83613d9c565b9150613ddb602084016142af565b600080600080608085870312156142ff57600080fd5b61430885613d9c565b935061431660208601613d9c565b92506040850135915060608501356001600160401b0381111561433857600080fd5b8501601f8101871361434957600080fd5b613f6087823560208401613e0e565b6000806040838503121561436b57600080fd5b82356001600160401b0381111561438157600080fd5b61438d85828601613c1f565b925050613ddb602084016142af565b6000806000606084860312156143b157600080fd5b83356001600160401b038111156143c757600080fd5b6143d386828701613e65565b9660208601359650604090950135949350505050565b81516001600160a01b031681526020808301516001600160401b03169082015260408083015115159082015260608101610d62565b60008060008060008060c0878903121561443757600080fd5b86359550602080880135955060408801359450606088013593506080880135925060a08801356001600160401b038082111561447257600080fd5b818a0191508a601f83011261448657600080fd5b8135614494613c4082613bfc565b81815260059190911b8301840190848101908d8311156144b357600080fd5b8585015b838110156144e95784813511156144cd57600080fd5b6144dc8f888335890101613e65565b83529186019186016144b7565b508096505050505050509295509295509295565b600080600080600080600060c0888a03121561451857600080fd5b87356001600160401b038082111561452f57600080fd5b61453b8b838c01613e65565b985060208a0135975060408a0135965060608a013591508082111561455f57600080fd5b5061456c8a828b01614069565b909550935061457f9050608089016142af565b915060a0880135905092959891949750929550565b600080604083850312156145a757600080fd5b6145b083613d9c565b9150613ddb60208401613d9c565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016145fc576145fc6145d4565b5060010190565b600181811c9082168061461757607f821691505b60208210810361463757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601c908201527f4552433732313a207472616e73666572206e6f7420616c6c6f77656400000000604082015260600190565b60008251614686818460208701613d20565b9190910192915050565b6020808252601d908201527f58616e614c616e643a20506c6f742073697a65206e6f742076616c6964000000604082015260600190565b6020808252601f908201527f58616e614c616e643a2053616c65206e6f742073746172746564207965742e00604082015260600190565b60208082526018908201527f58616e614c616e643a20416d6f756e74206973205a65726f0000000000000000604082015260600190565b60208082526023908201527f58616e614c616e643a20416d6f756e7420657863656564656420696e20706172604082015262616d7360e81b606082015260800190565b80820180821115610d6257610d626145d4565b60208082526026908201527f58616e614c616e643a204d6178204c696d6974205265616368656420666f722060408201526521b7b6b6b7b760d11b606082015260800190565b60208082526026908201527f58616e614c616e643a20506572207472616e73616374696f6e206c696d697420604082015265195e18d9595960d21b606082015260800190565b60208082526024908201527f58616e614c616e643a204e4654206c6f636b7570206e6f742065787069726564604082015263081e595d60e21b606082015260800190565b60808152600061486e608083018761422e565b6001600160a01b03959095166020830152506040810192909252606090910152919050565b60208082526019908201527f58616e614c616e643a204e6f742077686974656c697374656400000000000000604082015260600190565b60208082526022908201527f58616e614c616e643a205061696420616d6f756e7420696e73756666696369656040820152611b9d60f21b606082015260800190565b601f821115610d1157600081815260208120601f850160051c810160208610156149335750805b601f850160051c820191505b818110156130435782815560010161493f565b81516001600160401b0381111561496b5761496b613bb6565b61497f816149798454614603565b8461490c565b602080601f8311600181146149b4576000841561499c5750858301515b600019600386901b1c1916600185901b178555613043565b600085815260208120601f198616915b828110156149e3578886015182559484019460019091019084016149c4565b5085821015614a015787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000614a24604083018561422e565b905082151560208301529392505050565b60008351614a47818460208801613d20565b835190830190614a5b818360208801613d20565b01949350505050565b6001600160a01b038916815261010060208201819052600090614a898382018b613d44565b604084019990995250506060810195909552608085019390935260a084019190915260c0830152151560e09091015292915050565b8082028115828204841417610d6257610d626145d4565b634e487b7160e01b600052601260045260246000fd5b600082614afa57614afa614ad5565b500490565b81810381811115610d6257610d626145d4565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611abc90830184613d44565b600060208284031215614b5757600080fd5b81516111e881613ced565b600082614b7157614b71614ad5565b500690565b634e487b7160e01b600052603160045260246000fd5b6000608082016080835280875480835260a08501915088600052602092508260002060005b82811015614bcd57815484529284019260019182019101614bb1565b5050506001600160a01b03969096169083015250604081019290925260609091015291905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204dec6547dc9c491946a88817f1ca4f055f146778088af8ee6828b5e118aad53e64736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000974657374206c616e640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000974657374206c616e640000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103ad5760003560e01c80636b6f4a9d116101e7578063a22cb4651161010d578063cbc28116116100a0578063e2f36dce1161006f578063e2f36dce14610bf7578063e985e9c514610c17578063f29f15af14610c60578063f2fde38b14610c8057600080fd5b8063cbc2811614610b91578063cdb6751a14610ba4578063d3e0fbd414610bc4578063dabd271914610bd757600080fd5b8063bc8d4cd6116100dc578063bc8d4cd614610b04578063c0b5ba3b14610b24578063c23dc68f14610b44578063c87b56dd14610b7157600080fd5b8063a22cb46514610a84578063a8b8042814610aa4578063b61d0c6314610ac4578063b88d4fde14610ae457600080fd5b80638462151c1161018557806395d89b411161015457806395d89b41146109f957806399a2557a14610a0e5780639f4dc6fd14610a2e578063a0a2daf014610a4e57600080fd5b80638462151c146108fb5780638822048e146109285780638acdad75146109585780638da5cb5b146109db57600080fd5b806370a08231116101c157806370a0823114610890578063715018a6146108b057806374f32b3e146108c55780637501f741146108e557600080fd5b80636b6f4a9d146108455780636c0360eb1461085b5780636f27cf641461087057600080fd5b806327a8c936116102d757806350572df21161026a578063621fb96c11610239578063621fb96c146107c2578063631e4b85146107ef5780636352211e1461080557806369ff1a811461082557600080fd5b806350572df21461070957806355f804b3146107555780635bbb2177146107755780635e31fd0c146107a257600080fd5b80633ccfd60b116102a65780633ccfd60b146106a157806341e54ade146106b657806342842e0e146106c9578063456904a5146106e957600080fd5b806327a8c936146105dc5780632e8adc21146105fc5780633277f29b1461060f578063331f319c1461068157600080fd5b8063114fa62e1161034f57806322c64f2f1161031e57806322c64f2f1461055c57806323b872dd1461057c5780632529590e1461059c57806326a6860a146105bc57600080fd5b8063114fa62e146104e9578063126fe62d1461050957806318160ddd14610529578063200d2ed21461054657600080fd5b8063081812fc1161038b578063081812fc1461042b578063088a4ed0146104635780630935ef1014610483578063095ea7b3146104c957600080fd5b806301c16260146103b257806301ffc9a7146103d457806306fdde0314610409575b600080fd5b3480156103be57600080fd5b506103d26103cd366004613c8a565b610ca0565b005b3480156103e057600080fd5b506103f46103ef366004613d03565b610d16565b60405190151581526020015b60405180910390f35b34801561041557600080fd5b5061041e610d68565b6040516104009190613d70565b34801561043757600080fd5b5061044b610446366004613d83565b610dfa565b6040516001600160a01b039091168152602001610400565b34801561046f57600080fd5b506103d261047e366004613d83565b610e3e565b34801561048f57600080fd5b506104bb61049e366004613db8565b601860209081526000928352604080842090915290825290205481565b604051908152602001610400565b3480156104d557600080fd5b506103d26104e4366004613de4565b610e4b565b3480156104f557600080fd5b506103d2610504366004613e85565b610f1c565b34801561051557600080fd5b506103d2610524366004613ef1565b610f67565b34801561053557600080fd5b5060055460045403600019016104bb565b34801561055257600080fd5b506104bb60145481565b34801561056857600080fd5b506103d2610577366004613f0c565b610f90565b34801561058857600080fd5b506103d2610597366004613f6c565b61111a565b3480156105a857600080fd5b506104bb6105b7366004613fa8565b61116a565b3480156105c857600080fd5b5061041e6105d7366004613d83565b6111ef565b3480156105e857600080fd5b506103d26105f7366004613d83565b61129b565b6103d261060a366004613fe4565b6112a8565b34801561061b57600080fd5b5061065961062a366004613d83565b601160205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a001610400565b34801561068d57600080fd5b506103d261069c366004614028565b6113d5565b3480156106ad57600080fd5b506103d2611488565b6103d26106c43660046140ad565b6114e8565b3480156106d557600080fd5b506103d26106e4366004613f6c565b61174e565b3480156106f557600080fd5b506103d2610704366004613fa8565b6117ae565b34801561071557600080fd5b506103f4610724366004613fa8565b6012602090815260009283526040909220815180830184018051928152908401929093019190912091525460ff1681565b34801561076157600080fd5b506103d26107703660046140f8565b6117f6565b34801561078157600080fd5b5061079561079036600461412c565b61180e565b6040516104009190614160565b3480156107ae57600080fd5b506103d26107bd366004613d83565b6118d4565b3480156107ce57600080fd5b506104bb6107dd366004613d83565b600c6020526000908152604090205481565b3480156107fb57600080fd5b506104bb60175481565b34801561081157600080fd5b5061044b610820366004613d83565b61198d565b34801561083157600080fd5b506103d2610840366004613ef1565b61199f565b34801561085157600080fd5b506104bb60165481565b34801561086757600080fd5b5061041e6119cb565b34801561087c57600080fd5b506103d261088b366004613ef1565b6119d8565b34801561089c57600080fd5b506104bb6108ab366004613ef1565b611a02565b3480156108bc57600080fd5b506103d2611a50565b3480156108d157600080fd5b506103f46108e03660046141ca565b611a64565b3480156108f157600080fd5b506104bb60135481565b34801561090757600080fd5b5061091b610916366004613ef1565b611ac6565b6040516104009190614269565b34801561093457600080fd5b506103f4610943366004613ef1565b600d6020526000908152604090205460ff1681565b34801561096457600080fd5b506109b9610973366004613fa8565b6015602090815260009283526040909220815180830184018051928152908401929093019190912091528054600182015460028301546003909301549192909160ff1684565b6040805194855260208501939093529183015215156060820152608001610400565b3480156109e757600080fd5b50600e546001600160a01b031661044b565b348015610a0557600080fd5b5061041e611c0b565b348015610a1a57600080fd5b5061091b610a2936600461427c565b611c1a565b348015610a3a57600080fd5b506103d2610a49366004613d83565b611de5565b348015610a5a57600080fd5b5061044b610a69366004613d03565b6000602081905290815260409020546001600160a01b031681565b348015610a9057600080fd5b506103d2610a9f3660046142bf565b611ea4565b348015610ab057600080fd5b506103d2610abf3660046142bf565b611f74565b348015610ad057600080fd5b506104bb610adf366004613de4565b612017565b348015610af057600080fd5b506103d2610aff3660046142e9565b612054565b348015610b1057600080fd5b506103d2610b1f366004614358565b6120e4565b348015610b3057600080fd5b506104bb610b3f36600461439c565b612225565b348015610b5057600080fd5b50610b64610b5f366004613d83565b61226d565b60405161040091906143e9565b348015610b7d57600080fd5b5061041e610b8c366004613d83565b612327565b6103d2610b9f366004613fe4565b6123e3565b348015610bb057600080fd5b506103d2610bbf36600461441e565b612503565b6103d2610bd23660046144fd565b6125ee565b348015610be357600080fd5b506103d2610bf2366004613d83565b6129f0565b348015610c0357600080fd5b506103d2610c123660046140ad565b6129fd565b348015610c2357600080fd5b506103f4610c32366004614594565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b348015610c6c57600080fd5b506103d2610c7b366004613d83565b612c26565b348015610c8c57600080fd5b506103d2610c9b366004613ef1565b612c33565b610ca8612ca9565b60005b8251811015610d1157818181518110610cc657610cc66145be565b6020026020010151600c6000858481518110610ce457610ce46145be565b60200260200101518152602001908152602001600020819055508080610d09906145ea565b915050610cab565b505050565b60006001600160e01b031982166380ac58cd60e01b1480610d4757506001600160e01b03198216635b5e139f60e01b145b80610d6257506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060068054610d7790614603565b80601f0160208091040260200160405190810160405280929190818152602001828054610da390614603565b8015610df05780601f10610dc557610100808354040283529160200191610df0565b820191906000526020600020905b815481529060010190602001808311610dd357829003601f168201915b5050505050905090565b6000610e0582612d03565b610e22576040516333d1c03960e21b815260040160405180910390fd5b506000908152600a60205260409020546001600160a01b031690565b610e46612ca9565b601355565b6001600160a01b0382166000908152600d6020526040902054829060ff16610e8e5760405162461bcd60e51b8152600401610e859061463d565b60405180910390fd5b6000610e998361198d565b9050806001600160a01b0316846001600160a01b031603610ecd5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610eed5750610eeb8133610c32565b155b15610f0b576040516367d9dca160e11b815260040160405180910390fd5b610f16848483612d3c565b50505050565b610f24612ca9565b82601b83604051610f359190614674565b908152602001604051809103902060008381526020019081526020016000209080519060200190610f16929190613b3c565b610f6f612ca9565b6001600160a01b03166000908152601960205260409020805460ff19169055565b6000828152601560205260408082209051859285928592610fb2908490614674565b90815260200160405180910390206002015490506015600084815260200190815260200160002082604051610fe79190614674565b9081526040519081900360200190206003015460ff166110195760405162461bcd60e51b8152600401610e8590614690565b60145460000361103b5760405162461bcd60e51b8152600401610e85906146c7565b6000841161105b5760405162461bcd60e51b8152600401610e85906146fe565b60135484111561107d5760405162461bcd60e51b8152600401610e8590614735565b60008381526015602052604090819020905161109a908490614674565b908152604051908190036020019020600101546110b78583614778565b11156110d55760405162461bcd60e51b8152600401610e859061478b565b6017548411156110f75760405162461bcd60e51b8152600401610e85906147d1565b506000611102612ca9565b611110888887896000612d98565b5050505050505050565b6000818152600c60205260409020544210158061114357506000818152600c6020526040902054155b61115f5760405162461bcd60e51b8152600401610e8590614817565b610d11838383612e3f565b60008281526015602052604080822090516111e8919061118b908590614674565b9081526020016040518091039020600001546111e36111dc60156000888152602001908152602001600020866040516111c49190614674565b9081526040519081900360200190205460165461304b565b6064613057565b613063565b9392505050565b600181815481106111ff57600080fd5b90600052602060002001600091509050805461121a90614603565b80601f016020809104026020016040519081016040528092919081815260200182805461124690614603565b80156112935780601f1061126857610100808354040283529160200191611293565b820191906000526020600020905b81548152906001019060200180831161127657829003601f168201915b505050505081565b6112a3612ca9565b601755565b81513490600510156112f85760405162461bcd60e51b81526020600482015260196024820152786e6f74206d6f7265207468616e203520746f6b656e2069647360381b6044820152606401610e85565b601a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611345576040519150601f19603f3d011682016040523d82523d6000602084013e61134a565b606091505b50509050806113935760405162461bcd60e51b81526020600482015260156024820152740eadcc2c4d8ca40e8de40e4cac6cad2ecca40cae8d605b1b6044820152606401610e85565b7ecdb41d94af2c216b4786938844cfdc35283f2aefae511d22a041792d78abe1843384866040516113c7949392919061485b565b60405180910390a150505050565b6113dd612ca9565b8260156000868152602001908152602001600020826040516113ff9190614674565b908152604080516020928190038301812093909355600087815260159092529020839161142d908490614674565b90815260408051918290036020908101832060019081019490945560008881526015909152209061145f908490614674565b908152604051908190036020019020600301805491151560ff1990921691909117905550505050565b611490612ca9565b604051600090339047908381818185875af1925050503d80600081146114d2576040519150601f19603f3d011682016040523d82523d6000602084013e6114d7565b606091505b50509050806114e557600080fd5b50565b8260046040518060400160405280600681526020016521b7b6b6b7b760d11b8152506000601560008481526020019081526020016000208260405161152d9190614674565b908152602001604051809103902060020154905060156000848152602001908152602001600020826040516115629190614674565b9081526040519081900360200190206003015460ff166115945760405162461bcd60e51b8152600401610e8590614690565b6014546000036115b65760405162461bcd60e51b8152600401610e85906146c7565b600084116115d65760405162461bcd60e51b8152600401610e85906146fe565b6013548411156115f85760405162461bcd60e51b8152600401610e8590614735565b600083815260156020526040908190209051611615908490614674565b908152604051908190036020019020600101546116328583614778565b11156116505760405162461bcd60e51b8152600401610e859061478b565b6017548411156116725760405162461bcd60e51b8152600401610e85906147d1565b5060408051808201909152600681526521b7b6b6b7b760d11b602082015260009060016116a389898960048561306f565b6116bf5760405162461bcd60e51b8152600401610e8590614893565b3360009081527f5b650d93b25a5c652bc6f9215f522b521daf6d36977dcec1343c2a8310b869d66020526040812080548b92906116fd908490614778565b909155506117169050611710828461116a565b8a61304b565b3410156117355760405162461bcd60e51b8152600401610e85906148ca565b611743338a84846001612d98565b505050505050505050565b6000818152600c60205260409020544210158061177757506000818152600c6020526040902054155b6117935760405162461bcd60e51b8152600401610e8590614817565b610d1183838360405180602001604052806000815250612054565b6117b6612ca9565b60008281526012602052604080822090516117d2908490614674565b908152604051908190036020019020805491151560ff199092169190911790555050565b6117fe612ca9565b601061180a8282614952565b5050565b80516060906000816001600160401b0381111561182d5761182d613bb6565b60405190808252806020026020018201604052801561187857816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161184b5790505b50905060005b8281146118cc576118a785828151811061189a5761189a6145be565b602002602001015161226d565b8282815181106118b9576118b96145be565b602090810291909101015260010161187e565b509392505050565b336118de8261198d565b6001600160a01b0316146119235760405162461bcd60e51b815260206004820152600c60248201526b3737903a34329037bbb732b960a11b6044820152606401610e85565b6000818152600c602052604090205465185c01f792a01461197c5760405162461bcd60e51b81526020600482015260136024820152721ddbdc9b19081b9bdd081c1d589b1a5cda1959606a1b6044820152606401610e85565b6000908152600c6020526040812055565b6000611998826131fd565b5192915050565b6119a7612ca9565b6001600160a01b03166000908152601960205260409020805460ff19166001179055565b6010805461121a90614603565b6119e0612ca9565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b038216611a2b576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600960205260409020546001600160401b031690565b611a58612ca9565b611a626000613324565b565b6000611abc611a738785612017565b8686808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250888152601160205260409020600401549250613376915050565b9695505050505050565b60606000806000611ad685611a02565b90506000816001600160401b03811115611af257611af2613bb6565b604051908082528060200260200182016040528015611b1b578160200160208202803683370190505b509050611b41604080516060810182526000808252602082018190529181019190915290565b60015b838611611bff57600081815260086020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529250611bf75781516001600160a01b031615611bb857815194505b876001600160a01b0316856001600160a01b031603611bf75780838780600101985081518110611bea57611bea6145be565b6020026020010181815250505b600101611b44565b50909695505050505050565b606060078054610d7790614603565b606081831115611c3d57604051631960ccad60e11b815260040160405180910390fd5b600454600090600101611c4e600190565b851015611c5a57600194505b80841115611c66578093505b6000611c7187611a02565b905084861015611c905785850381811015611c8a578091505b50611c94565b5060005b6000816001600160401b03811115611cae57611cae613bb6565b604051908082528060200260200182016040528015611cd7578160200160208202803683370190505b50905081600003611ced5793506111e892505050565b6000611cf88861226d565b905060008160400151611d09575080515b885b888114158015611d1b5750848714155b15611dd457600081815260086020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529350611dcc5782516001600160a01b031615611d8d57825191505b8a6001600160a01b0316826001600160a01b031603611dcc5780848880600101995081518110611dbf57611dbf6145be565b6020026020010181815250505b600101611d0b565b505050928352509095945050505050565b33611def8261198d565b6001600160a01b031614611e345760405162461bcd60e51b815260206004820152600c60248201526b3737903a34329037bbb732b960a11b6044820152606401610e85565b6000818152600c602052604090205465185c01f792a003611e8b5760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c1d589b1a5cda1959607a1b6044820152606401610e85565b6000908152600c6020526040902065185c01f792a09055565b6001600160a01b0382166000908152600d6020526040902054829060ff16611ede5760405162461bcd60e51b8152600401610e859061463d565b336001600160a01b03841603611f075760405163b06307db60e01b815260040160405180910390fd5b336000818152600b602090815260408083206001600160a01b03881680855290835292819020805460ff191687151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611f7c612ca9565b6001600160a01b0382166000908152600d602052604090205481151560ff909116151503611fec5760405162461bcd60e51b815260206004820152601c60248201527f58616e616c616e643a2073746174757320616c726561647920736574000000006044820152606401610e85565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b604080516001600160a01b038416602082015290810182905260009060600160405160208183030381529060405280519060200120905092915050565b6000828152600c60205260409020544210158061207d57506000828152600c6020526040902054155b6120995760405162461bcd60e51b8152600401610e8590614817565b6120a4848484612e3f565b6001600160a01b0383163b151580156120c657506120c48484848461338b565b155b15610f16576040516368d2bf6b60e11b815260040160405180910390fd5b3360009081526019602052604090205460ff166121335760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420617574686f72697a6560981b6044820152606401610e85565b80156121955760005b825181101561218f5765185c01f792a0600c6000858481518110612162576121626145be565b60200260200101518152602001908152602001600020819055508080612187906145ea565b91505061213c565b506121e8565b60005b82518110156121e6576000600c60008584815181106121b9576121b96145be565b602002602001015181526020019081526020016000208190555080806121de906145ea565b915050612198565b505b7fc55a0de0f0b6c1b85d9c52787d91c8068c5a331e926fb9e3c575b435e97fe14f8282604051612219929190614a11565b60405180910390a15050565b8251602081850181018051601b8252928201828701209290525260008281526040902080548290811061225757600080fd5b9060005260206000200160009250925050505481565b604080516060808201835260008083526020808401829052838501829052845192830185528183528201819052928101929092529060018310806122b357506004548310155b156122be5792915050565b50600082815260086020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16158015928201929092529061231e5792915050565b6111e8836131fd565b606061233282612d03565b6123885760405162461bcd60e51b815260206004820152602160248201527f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b656044820152603760f91b6064820152608401610e85565b6000612392613476565b905060008151116123b257604051806020016040528060008152506111e8565b806123bc84613485565b6040516020016123cd929190614a35565b6040516020818303038152906040529392505050565b81513490600510156124335760405162461bcd60e51b81526020600482015260196024820152786e6f74206d6f7265207468616e203520746f6b656e2069647360381b6044820152606401610e85565b601a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612480576040519150601f19603f3d011682016040523d82523d6000602084013e612485565b606091505b50509050806124ce5760405162461bcd60e51b81526020600482015260156024820152740eadcc2c4d8ca40e8de40e4cac6cad2ecca40cae8d605b1b6044820152606401610e85565b7f9d3fc7c6858672d62378c66aabf170a70b98ed6283ed4d2367fa23ae47c6cff8843384866040516113c7949392919061485b565b61250b612ca9565b6040805160a081018252858152602080820186815282840186815260008a8152601180855295812060038101805460608801908152608088018f81528e855298909652955181559251600184015590516002830155915190925591516004909101555b81518110156125e55760016012600088815260200190815260200160002083838151811061259e5761259e6145be565b60200260200101516040516125b39190614674565b908152604051908190036020019020805491151560ff19909216919091179055806125dd816145ea565b91505061256e565b50505050505050565b6000858152601560205260408082209051889288928b92612610908490614674565b908152602001604051809103902060020154905060156000848152602001908152602001600020826040516126459190614674565b9081526040519081900360200190206003015460ff166126775760405162461bcd60e51b8152600401610e8590614690565b6014546000036126995760405162461bcd60e51b8152600401610e85906146c7565b600084116126b95760405162461bcd60e51b8152600401610e85906146fe565b6013548411156126db5760405162461bcd60e51b8152600401610e8590614735565b6000838152601560205260409081902090516126f8908490614674565b908152604051908190036020019020600101546127158583614778565b11156127335760405162461bcd60e51b8152600401610e859061478b565b6017548411156127555760405162461bcd60e51b8152600401610e85906147d1565b506000888152601560205260408082209051612772908d90614674565b9081526040519081900360200190206003015460ff166127a45760405162461bcd60e51b8152600401610e8590614690565b6000858152601260205260409081902090516127c1908d90614674565b9081526040519081900360200190205460ff166128145760405162461bcd60e51b815260206004820152601160248201527016185b9853185b990e88125b9d985b1a59607a1b6044820152606401610e85565b60145460020361287157841561286c5760405162461bcd60e51b815260206004820152601a60248201527f58616e614c616e643a206f6e6c79207075626c69632073616c650000000000006044820152606401610e85565b6128ae565b846000036128ae5760405162461bcd60e51b815260206004820152600a60248201526902c30b730a630b7321d160b51b6044820152606401610e85565b6128bb8a8989888a61306f565b6128d75760405162461bcd60e51b8152600401610e8590614893565b6000858152601860209081526040808320338452909152812080548c9290612900908490614778565b909155505060008981526015602052604090819020905161293d9190612927908e90614674565b908152604051908190036020019020548b61304b565b34101561295c5760405162461bcd60e51b8152600401610e85906148ca565b6000601b8c60405161296e9190614674565b908152604080516020928190038301902060008d815292529020541180156129c0575089601b8c6040516129a29190614674565b908152604080516020928190038301902060008d8152925290205410155b156129d5576129d08b8a8c613585565b6129e3565b6129e3338b8d8c6000612d98565b5050505050505050505050565b6129f8612ca9565b601655565b8260056040518060400160405280600681526020016521b7b6b6b7b760d11b81525060006015600084815260200190815260200160002082604051612a429190614674565b90815260200160405180910390206002015490506015600084815260200190815260200160002082604051612a779190614674565b9081526040519081900360200190206003015460ff16612aa95760405162461bcd60e51b8152600401610e8590614690565b601454600003612acb5760405162461bcd60e51b8152600401610e85906146c7565b60008411612aeb5760405162461bcd60e51b8152600401610e85906146fe565b601354841115612b0d5760405162461bcd60e51b8152600401610e8590614735565b600083815260156020526040908190209051612b2a908490614674565b90815260405190819003602001902060010154612b478583614778565b1115612b655760405162461bcd60e51b8152600401610e859061478b565b601754841115612b875760405162461bcd60e51b8152600401610e85906147d1565b5060408051808201909152600681526521b7b6b6b7b760d11b60208201526000906001612bb889898960058561306f565b612bd45760405162461bcd60e51b8152600401610e8590614893565b3360009081527f2288853b49db4f36075bf4a8cfdae4e5e3b39b7b03937d0a9148b051a6f64c5c6020526040812080548b9290612c12908490614778565b909155506117439050338a84846000612d98565b612c2e612ca9565b601455565b612c3b612ca9565b6001600160a01b038116612ca05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e85565b6114e581613324565b600e546001600160a01b03163314611a625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e85565b600081600111158015612d17575060045482105b8015610d62575050600090815260086020526040902054600160e01b900460ff161590565b6000828152600a602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600080612da58787613758565b91509150856015600086815260200190815260200160002086604051612dcb9190614674565b90815260200160405180910390206002016000828254612deb9190614778565b90915550506040517fc5e101581b86caaead7cd59d5856276f8289c3a689e5190e88cdf51a82b255b490612e2e90899088908890879087908d9034908c90614a64565b60405180910390a150505050505050565b336000818152600d602052604090205460ff16612e6e5760405162461bcd60e51b8152600401610e859061463d565b6000612e79836131fd565b9050846001600160a01b031681600001516001600160a01b031614612eb05760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0387161480612ece5750612ece8633610c32565b80612ee9575033612ede85610dfa565b6001600160a01b0316145b905080612f0957604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516612f3057604051633a954ecd60e21b815260040160405180910390fd5b612f3c60008588612d3c565b6001600160a01b038681166000908152600960209081526040808320805467ffffffffffffffff198082166001600160401b03928316600019018316179092558a86168086528386208054938416938316600190810184169490941790558a8652600890945282852080546001600160e01b031916909417600160a01b4290921691909102178355880180845292208054919390911661301057600454821461301057805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038b16171781555b50505083856001600160a01b0316876001600160a01b0316600080516020614bf583398151915260405160405180910390a45b505050505050565b60006111e88284614abe565b60006111e88284614aeb565b60006111e88284614aff565b60006002600f54036130c35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e85565b6002600f5560008381526011602052604090205442101561311b5760405162461bcd60e51b81526020600482015260126024820152712c30b730b630b7321d103737ba1037b832b760711b6044820152606401610e85565b6000838152601160205260409020600101544211156131735760405162461bcd60e51b815260206004820152601460248201527316185b985b185b990e881cd85b1948195b99195960621b6044820152606401610e85565b6000826131815760006131a6565b60008481526018602090815260408083203384529091529020546131a6908890614778565b9050866011600086815260200190815260200160002060030160008282546131ce9190614778565b909155505060145460011415806131ed57506131ed3387878488611a64565b6001600f55979650505050505050565b6040805160608101825260008082526020820181905291810191909152818060011115801561322d575060045481105b1561330b57600081815260086020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906133095780516001600160a01b0316156132a0579392505050565b5060001901600081815260086020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215613304579392505050565b6132a0565b505b604051636f96cda160e11b815260040160405180910390fd5b600e80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000613383838386613781565b949350505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906133c0903390899088908890600401614b12565b6020604051808303816000875af19250505080156133fb575060408051601f3d908101601f191682019092526133f891810190614b45565b60015b613459573d808015613429576040519150601f19603f3d011682016040523d82523d6000602084013e61342e565b606091505b508051600003613451576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606060108054610d7790614603565b6060816000036134ac5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156134d657806134c0816145ea565b91506134cf9050600a83614aeb565b91506134b0565b6000816001600160401b038111156134f0576134f0613bb6565b6040519080825280601f01601f19166020018201604052801561351a576020820181803683370190505b5090505b84156133835761352f600183614aff565b915061353c600a86614b62565b613547906030614778565b60f81b81838151811061355c5761355c6145be565b60200101906001600160f81b031916908160001a90535061357e600a86614aeb565b945061351e565b60008281526015602052604080822090518391906135a4908790614674565b908152602001604051809103902060020160008282546135c49190614778565b90915550600090505b8281101561370c57601b856040516135e59190614674565b908152604080519182900360209081018320600088815291522090600190601b90613611908990614674565b9081526040805160209281900383019020600089815292529020546136369190614aff565b81548110613646576136466145be565b6000918252602082200154601c805460018101825592527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21190910181905591506136a573b071bac7a7139a5427b234bef33da5c9b61b9efd3384613797565b601b856040516136b59190614674565b908152602001604051809103902060008581526020019081526020016000208054806136e3576136e3614b76565b600190038181906000526020600020016000905590558080613704906145ea565b9150506135cd565b507fd1a77fb0a2219bc1c0b23cf9b1d4411e792aac1eb1b916b999c930d7074315f6601c338460006040516137449493929190614b8c565b60405180910390a1610f16601c6000613b87565b600080613775848460405180602001604052806000815250613917565b915091505b9250929050565b60008261378e8584613ad0565b14949350505050565b60006137a2826131fd565b9050836001600160a01b031681600001516001600160a01b0316146137d95760405162a1148160e81b815260040160405180910390fd5b6001600160a01b03831661380057604051633a954ecd60e21b815260040160405180910390fd5b61380c60008386612d3c565b6001600160a01b038481166000908152600960209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255888616808652838620805493841693831660019081018416949094179055888652600890945282852080546001600160e01b031916909417600160a01b429092169190910217835586018084529220805491939091166138e05760045482146138e057805460208501516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038916171781555b50505081836001600160a01b0316856001600160a01b0316600080516020614bf583398151915260405160405180910390a4610f16565b60045460009081906001600160a01b03861661394557604051622e076360e81b815260040160405180910390fd5b846000036139665760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038616600081815260096020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168d0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168d01811690920217909155858452600890925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818701903b15613a7c575b60405182906001600160a01b038a1690600090600080516020614bf5833981519152908290a4613a45600089848060010195508961338b565b613a62576040516368d2bf6b60e11b815260040160405180910390fd5b808203613a0c578260045414613a7757600080fd5b613aaf565b5b6040516001830192906001600160a01b038a1690600090600080516020614bf5833981519152908290a4808203613a7d575b50600455806001600454613ac39190614aff565b9250925050935093915050565b600081815b84518110156118cc576000858281518110613af257613af26145be565b60200260200101519050808311613b185760008381526020829052604090209250613b29565b600081815260208490526040902092505b5080613b34816145ea565b915050613ad5565b828054828255906000526020600020908101928215613b77579160200282015b82811115613b77578251825591602001919060010190613b5c565b50613b83929150613ba1565b5090565b50805460008255906000526020600020908101906114e591905b5b80821115613b835760008155600101613ba2565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613bf457613bf4613bb6565b604052919050565b60006001600160401b03821115613c1557613c15613bb6565b5060051b60200190565b600082601f830112613c3057600080fd5b81356020613c45613c4083613bfc565b613bcc565b82815260059290921b84018101918181019086841115613c6457600080fd5b8286015b84811015613c7f5780358352918301918301613c68565b509695505050505050565b60008060408385031215613c9d57600080fd5b82356001600160401b0380821115613cb457600080fd5b613cc086838701613c1f565b93506020850135915080821115613cd657600080fd5b50613ce385828601613c1f565b9150509250929050565b6001600160e01b0319811681146114e557600080fd5b600060208284031215613d1557600080fd5b81356111e881613ced565b60005b83811015613d3b578181015183820152602001613d23565b50506000910152565b60008151808452613d5c816020860160208601613d20565b601f01601f19169290920160200192915050565b6020815260006111e86020830184613d44565b600060208284031215613d9557600080fd5b5035919050565b80356001600160a01b0381168114613db357600080fd5b919050565b60008060408385031215613dcb57600080fd5b82359150613ddb60208401613d9c565b90509250929050565b60008060408385031215613df757600080fd5b613e0083613d9c565b946020939093013593505050565b60006001600160401b03831115613e2757613e27613bb6565b613e3a601f8401601f1916602001613bcc565b9050828152838383011115613e4e57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613e7657600080fd5b6111e883833560208501613e0e565b600080600060608486031215613e9a57600080fd5b83356001600160401b0380821115613eb157600080fd5b613ebd87838801613c1f565b94506020860135915080821115613ed357600080fd5b50613ee086828701613e65565b925050604084013590509250925092565b600060208284031215613f0357600080fd5b6111e882613d9c565b60008060008060808587031215613f2257600080fd5b613f2b85613d9c565b9350602085013592506040850135915060608501356001600160401b03811115613f5457600080fd5b613f6087828801613e65565b91505092959194509250565b600080600060608486031215613f8157600080fd5b613f8a84613d9c565b9250613f9860208501613d9c565b9150604084013590509250925092565b60008060408385031215613fbb57600080fd5b8235915060208301356001600160401b03811115613fd857600080fd5b613ce385828601613e65565b60008060408385031215613ff757600080fd5b82356001600160401b0381111561400d57600080fd5b61401985828601613c1f565b95602094909401359450505050565b6000806000806080858703121561403e57600080fd5b84359350602085013592506040850135915060608501356001600160401b03811115613f5457600080fd5b60008083601f84011261407b57600080fd5b5081356001600160401b0381111561409257600080fd5b6020830191508360208260051b850101111561377a57600080fd5b6000806000604084860312156140c257600080fd5b8335925060208401356001600160401b038111156140df57600080fd5b6140eb86828701614069565b9497909650939450505050565b60006020828403121561410a57600080fd5b81356001600160401b0381111561412057600080fd5b61338384828501613e65565b60006020828403121561413e57600080fd5b81356001600160401b0381111561415457600080fd5b61338384828501613c1f565b6020808252825182820181905260009190848201906040850190845b81811015611bff576141b783855180516001600160a01b031682526020808201516001600160401b0316908301526040908101511515910152565b928401926060929092019160010161417c565b6000806000806000608086880312156141e257600080fd5b6141eb86613d9c565b945060208601356001600160401b0381111561420657600080fd5b61421288828901614069565b9699909850959660408101359660609091013595509350505050565b600081518084526020808501945080840160005b8381101561425e57815187529582019590820190600101614242565b509495945050505050565b6020815260006111e8602083018461422e565b60008060006060848603121561429157600080fd5b61429a84613d9c565b95602085013595506040909401359392505050565b80358015158114613db357600080fd5b600080604083850312156142d257600080fd5b6142db83613d9c565b9150613ddb602084016142af565b600080600080608085870312156142ff57600080fd5b61430885613d9c565b935061431660208601613d9c565b92506040850135915060608501356001600160401b0381111561433857600080fd5b8501601f8101871361434957600080fd5b613f6087823560208401613e0e565b6000806040838503121561436b57600080fd5b82356001600160401b0381111561438157600080fd5b61438d85828601613c1f565b925050613ddb602084016142af565b6000806000606084860312156143b157600080fd5b83356001600160401b038111156143c757600080fd5b6143d386828701613e65565b9660208601359650604090950135949350505050565b81516001600160a01b031681526020808301516001600160401b03169082015260408083015115159082015260608101610d62565b60008060008060008060c0878903121561443757600080fd5b86359550602080880135955060408801359450606088013593506080880135925060a08801356001600160401b038082111561447257600080fd5b818a0191508a601f83011261448657600080fd5b8135614494613c4082613bfc565b81815260059190911b8301840190848101908d8311156144b357600080fd5b8585015b838110156144e95784813511156144cd57600080fd5b6144dc8f888335890101613e65565b83529186019186016144b7565b508096505050505050509295509295509295565b600080600080600080600060c0888a03121561451857600080fd5b87356001600160401b038082111561452f57600080fd5b61453b8b838c01613e65565b985060208a0135975060408a0135965060608a013591508082111561455f57600080fd5b5061456c8a828b01614069565b909550935061457f9050608089016142af565b915060a0880135905092959891949750929550565b600080604083850312156145a757600080fd5b6145b083613d9c565b9150613ddb60208401613d9c565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016145fc576145fc6145d4565b5060010190565b600181811c9082168061461757607f821691505b60208210810361463757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601c908201527f4552433732313a207472616e73666572206e6f7420616c6c6f77656400000000604082015260600190565b60008251614686818460208701613d20565b9190910192915050565b6020808252601d908201527f58616e614c616e643a20506c6f742073697a65206e6f742076616c6964000000604082015260600190565b6020808252601f908201527f58616e614c616e643a2053616c65206e6f742073746172746564207965742e00604082015260600190565b60208082526018908201527f58616e614c616e643a20416d6f756e74206973205a65726f0000000000000000604082015260600190565b60208082526023908201527f58616e614c616e643a20416d6f756e7420657863656564656420696e20706172604082015262616d7360e81b606082015260800190565b80820180821115610d6257610d626145d4565b60208082526026908201527f58616e614c616e643a204d6178204c696d6974205265616368656420666f722060408201526521b7b6b6b7b760d11b606082015260800190565b60208082526026908201527f58616e614c616e643a20506572207472616e73616374696f6e206c696d697420604082015265195e18d9595960d21b606082015260800190565b60208082526024908201527f58616e614c616e643a204e4654206c6f636b7570206e6f742065787069726564604082015263081e595d60e21b606082015260800190565b60808152600061486e608083018761422e565b6001600160a01b03959095166020830152506040810192909252606090910152919050565b60208082526019908201527f58616e614c616e643a204e6f742077686974656c697374656400000000000000604082015260600190565b60208082526022908201527f58616e614c616e643a205061696420616d6f756e7420696e73756666696369656040820152611b9d60f21b606082015260800190565b601f821115610d1157600081815260208120601f850160051c810160208610156149335750805b601f850160051c820191505b818110156130435782815560010161493f565b81516001600160401b0381111561496b5761496b613bb6565b61497f816149798454614603565b8461490c565b602080601f8311600181146149b4576000841561499c5750858301515b600019600386901b1c1916600185901b178555613043565b600085815260208120601f198616915b828110156149e3578886015182559484019460019091019084016149c4565b5085821015614a015787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000614a24604083018561422e565b905082151560208301529392505050565b60008351614a47818460208801613d20565b835190830190614a5b818360208801613d20565b01949350505050565b6001600160a01b038916815261010060208201819052600090614a898382018b613d44565b604084019990995250506060810195909552608085019390935260a084019190915260c0830152151560e09091015292915050565b8082028115828204841417610d6257610d626145d4565b634e487b7160e01b600052601260045260246000fd5b600082614afa57614afa614ad5565b500490565b81810381811115610d6257610d626145d4565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611abc90830184613d44565b600060208284031215614b5757600080fd5b81516111e881613ced565b600082614b7157614b71614ad5565b500690565b634e487b7160e01b600052603160045260246000fd5b6000608082016080835280875480835260a08501915088600052602092508260002060005b82811015614bcd57815484529284019260019182019101614bb1565b5050506001600160a01b03969096169083015250604081019290925260609091015291905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204dec6547dc9c491946a88817f1ca4f055f146778088af8ee6828b5e118aad53e64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000974657374206c616e640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000974657374206c616e640000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): test land
Arg [1] : _symbol (string): test land
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 74657374206c616e640000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 74657374206c616e640000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
70319:10800:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78187:210;;;;;;;;;;-1:-1:-1;78187:210:0;;;;;:::i;:::-;;:::i;:::-;;38785:305;;;;;;;;;;-1:-1:-1;38785:305:0;;;;;:::i;:::-;;:::i;:::-;;;2432:14:1;;2425:22;2407:41;;2395:2;2380:18;38785:305:0;;;;;;;;41904:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43431:204::-;;;;;;;;;;-1:-1:-1;43431:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3564:32:1;;;3546:51;;3534:2;3519:18;43431:204:0;3400:203:1;77165:116:0;;;;;;;;;;-1:-1:-1;77165:116:0;;;;;:::i;:::-;;:::i;68577:66::-;;;;;;;;;;-1:-1:-1;68577:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;4191:25:1;;;4179:2;4164:18;68577:66:0;4045:177:1;42970:395:0;;;;;;;;;;-1:-1:-1;42970:395:0;;;;;:::i;:::-;;:::i;72677:171::-;;;;;;;;;;-1:-1:-1;72677:171:0;;;;;:::i;:::-;;:::i;81003:109::-;;;;;;;;;;-1:-1:-1;81003:109:0;;;;;:::i;:::-;;:::i;38034:303::-;;;;;;;;;;-1:-1:-1;38288:12:0;;38272:13;;:28;-1:-1:-1;;38272:46:0;38034:303;;68284:25;;;;;;;;;;;;;;;;78814:208;;;;;;;;;;-1:-1:-1;78814:208:0;;;;;:::i;:::-;;:::i;48774:291::-;;;;;;;;;;-1:-1:-1;48774:291:0;;;;;:::i;:::-;;:::i;70986:228::-;;;;;;;;;;-1:-1:-1;70986:228:0;;;;;:::i;:::-;;:::i;723:29::-;;;;;;;;;;-1:-1:-1;723:29:0;;;;;:::i;:::-;;:::i;77763:110::-;;;;;;;;;;-1:-1:-1;77763:110:0;;;;;:::i;:::-;;:::i;80407:378::-;;;;;;:::i;:::-;;:::i;68124:50::-;;;;;;;;;;-1:-1:-1;68124:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8127:25:1;;;8183:2;8168:18;;8161:34;;;;8211:18;;;8204:34;;;;8269:2;8254:18;;8247:34;8312:3;8297:19;;8290:35;8114:3;8099:19;68124:50:0;7868:463:1;77930:249:0;;;;;;;;;;-1:-1:-1;77930:249:0;;;;;:::i;:::-;;:::i;78646:160::-;;;;;;;;;;;;;:::i;71258:646::-;;;;;;:::i;:::-;;:::i;49073:305::-;;;;;;;;;;-1:-1:-1;49073:305:0;;;;;:::i;:::-;;:::i;76966:151::-;;;;;;;;;;-1:-1:-1;76966:151:0;;;;;:::i;:::-;;:::i;68183:65::-;;;;;;;;;;-1:-1:-1;68183:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77333:104;;;;;;;;;;-1:-1:-1;77333:104:0;;;;;:::i;:::-;;:::i;61919:459::-;;;;;;;;;;-1:-1:-1;61919:459:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;79284:237::-;;;;;;;;;;-1:-1:-1;79284:237:0;;;;;:::i;:::-;;:::i;37295:45::-;;;;;;;;;;-1:-1:-1;37295:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;68534:34;;;;;;;;;;;;;;;;41712:125;;;;;;;;;;-1:-1:-1;41712:125:0;;;;;:::i;:::-;;:::i;80889:105::-;;;;;;;;;;-1:-1:-1;80889:105:0;;;;;:::i;:::-;;:::i;68502:23::-;;;;;;;;;;;;;;;;67923:21;;;;;;;;;;;;;:::i;80789:92::-;;;;;;;;;;-1:-1:-1;80789:92:0;;;;;:::i;:::-;;:::i;39160:206::-;;;;;;;;;;-1:-1:-1;39160:206:0;;;;;:::i;:::-;;:::i;6691:103::-;;;;;;;;;;;;;:::i;75897:235::-;;;;;;;;;;-1:-1:-1;75897:235:0;;;;;:::i;:::-;;:::i;68254:26::-;;;;;;;;;;;;;;;;65718:882;;;;;;;;;;-1:-1:-1;65718:882:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37349:49::-;;;;;;;;;;-1:-1:-1;37349:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;68435:58;;;;;;;;;;-1:-1:-1;68435:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13026:25:1;;;13082:2;13067:18;;13060:34;;;;13110:18;;;13103:34;13180:14;13173:22;13168:2;13153:18;;13146:50;13013:3;12998:19;68435:58:0;12801:401:1;6043:87:0;;;;;;;;;;-1:-1:-1;6116:6:0;;-1:-1:-1;;;;;6116:6:0;6043:87;;42073:104;;;;;;;;;;;;;:::i;62768:2501::-;;;;;;;;;;-1:-1:-1;62768:2501:0;;;;;:::i;:::-;;:::i;79030:246::-;;;;;;;;;;-1:-1:-1;79030:246:0;;;;;:::i;:::-;;:::i;607:43::-;;;;;;;;;;-1:-1:-1;607:43:0;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;607:43:0;;;43707:317;;;;;;;;;;-1:-1:-1;43707:317:0;;;;;:::i;:::-;;:::i;78405:208::-;;;;;;;;;;-1:-1:-1;78405:208:0;;;;;:::i;:::-;;:::i;76138:146::-;;;;;;;;;;-1:-1:-1;76138:146:0;;;;;:::i;:::-;;:::i;49386:490::-;;;;;;;;;;-1:-1:-1;49386:490:0;;;;;:::i;:::-;;:::i;79529:483::-;;;;;;;;;;-1:-1:-1;79529:483:0;;;;;:::i;:::-;;:::i;68724:74::-;;;;;;;;;;-1:-1:-1;68724:74:0;;;;;:::i;:::-;;:::i;61351:409::-;;;;;;;;;;-1:-1:-1;61351:409:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;75527:327::-;;;;;;;;;;-1:-1:-1;75527:327:0;;;;;:::i;:::-;;:::i;80019:382::-;;;;;;:::i;:::-;;:::i;76506:452::-;;;;;;;;;;-1:-1:-1;76506:452:0;;;;;:::i;:::-;;:::i;72892:1252::-;;;;;;:::i;:::-;;:::i;77474:98::-;;;;;;;;;;-1:-1:-1;77474:98:0;;;;;:::i;:::-;;:::i;74858:532::-;;;;;;;;;;-1:-1:-1;74858:532:0;;;;;:::i;:::-;;:::i;44095:164::-;;;;;;;;;;-1:-1:-1;44095:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;44216:25:0;;;44192:4;44216:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;44095:164;77665:92;;;;;;;;;;-1:-1:-1;77665:92:0;;;;;:::i;:::-;;:::i;6949:201::-;;;;;;;;;;-1:-1:-1;6949:201:0;;;;;:::i;:::-;;:::i;78187:210::-;5929:13;:11;:13::i;:::-;78292:9:::1;78288:102;78307:7;:14;78304:1;:17;78288:102;;;78362:11;78374:1;78362:14;;;;;;;;:::i;:::-;;;;;;;78337:10;:22;78348:7;78356:1;78348:10;;;;;;;;:::i;:::-;;;;;;;78337:22;;;;;;;;;;;:39;;;;78322:3;;;;;:::i;:::-;;;;78288:102;;;;78187:210:::0;;:::o;38785:305::-;38887:4;-1:-1:-1;;;;;;38924:40:0;;-1:-1:-1;;;38924:40:0;;:105;;-1:-1:-1;;;;;;;38981:48:0;;-1:-1:-1;;;38981:48:0;38924:105;:158;;;-1:-1:-1;;;;;;;;;;34225:40:0;;;39046:36;38904:178;38785:305;-1:-1:-1;;38785:305:0:o;41904:100::-;41958:13;41991:5;41984:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41904:100;:::o;43431:204::-;43499:7;43524:16;43532:7;43524;:16::i;:::-;43519:64;;43549:34;;-1:-1:-1;;;43549:34:0;;;;;;;;;;;43519:64;-1:-1:-1;43603:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;43603:24:0;;43431:204::o;77165:116::-;5929:13;:11;:13::i;:::-;77246:7:::1;:27:::0;77165:116::o;42970:395::-;-1:-1:-1;;;;;37636:23:0;;;;;;:17;:23;;;;;;43036:2;;37636:23;;37628:63;;;;-1:-1:-1;;;37628:63:0;;;;;;;:::i;:::-;;;;;;;;;43067:13:::1;43083:24;43099:7;43083:15;:24::i;:::-;43067:40;;43128:5;-1:-1:-1::0;;;;;43122:11:0::1;:2;-1:-1:-1::0;;;;;43122:11:0::1;::::0;43118:48:::1;;43142:24;;-1:-1:-1::0;;;43142:24:0::1;;;;;;;;;;;43118:48;4676:10:::0;-1:-1:-1;;;;;43183:21:0;::::1;;::::0;::::1;::::0;:63:::1;;-1:-1:-1::0;43209:37:0::1;43226:5:::0;4676:10;44095:164;:::i;43209:37::-:1;43208:38;43183:63;43179:138;;;43270:35;;-1:-1:-1::0;;;43270:35:0::1;;;;;;;;;;;43179:138;43329:28;43338:2;43342:7;43351:5;43329:8;:28::i;:::-;43056:309;42970:395:::0;;;:::o;72677:171::-;5929:13;:11;:13::i;:::-;72832:8:::1;72797:17;72815:6;72797:25;;;;;;:::i;:::-;;;;;;;;;;;;;:32;72823:5;72797:32;;;;;;;;;;;:43;;;;;;;;;;;;:::i;81003:109::-:0;5929:13;:11;:13::i;:::-;-1:-1:-1;;;;;81075:21:0::1;81099:5;81075:21:::0;;;:15:::1;:21;::::0;;;;:29;;-1:-1:-1;;81075:29:0::1;::::0;;81003:109::o;78814:208::-;69549:9;69561:12;;;:5;:12;;;;;;:20;;78915:10;;78926:5;;78933:6;;69561:20;;78933:6;;69561:20;:::i;:::-;;;;;;;;;;;;;:25;;;69549:37;;69652:5;:12;69658:5;69652:12;;;;;;;;;;;69665:6;69652:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;;;69644:69;;;;-1:-1:-1;;;69644:69:0;;;;;;;:::i;:::-;69791:6;;69801:1;69791:11;69783:56;;;;-1:-1:-1;;;69783:56:0;;;;;;;:::i;:::-;69872:1;69858:11;:15;69850:53;;;;-1:-1:-1;;;69850:53:0;;;;;;;:::i;:::-;69937:7;;69922:11;:22;;69914:71;;;;-1:-1:-1;;;69914:71:0;;;;;;;:::i;:::-;70023:12;;;;:5;:12;;;;;;;:20;;;;70036:6;;70023:20;:::i;:::-;;;;;;;;;;;;;;:26;;;70004:15;70008:11;70004:1;:15;:::i;:::-;:45;;69996:97;;;;-1:-1:-1;;;69996:97:0;;;;;;;:::i;:::-;70129:19;;70114:11;:34;;70106:87;;;;-1:-1:-1;;;70106:87:0;;;;;;;:::i;:::-;-1:-1:-1;70204:8:0;5929:13:::1;:11;:13::i;:::-;78969:45:::2;78977:3;78981:10;78993:6;79001:5;79008;78969:7;:45::i;:::-;69538:694:::0;78814:208;;;;;;;:::o;48774:291::-;48910:19;;;;:10;:19;;;;;;48933:15;-1:-1:-1;48910:38:0;;:66;;-1:-1:-1;48952:19:0;;;;:10;:19;;;;;;:24;48910:66;48902:116;;;;-1:-1:-1;;;48902:116:0;;;;;;;:::i;:::-;49029:28;49039:4;49045:2;49049:7;49029:9;:28::i;70986:228::-;71071:7;71111:12;;;:5;:12;;;;;;:20;;71098:108;;71111:12;:20;;71124:6;;71111:20;:::i;:::-;;;;;;;;;;;;;:25;;;71138:67;71151:48;71164:5;:12;71170:5;71164:12;;;;;;;;;;;71177:6;71164:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:25;71190:8;;71151:12;:48::i;:::-;71201:3;71138:12;:67::i;:::-;71098:12;:108::i;:::-;71091:115;70986:228;-1:-1:-1;;;70986:228:0:o;723:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;77763:110::-;5929:13;:11;:13::i;:::-;77838:19:::1;:27:::0;77763:110::o;80407:378::-;80537:15;;80513:9;;80556:1;-1:-1:-1;80537:20:0;80529:58;;;;-1:-1:-1;;;80529:58:0;;23011:2:1;80529:58:0;;;22993:21:1;23050:2;23030:18;;;23023:30;-1:-1:-1;;;23069:18:1;;;23062:55;23134:18;;80529:58:0;22809:349:1;80529:58:0;80620:12;;80612:52;;80595:12;;-1:-1:-1;;;;;80620:12:0;;80646:13;;80595:12;80612:52;80595:12;80612:52;80646:13;80620:12;80612:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;80594:70;;;80675:7;80671:44;;80684:31;;-1:-1:-1;;;80684:31:0;;23575:2:1;80684:31:0;;;23557:21:1;23614:2;23594:18;;;23587:30;-1:-1:-1;;;23633:18:1;;;23626:51;23694:18;;80684:31:0;23373:345:1;80671:44:0;80727:52;80739:8;80748:10;80759:13;80774:4;80727:52;;;;;;;;;:::i;:::-;;;;;;;;80482:303;;80407:378;;:::o;77930:249::-;5929:13;:11;:13::i;:::-;78074:5:::1;78045;:12;78051:5;78045:12;;;;;;;;;;;78058:7;78045:21;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;:34;;;;:26:::1;78090:12:::0;;;:5:::1;:12:::0;;;;;78120:6;;78090:21:::1;::::0;78103:7;;78090:21:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;:27:::1;::::0;;::::1;:36:::0;;;;78137:12:::1;::::0;;;:5:::1;:12:::0;;;;;:21:::1;::::0;78150:7;;78137:21:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:27:::1;;:34:::0;;;::::1;;-1:-1:-1::0;;78137:34:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;77930:249:0:o;78646:160::-;5929:13;:11;:13::i;:::-;78713:58:::1;::::0;78695:12:::1;::::0;78721:10:::1;::::0;78745:21:::1;::::0;78695:12;78713:58;78695:12;78713:58;78745:21;78721:10;78713:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78694:77;;;78790:7;78782:16;;;::::0;::::1;;78683:123;78646:160::o:0;71258:646::-;71346:11;71358:1;69459:773;;;;;;;;;;;;;-1:-1:-1;;;69459:773:0;;;69549:9;69561:5;:12;69567:5;69561:12;;;;;;;;;;;69574:6;69561:20;;;;;;:::i;:::-;;;;;;;;;;;;;:25;;;69549:37;;69652:5;:12;69658:5;69652:12;;;;;;;;;;;69665:6;69652:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;;;69644:69;;;;-1:-1:-1;;;69644:69:0;;;;;;;:::i;:::-;69791:6;;69801:1;69791:11;69783:56;;;;-1:-1:-1;;;69783:56:0;;;;;;;:::i;:::-;69872:1;69858:11;:15;69850:53;;;;-1:-1:-1;;;69850:53:0;;;;;;;:::i;:::-;69937:7;;69922:11;:22;;69914:71;;;;-1:-1:-1;;;69914:71:0;;;;;;;:::i;:::-;70023:12;;;;:5;:12;;;;;;;:20;;;;70036:6;;70023:20;:::i;:::-;;;;;;;;;;;;;;:26;;;70004:15;70008:11;70004:1;:15;:::i;:::-;:45;;69996:97;;;;-1:-1:-1;;;69996:97:0;;;;;;;:::i;:::-;70129:19;;70114:11;:34;;70106:87;;;;-1:-1:-1;;;70106:87:0;;;;;;;:::i;:::-;-1:-1:-1;71399:31:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;71399:31:0::1;::::0;::::1;::::0;70204:8;;71455:1:::1;71520:43;71535:11:::0;71548:5;;71555:1:::1;71455::::0;71520:14:::1;:43::i;:::-;71512:81;;;;-1:-1:-1::0;;;71512:81:0::1;;;;;;;:::i;:::-;71631:10;71616:14;:26:::0;;;:14;::::1;:26:::0;:14;:26;;:41;;71646:11;;71616:14;:41:::1;::::0;71646:11;;71616:41:::1;:::i;:::-;::::0;;;-1:-1:-1;71727:57:0::1;::::0;-1:-1:-1;71740:31:0::1;71758:5:::0;71764:6;71740:17:::1;:31::i;:::-;71772:11;71727:12;:57::i;:::-;71714:9;:70;;71706:117;;;;-1:-1:-1::0;;;71706:117:0::1;;;;;;;:::i;:::-;71834:52;71842:10;71853:11;71866:6;71874:5;71881:4;71834:7;:52::i;:::-;71388:516;;69538:694:::0;71258:646;;;;;;:::o;49073:305::-;49212:19;;;;:10;:19;;;;;;49235:15;-1:-1:-1;49212:38:0;;:66;;-1:-1:-1;49254:19:0;;;;:10;:19;;;;;;:24;49212:66;49204:116;;;;-1:-1:-1;;;49204:116:0;;;;;;;:::i;:::-;49331:39;49348:4;49354:2;49358:7;49331:39;;;;;;;;;;;;:16;:39::i;76966:151::-;5929:13;:11;:13::i;:::-;77104:5:::1;77064:29:::0;;;:14:::1;:29;::::0;;;;;:37;;::::1;::::0;77094:6;;77064:37:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:45;;;::::1;;-1:-1:-1::0;;77064:45:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;76966:151:0:o;77333:104::-;5929:13;:11;:13::i;:::-;77408:7:::1;:21;77418:11:::0;77408:7;:21:::1;:::i;:::-;;77333:104:::0;:::o;61919:459::-;62085:15;;61999:23;;62060:22;62085:15;-1:-1:-1;;;;;62152:36:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;62152:36:0;;-1:-1:-1;;62152:36:0;;;;;;;;;;;;62115:73;;62208:9;62203:125;62224:14;62219:1;:19;62203:125;;62280:32;62300:8;62309:1;62300:11;;;;;;;;:::i;:::-;;;;;;;62280:19;:32::i;:::-;62264:10;62275:1;62264:13;;;;;;;;:::i;:::-;;;;;;;;;;:48;62240:3;;62203:125;;;-1:-1:-1;62349:10:0;61919:459;-1:-1:-1;;;61919:459:0:o;79284:237::-;79374:10;79346:24;79362:7;79346:15;:24::i;:::-;-1:-1:-1;;;;;79346:38:0;;79338:63;;;;-1:-1:-1;;;79338:63:0;;27393:2:1;79338:63:0;;;27375:21:1;27432:2;27412:18;;;27405:30;-1:-1:-1;;;27451:18:1;;;27444:42;27503:18;;79338:63:0;27191:336:1;79338:63:0;79419:19;;;;:10;:19;;;;;;79442:14;79419:37;79411:69;;;;-1:-1:-1;;;79411:69:0;;27734:2:1;79411:69:0;;;27716:21:1;27773:2;27753:18;;;27746:30;-1:-1:-1;;;27792:18:1;;;27785:49;27851:18;;79411:69:0;27532:343:1;79411:69:0;79512:1;79490:19;;;:10;:19;;;;;:23;79284:237::o;41712:125::-;41776:7;41803:21;41816:7;41803:12;:21::i;:::-;:26;;41712:125;-1:-1:-1;;41712:125:0:o;80889:105::-;5929:13;:11;:13::i;:::-;-1:-1:-1;;;;;80958:21:0::1;;::::0;;;:15:::1;:21;::::0;;;;:28;;-1:-1:-1;;80958:28:0::1;80982:4;80958:28;::::0;;80889:105::o;67923:21::-;;;;;;;:::i;80789:92::-;5929:13;:11;:13::i;:::-;80856:12:::1;:19:::0;;-1:-1:-1;;;;;;80856:19:0::1;-1:-1:-1::0;;;;;80856:19:0;;;::::1;::::0;;;::::1;::::0;;80789:92::o;39160:206::-;39224:7;-1:-1:-1;;;;;39248:19:0;;39244:60;;39276:28;;-1:-1:-1;;;39276:28:0;;;;;;;;;;;39244:60;-1:-1:-1;;;;;;39330:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;39330:27:0;;39160:206::o;6691:103::-;5929:13;:11;:13::i;:::-;6756:30:::1;6783:1;6756:18;:30::i;:::-;6691:103::o:0;75897:235::-;76025:4;76049:75;76057:24;76063:7;76072:8;76057:5;:24::i;:::-;76083:5;;76049:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;76090:28:0;;;:13;:28;;;;;:33;;;;-1:-1:-1;76049:7:0;;-1:-1:-1;;76049:75:0:i;:::-;76042:82;75897:235;-1:-1:-1;;;;;;75897:235:0:o;65718:882::-;65779:16;65833:19;65867:25;65907:22;65932:16;65942:5;65932:9;:16::i;:::-;65907:41;;65963:25;66005:14;-1:-1:-1;;;;;65991:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;65991:29:0;;65963:57;;66035:31;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;66035:31:0;37891:1;66081:471;66130:14;66115:11;:29;66081:471;;66182:14;;;;:11;:14;;;;;;;;;66170:26;;;;;;;;;-1:-1:-1;;;;;66170:26:0;;;;-1:-1:-1;;;66170:26:0;;-1:-1:-1;;;;;66170:26:0;;;;;;;;-1:-1:-1;;;66170:26:0;;;;;;;;;;;;;;-1:-1:-1;66260:8:0;66215:73;66310:14;;-1:-1:-1;;;;;66310:28:0;;66306:111;;66383:14;;;-1:-1:-1;66306:111:0;66460:5;-1:-1:-1;;;;;66439:26:0;:17;-1:-1:-1;;;;;66439:26:0;;66435:102;;66516:1;66490:8;66499:13;;;;;;66490:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;66435:102;66146:3;;66081:471;;;-1:-1:-1;66573:8:0;;65718:882;-1:-1:-1;;;;;;65718:882:0:o;42073:104::-;42129:13;42162:7;42155:14;;;;;:::i;62768:2501::-;62894:16;62960:4;62952:5;:12;62948:44;;;62973:19;;-1:-1:-1;;;62973:19:0;;;;;;;;;;;62948:44;63061:13;;63007:19;;63077:1;63061:17;63164:15;37891:1;;37808:92;63164:15;63156:5;:23;63152:87;;;37891:1;63200:23;;63152:87;63319:9;63312:4;:16;63308:73;;;63356:9;63349:16;;63308:73;63395:25;63423:16;63433:5;63423:9;:16::i;:::-;63395:44;;63617:4;63609:5;:12;63605:278;;;63664:12;;;63699:31;;;63695:111;;;63775:11;63755:31;;63695:111;63623:198;63605:278;;;-1:-1:-1;63866:1:0;63605:278;63897:25;63939:17;-1:-1:-1;;;;;63925:32:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63925:32:0;;63897:60;;63976:17;63997:1;63976:22;63972:78;;64026:8;-1:-1:-1;64019:15:0;;-1:-1:-1;;;64019:15:0;63972:78;64194:31;64228:26;64248:5;64228:19;:26::i;:::-;64194:60;;64269:25;64514:9;:16;;;64509:92;;-1:-1:-1;64571:14:0;;64509:92;64632:5;64615:477;64644:4;64639:1;:9;;:45;;;;;64667:17;64652:11;:32;;64639:45;64615:477;;;64722:14;;;;:11;:14;;;;;;;;;64710:26;;;;;;;;;-1:-1:-1;;;;;64710:26:0;;;;-1:-1:-1;;;64710:26:0;;-1:-1:-1;;;;;64710:26:0;;;;;;;;-1:-1:-1;;;64710:26:0;;;;;;;;;;;;;;-1:-1:-1;64800:8:0;64755:73;64850:14;;-1:-1:-1;;;;;64850:28:0;;64846:111;;64923:14;;;-1:-1:-1;64846:111:0;65000:5;-1:-1:-1;;;;;64979:26:0;:17;-1:-1:-1;;;;;64979:26:0;;64975:102;;65056:1;65030:8;65039:13;;;;;;65030:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;64975:102;64686:3;;64615:477;;;-1:-1:-1;;;65177:29:0;;;-1:-1:-1;65177:29:0;;62768:2501;-1:-1:-1;;;;;62768:2501:0:o;79030:246::-;79118:10;79090:24;79106:7;79090:15;:24::i;:::-;-1:-1:-1;;;;;79090:38:0;;79082:63;;;;-1:-1:-1;;;79082:63:0;;27393:2:1;79082:63:0;;;27375:21:1;27432:2;27412:18;;;27405:30;-1:-1:-1;;;27451:18:1;;;27444:42;27503:18;;79082:63:0;27191:336:1;79082:63:0;79163:19;;;;:10;:19;;;;;;79186:14;79163:37;79155:67;;;;-1:-1:-1;;;79155:67:0;;28082:2:1;79155:67:0;;;28064:21:1;28121:2;28101:18;;;28094:30;-1:-1:-1;;;28140:18:1;;;28133:47;28197:18;;79155:67:0;27880:341:1;79155:67:0;79232:19;;;;:10;:19;;;;;79254:14;79232:36;;79030:246::o;43707:317::-;-1:-1:-1;;;;;37636:23:0;;;;;;:17;:23;;;;;;43787:8;;37636:23;;37628:63;;;;-1:-1:-1;;;37628:63:0;;;;;;;:::i;:::-;4676:10;-1:-1:-1;;;;;43836:24:0;::::1;::::0;43832:54:::1;;43869:17;;-1:-1:-1::0;;;43869:17:0::1;;;;;;;;;;;43832:54;4676:10:::0;43899:32:::1;::::0;;;:18:::1;:32;::::0;;;;;;;-1:-1:-1;;;;;43899:42:0;::::1;::::0;;;;;;;;;;:53;;-1:-1:-1;;43899:53:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43968:48;;2407:41:1;;;43899:42:0;;4676:10;43968:48:::1;::::0;2380:18:1;43968:48:0::1;;;;;;;43707:317:::0;;;:::o;78405:208::-;5929:13;:11;:13::i;:::-;-1:-1:-1;;;;;78496:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;:33;::::1;;:23;::::0;;::::1;:33;;::::0;78488:74:::1;;;::::0;-1:-1:-1;;;78488:74:0;;28428:2:1;78488:74:0::1;::::0;::::1;28410:21:1::0;28467:2;28447:18;;;28440:30;28506;28486:18;;;28479:58;28554:18;;78488:74:0::1;28226:352:1::0;78488:74:0::1;-1:-1:-1::0;;;;;78573:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:32;;-1:-1:-1;;78573:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;78405:208::o;76138:146::-;76246:29;;;-1:-1:-1;;;;;28775:32:1;;76246:29:0;;;28757:51:1;28824:18;;;28817:34;;;76209:7:0;;28730:18:1;;76246:29:0;;;;;;;;;;;;76236:40;;;;;;76229:47;;76138:146;;;;:::o;49386:490::-;49555:19;;;;:10;:19;;;;;;49578:15;-1:-1:-1;49555:38:0;;:66;;-1:-1:-1;49597:19:0;;;;:10;:19;;;;;;:24;49555:66;49547:116;;;;-1:-1:-1;;;49547:116:0;;;;;;;:::i;:::-;49674:28;49684:4;49690:2;49694:7;49674:9;:28::i;:::-;-1:-1:-1;;;;;49717:13:0;;23731:19;:23;;49717:76;;;;;49737:56;49768:4;49774:2;49778:7;49787:5;49737:30;:56::i;:::-;49736:57;49717:76;49713:156;;;49817:40;;-1:-1:-1;;;49817:40:0;;;;;;;;;;;79529:483;79635:10;79619:27;;;;:15;:27;;;;;;;;79611:53;;;;-1:-1:-1;;;79611:53:0;;29064:2:1;79611:53:0;;;29046:21:1;29103:2;29083:18;;;29076:30;-1:-1:-1;;;29122:18:1;;;29115:43;29175:18;;79611:53:0;28862:337:1;79611:53:0;79673:6;79670:294;;;79696:13;79691:129;79723:8;:15;79715:5;:23;79691:129;;;79798:14;79768:10;:27;79779:8;79788:5;79779:15;;;;;;;;:::i;:::-;;;;;;;79768:27;;;;;;;;;;;:44;;;;79740:7;;;;;:::i;:::-;;;;79691:129;;;;79670:294;;;79847:13;79842:116;79874:8;:15;79866:5;:23;79842:116;;;79949:1;79919:10;:27;79930:8;79939:5;79930:15;;;;;;;;:::i;:::-;;;;;;;79919:27;;;;;;;;;;;:31;;;;79891:7;;;;;:::i;:::-;;;;79842:116;;;;79670:294;79975:31;79989:8;79999:6;79975:31;;;;;;;:::i;:::-;;;;;;;;79529:483;;:::o;68724:74::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;68724:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;61351:409::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37891:1:0;61498:25;;;:53;;;61538:13;;61527:7;:24;;61498:53;61494:102;;;61575:9;61351:409;-1:-1:-1;;61351:409:0:o;61494:102::-;-1:-1:-1;61618:20:0;;;;:11;:20;;;;;;;;;61606:32;;;;;;;;;-1:-1:-1;;;;;61606:32:0;;;;-1:-1:-1;;;61606:32:0;;-1:-1:-1;;;;;61606:32:0;;;;;;;;-1:-1:-1;;;61606:32:0;;;;;;;;;;;;;;;;61649:65;;61693:9;61351:409;-1:-1:-1;;61351:409:0:o;61649:65::-;61731:21;61744:7;61731:12;:21::i;75527:327::-;75600:13;75630:16;75638:7;75630;:16::i;:::-;75622:62;;;;-1:-1:-1;;;75622:62:0;;29753:2:1;75622:62:0;;;29735:21:1;29792:2;29772:18;;;29765:30;29831:34;29811:18;;;29804:62;-1:-1:-1;;;29882:18:1;;;29875:31;29923:19;;75622:62:0;29551:397:1;75622:62:0;75691:28;75722:10;:8;:10::i;:::-;75691:41;;75777:1;75752:14;75746:28;:32;:100;;;;;;;;;;;;;;;;;75805:14;75821:18;:7;:16;:18::i;:::-;75788:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;75739:107;75527:327;-1:-1:-1;;;75527:327:0:o;80019:382::-;80151:15;;80127:9;;80170:1;-1:-1:-1;80151:20:0;80143:58;;;;-1:-1:-1;;;80143:58:0;;23011:2:1;80143:58:0;;;22993:21:1;23050:2;23030:18;;;23023:30;-1:-1:-1;;;23069:18:1;;;23062:55;23134:18;;80143:58:0;22809:349:1;80143:58:0;80234:12;;80226:52;;80209:12;;-1:-1:-1;;;;;80234:12:0;;80260:13;;80209:12;80226:52;80209:12;80226:52;80260:13;80234:12;80226:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;80208:70;;;80289:7;80285:44;;80298:31;;-1:-1:-1;;;80298:31:0;;23575:2:1;80298:31:0;;;23557:21:1;23614:2;23594:18;;;23587:30;-1:-1:-1;;;23633:18:1;;;23626:51;23694:18;;80298:31:0;23373:345:1;80285:44:0;80341:54;80355:8;80364:10;80375:13;80390:4;80341:54;;;;;;;;;:::i;76506:452::-;5929:13;:11;:13::i;:::-;76717:90:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;76755:28:0;;;:13:::1;:28:::0;;;;;;:33:::1;::::0;::::1;::::0;;76717:90;;;;;;;;;;;;76686:28;;;;;;;:121;;;;;;::::1;::::0;::::1;::::0;;;-1:-1:-1;76686:121:0;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;76818:133:::1;76848:7;:14;76840:5;:22;76818:133;;;76935:4;76887:14;:29;76902:13;76887:29;;;;;;;;;;;76917:7;76925:5;76917:14;;;;;;;;:::i;:::-;;;;;;;76887:45;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:52;;;::::1;;-1:-1:-1::0;;76887:52:0;;::::1;::::0;;;::::1;::::0;;76864:7;::::1;::::0;::::1;:::i;:::-;;;;76818:133;;;;76506:452:::0;;;;;;:::o;72892:1252::-;69549:9;69561:12;;;:5;:12;;;;;;:20;;73042:11;;73054:5;;73061:6;;69561:20;;73061:6;;69561:20;:::i;:::-;;;;;;;;;;;;;:25;;;69549:37;;69652:5;:12;69658:5;69652:12;;;;;;;;;;;69665:6;69652:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;;;69644:69;;;;-1:-1:-1;;;69644:69:0;;;;;;;:::i;:::-;69791:6;;69801:1;69791:11;69783:56;;;;-1:-1:-1;;;69783:56:0;;;;;;;:::i;:::-;69872:1;69858:11;:15;69850:53;;;;-1:-1:-1;;;69850:53:0;;;;;;;:::i;:::-;69937:7;;69922:11;:22;;69914:71;;;;-1:-1:-1;;;69914:71:0;;;;;;;:::i;:::-;70023:12;;;;:5;:12;;;;;;;:20;;;;70036:6;;70023:20;:::i;:::-;;;;;;;;;;;;;;:26;;;70004:15;70008:11;70004:1;:15;:::i;:::-;:45;;69996:97;;;;-1:-1:-1;;;69996:97:0;;;;;;;:::i;:::-;70129:19;;70114:11;:34;;70106:87;;;;-1:-1:-1;;;70106:87:0;;;;;;;:::i;:::-;-1:-1:-1;70204:8:0;73105:12;;;:5:::1;:12;::::0;;;;;:20;;::::1;::::0;73118:6;;73105:20:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:26:::1;;::::0;::::1;;73097:69;;;;-1:-1:-1::0;;;73097:69:0::1;;;;;;;:::i;:::-;73185:29;::::0;;;:14:::1;:29;::::0;;;;;;:37;;::::1;::::0;73215:6;;73185:37:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;::::1;;73177:67;;;::::0;-1:-1:-1;;;73177:67:0;;30656:2:1;73177:67:0::1;::::0;::::1;30638:21:1::0;30695:2;30675:18;;;30668:30;-1:-1:-1;;;30714:18:1;;;30707:47;30771:18;;73177:67:0::1;30454:341:1::0;73177:67:0::1;73258:6;;73268:1;73258:11:::0;73255:130:::1;;73279:18:::0;;73271:57:::1;;;::::0;-1:-1:-1;;;73271:57:0;;31002:2:1;73271:57:0::1;::::0;::::1;30984:21:1::0;31041:2;31021:18;;;31014:30;31080:28;31060:18;;;31053:56;31126:18;;73271:57:0::1;30800:350:1::0;73271:57:0::1;73255:130;;;73352:13;73369:1;73352:18:::0;73344:41:::1;;;::::0;-1:-1:-1;;;73344:41:0;;31357:2:1;73344:41:0::1;::::0;::::1;31339:21:1::0;31396:2;31376:18;;;31369:30;-1:-1:-1;;;31415:18:1;;;31408:40;31465:18;;73344:41:0::1;31155:334:1::0;73344:41:0::1;73404:60;73419:11;73432:5;;73440:13;73456:7;73404:14;:60::i;:::-;73396:98;;;;-1:-1:-1::0;;;73396:98:0::1;;;;;;;:::i;:::-;73548:26;::::0;;;:11:::1;:26;::::0;;;;;;;73575:10:::1;73548:38:::0;;;;;;;:53;;73590:11;;73548:26;:53:::1;::::0;73590:11;;73548:53:::1;:::i;:::-;::::0;;;-1:-1:-1;;73714:12:0::1;::::0;;;:5:::1;:12;::::0;;;;;;:20;;73701:51:::1;::::0;73714:12;:20:::1;::::0;73727:6;;73714:20:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:25;73740:11;73701:12:::1;:51::i;:::-;73688:9;:64;;73680:111;;;;-1:-1:-1::0;;;73680:111:0::1;;;;;;;:::i;:::-;73901:1;73859:17;73877:6;73859:25;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;:32:::1;::::0;;;;;;;:39;:43:::1;:101:::0;::::1;;;;73949:11;73906:17;73924:6;73906:25;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;:32:::1;::::0;;;;;;;:39;:54:::1;;73859:101;73856:262;;;73976:44;73993:6;74001:5;74008:11;73976:16;:44::i;:::-;73856:262;;;74053:53;74061:10;74072:11;74085:6;74093:5;74100;74053:7;:53::i;:::-;69538:694:::0;72892:1252;;;;;;;;;;:::o;77474:98::-;5929:13;:11;:13::i;:::-;77543:8:::1;:21:::0;77474:98::o;74858:532::-;74936:11;74949:1;69459:773;;;;;;;;;;;;;-1:-1:-1;;;69459:773:0;;;69549:9;69561:5;:12;69567:5;69561:12;;;;;;;;;;;69574:6;69561:20;;;;;;:::i;:::-;;;;;;;;;;;;;:25;;;69549:37;;69652:5;:12;69658:5;69652:12;;;;;;;;;;;69665:6;69652:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;;;69644:69;;;;-1:-1:-1;;;69644:69:0;;;;;;;:::i;:::-;69791:6;;69801:1;69791:11;69783:56;;;;-1:-1:-1;;;69783:56:0;;;;;;;:::i;:::-;69872:1;69858:11;:15;69850:53;;;;-1:-1:-1;;;69850:53:0;;;;;;;:::i;:::-;69937:7;;69922:11;:22;;69914:71;;;;-1:-1:-1;;;69914:71:0;;;;;;;:::i;:::-;70023:12;;;;:5;:12;;;;;;;:20;;;;70036:6;;70023:20;:::i;:::-;;;;;;;;;;;;;;:26;;;70004:15;70008:11;70004:1;:15;:::i;:::-;:45;;69996:97;;;;-1:-1:-1;;;69996:97:0;;;;;;;:::i;:::-;70129:19;;70114:11;:34;;70106:87;;;;-1:-1:-1;;;70106:87:0;;;;;;;:::i;:::-;-1:-1:-1;74981:31:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;74981:31:0::1;::::0;::::1;::::0;70204:8;;75037:1:::1;75118:43;75133:11:::0;75146:5;;75153:1:::1;75037::::0;75118:14:::1;:43::i;:::-;75110:81;;;;-1:-1:-1::0;;;75110:81:0::1;;;;;;;:::i;:::-;75219:10;75204:14;:26:::0;;;:14;::::1;:26:::0;:14;:26;;:41;;75234:11;;75204:14;:41:::1;::::0;75234:11;;75204:41:::1;:::i;:::-;::::0;;;-1:-1:-1;75320:53:0::1;::::0;-1:-1:-1;75328:10:0::1;75339:11:::0;75352:6;75360:5;75367::::1;75320:7;:53::i;77665:92::-:0;5929:13;:11;:13::i;:::-;77733:6:::1;:16:::0;77665:92::o;6949:201::-;5929:13;:11;:13::i;:::-;-1:-1:-1;;;;;7038:22:0;::::1;7030:73;;;::::0;-1:-1:-1;;;7030:73:0;;31696:2:1;7030:73:0::1;::::0;::::1;31678:21:1::0;31735:2;31715:18;;;31708:30;31774:34;31754:18;;;31747:62;-1:-1:-1;;;31825:18:1;;;31818:36;31871:19;;7030:73:0::1;31494:402:1::0;7030:73:0::1;7114:28;7133:8;7114:18;:28::i;6208:132::-:0;6116:6;;-1:-1:-1;;;;;6116:6:0;4676:10;6272:23;6264:68;;;;-1:-1:-1;;;6264:68:0;;32103:2:1;6264:68:0;;;32085:21:1;;;32122:18;;;32115:30;32181:34;32161:18;;;32154:62;32233:18;;6264:68:0;31901:356:1;44516:174:0;44573:4;44616:7;37891:1;44597:26;;:53;;;;;44637:13;;44627:7;:23;44597:53;:85;;;;-1:-1:-1;;44655:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;44655:27:0;;;;44654:28;;44516:174::o;57370:196::-;57485:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;57485:29:0;-1:-1:-1;;;;;57485:29:0;;;;;;;;;57530:28;;57485:24;;57530:28;;;;;;;57370:196;;;:::o;70597:379::-;70775:13;70790:11;70804:25;70814:2;70817:11;70804:9;:25::i;:::-;70774:55;;;;70867:11;70840:5;:12;70846:5;70840:12;;;;;;;;;;;70853:6;70840:20;;;;;;:::i;:::-;;;;;;;;;;;;;:25;;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;70894:74:0;;;;;;70904:2;;70908:6;;70916:5;;70923;;70930:3;;70935:11;;70947:9;;70957:10;;70894:74;:::i;:::-;;;;;;;;70709:267;;70597:379;;;;;:::o;50130:2163::-;50246:10;37636:23;;;;:17;:23;;;;;;;;37628:63;;;;-1:-1:-1;;;37628:63:0;;;;;;;:::i;:::-;50278:35:::1;50316:21;50329:7;50316:12;:21::i;:::-;50278:59;;50376:4;-1:-1:-1::0;;;;;50354:26:0::1;:13;:18;;;-1:-1:-1::0;;;;;50354:26:0::1;;50350:67;;50389:28;;-1:-1:-1::0;;;50389:28:0::1;;;;;;;;;;;50350:67;50430:22;4676:10:::0;-1:-1:-1;;;;;50456:20:0;::::1;;::::0;:73:::1;;-1:-1:-1::0;50493:36:0::1;50510:4:::0;4676:10;44095:164;:::i;50493:36::-:1;50456:126;;;-1:-1:-1::0;4676:10:0;50546:20:::1;50558:7:::0;50546:11:::1;:20::i;:::-;-1:-1:-1::0;;;;;50546:36:0::1;;50456:126;50430:153;;50601:17;50596:66;;50627:35;;-1:-1:-1::0;;;50627:35:0::1;;;;;;;;;;;50596:66;-1:-1:-1::0;;;;;50677:16:0;::::1;50673:52;;50702:23;;-1:-1:-1::0;;;50702:23:0::1;;;;;;;;;;;50673:52;50846:35;50863:1;50867:7;50876:4;50846:8;:35::i;:::-;-1:-1:-1::0;;;;;51177:18:0;;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;:31;;-1:-1:-1;;51177:31:0;;::::1;-1:-1:-1::0;;;;;51177:31:0;;::::1;-1:-1:-1::0;;51177:31:0;;::::1;;::::0;;;51223:16;;::::1;::::0;;;;;;:29;;;;::::1;::::0;;::::1;-1:-1:-1::0;51223:29:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;51303:20;;;:11:::1;:20:::0;;;;;;51338:18;;-1:-1:-1;;;;;;51371:49:0;;;;-1:-1:-1;;;51404:15:0::1;51371:49:::0;;::::1;::::0;;;::::1;;::::0;;51694:11;::::1;51754:24:::0;;;;;51797:13;;51303:20;;51754:24;;51797:13:::1;51793:384;;52007:13;;51992:11;:28;51988:174;;52045:20:::0;;52114:28:::1;::::0;::::1;::::0;-1:-1:-1;;;;;52088:54:0::1;-1:-1:-1::0;;;52088:54:0::1;-1:-1:-1::0;;;;;;52088:54:0;;;-1:-1:-1;;;;;52045:20:0;::::1;52088:54:::0;::::1;::::0;;51988:174:::1;51152:1036;;;52224:7;52220:2;-1:-1:-1::0;;;;;52205:27:0::1;52214:4;-1:-1:-1::0;;;;;52205:27:0::1;-1:-1:-1::0;;;;;;;;;;;52205:27:0::1;;;;;;;;;52243:42;50267:2026;;50130:2163:::0;;;;:::o;11122:98::-;11180:7;11207:5;11211:1;11207;:5;:::i;11521:98::-;11579:7;11606:5;11610:1;11606;:5;:::i;10765:98::-;10823:7;10850:5;10854:1;10850;:5;:::i;71912:757::-;72052:4;2970:1;3568:7;;:19;3560:63;;;;-1:-1:-1;;;3560:63:0;;33811:2:1;3560:63:0;;;33793:21:1;33850:2;33830:18;;;33823:30;33889:33;33869:18;;;33862:61;33940:18;;3560:63:0;33609:355:1;3560:63:0;2970:1;3701:7;:18;72076:28:::1;::::0;;;:13:::1;:28;::::0;;;;:38;72118:15:::1;-1:-1:-1::0;72076:57:0::1;72068:88;;;::::0;-1:-1:-1;;;72068:88:0;;34171:2:1;72068:88:0::1;::::0;::::1;34153:21:1::0;34210:2;34190:18;;;34183:30;-1:-1:-1;;;34229:18:1;;;34222:48;34287:18;;72068:88:0::1;33969:342:1::0;72068:88:0::1;72175:28;::::0;;;:13:::1;:28;::::0;;;;:36:::1;;::::0;72215:15:::1;-1:-1:-1::0;72175:55:0::1;72167:88;;;::::0;-1:-1:-1;;;72167:88:0;;34518:2:1;72167:88:0::1;::::0;::::1;34500:21:1::0;34557:2;34537:18;;;34530:30;-1:-1:-1;;;34576:18:1;;;34569:50;34636:18;;72167:88:0::1;34316:344:1::0;72167:88:0::1;72407:20;72430:7;:67;;72496:1;72430:67;;;72441:26;::::0;;;:11:::1;:26;::::0;;;;;;;72468:10:::1;72441:38:::0;;;;;;;;:52:::1;::::0;72482:11;;72441:52:::1;:::i;:::-;72407:90;;72555:11;72518:13;:28;72532:13;72518:28;;;;;;;;;;;:33;;;:48;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;72584:6:0::1;::::0;72594:1:::1;72584:11;;::::0;:77:::1;;;72599:62;72613:10;72625:5;;72633:12;72647:13;72599;:62::i;:::-;2926:1:::0;3880:7;:22;72577:84;71912:757;-1:-1:-1;;;;;;;71912:757:0:o;40541:1109::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;40652:7:0;;37891:1;40701:23;;:47;;;;;40735:13;;40728:4;:20;40701:47;40697:886;;;40769:31;40803:17;;;:11;:17;;;;;;;;;40769:51;;;;;;;;;-1:-1:-1;;;;;40769:51:0;;;;-1:-1:-1;;;40769:51:0;;-1:-1:-1;;;;;40769:51:0;;;;;;;;-1:-1:-1;;;40769:51:0;;;;;;;;;;;;;;40839:729;;40889:14;;-1:-1:-1;;;;;40889:28:0;;40885:101;;40953:9;40541:1109;-1:-1:-1;;;40541:1109:0:o;40885:101::-;-1:-1:-1;;;41328:6:0;41373:17;;;;:11;:17;;;;;;;;;41361:29;;;;;;;;;-1:-1:-1;;;;;41361:29:0;;;;;-1:-1:-1;;;41361:29:0;;-1:-1:-1;;;;;41361:29:0;;;;;;;;-1:-1:-1;;;41361:29:0;;;;;;;;;;;;;41421:28;41417:109;;41489:9;40541:1109;-1:-1:-1;;;40541:1109:0:o;41417:109::-;41288:261;;;40750:833;40697:886;41611:31;;-1:-1:-1;;;41611:31:0;;;;;;;;;;;7310:191;7403:6;;;-1:-1:-1;;;;;7420:17:0;;;-1:-1:-1;;;;;;7420:17:0;;;;;;;7453:40;;7403:6;;;7420:17;7403:6;;7453:40;;7384:16;;7453:40;7373:128;7310:191;:::o;76290:159::-;76380:4;76404:37;76423:5;76430:4;76436;76404:18;:37::i;:::-;76397:44;76290:159;-1:-1:-1;;;;76290:159:0:o;58058:668::-;58243:72;;-1:-1:-1;;;58243:72:0;;58222:4;;-1:-1:-1;;;;;58243:36:0;;;;;:72;;4676:10;;58294:4;;58300:7;;58309:5;;58243:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58243:72:0;;;;;;;;-1:-1:-1;;58243:72:0;;;;;;;;;;;;:::i;:::-;;;58239:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58477:6;:13;58494:1;58477:18;58473:235;;58523:40;;-1:-1:-1;;;58523:40:0;;;;;;;;;;;58473:235;58666:6;58660:13;58651:6;58647:2;58643:15;58636:38;58239:480;-1:-1:-1;;;;;;58362:55:0;-1:-1:-1;;;58362:55:0;;-1:-1:-1;58058:668:0;;;;;;:::o;75417:104::-;75477:13;75506:7;75499:14;;;;;:::i;31186:723::-;31242:13;31463:5;31472:1;31463:10;31459:53;;-1:-1:-1;;31490:10:0;;;;;;;;;;;;-1:-1:-1;;;31490:10:0;;;;;31186:723::o;31459:53::-;31537:5;31522:12;31578:78;31585:9;;31578:78;;31611:8;;;;:::i;:::-;;-1:-1:-1;31634:10:0;;-1:-1:-1;31642:2:0;31634:10;;:::i;:::-;;;31578:78;;;31666:19;31698:6;-1:-1:-1;;;;;31688:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31688:17:0;;31666:39;;31716:154;31723:10;;31716:154;;31750:11;31760:1;31750:11;;:::i;:::-;;-1:-1:-1;31819:10:0;31827:2;31819:5;:10;:::i;:::-;31806:24;;:2;:24;:::i;:::-;31793:39;;31776:6;31783;31776:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;31776:56:0;;;;;;;;-1:-1:-1;31847:11:0;31856:2;31847:11;;:::i;:::-;;;31716:154;;74152:664;74256:19;74286:12;;;:5;:12;;;;;;:20;;74313:11;;74286:12;:20;;74299:6;;74286:20;:::i;:::-;;;;;;;;;;;;;:25;;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;74341:13:0;;-1:-1:-1;74336:377:0;74367:11;74360:5;:18;74336:377;;;74431:17;74449:6;74431:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:32;;;;;;;;74505:1;;74464:17;;:25;;74482:6;;74464:25;:::i;:::-;;;;;;;;;;;;;;;;:32;;;;;;;;:39;:42;;;;:::i;:::-;74431:76;;;;;;;;:::i;:::-;;;;;;;;;;74523:9;:27;;;;;;;;;;;;;;;;74431:76;-1:-1:-1;74566:83:0;74581:42;74625:10;74431:76;74566:14;:83::i;:::-;74662:17;74680:6;74662:25;;;;;;:::i;:::-;;;;;;;;;;;;;:32;74688:5;74662:32;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;74380:7;;;;;:::i;:::-;;;;74336:377;;;;74729:51;74742:9;74753:10;74765:11;74778:1;74729:51;;;;;;;;;:::i;:::-;;;;;;;;74792:16;74799:9;;74792:16;:::i;44774:136::-;44840:7;44849;44875:27;44885:2;44889:8;44875:27;;;;;;;;;;;;:9;:27::i;:::-;44868:34;;;;44774:136;;;;;;:::o;66710:190::-;66835:4;66888;66859:25;66872:5;66879:4;66859:12;:25::i;:::-;:33;;66710:190;-1:-1:-1;;;;66710:190:0:o;52547:1901::-;52667:35;52705:21;52718:7;52705:12;:21::i;:::-;52667:59;;52765:4;-1:-1:-1;;;;;52743:26:0;:13;:18;;;-1:-1:-1;;;;;52743:26:0;;52739:67;;52778:28;;-1:-1:-1;;;52778:28:0;;;;;;;;;;;52739:67;-1:-1:-1;;;;;52832:16:0;;52828:52;;52857:23;;-1:-1:-1;;;52857:23:0;;;;;;;;;;;52828:52;53001:35;53018:1;53022:7;53031:4;53001:8;:35::i;:::-;-1:-1:-1;;;;;53332:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;53332:31:0;;;-1:-1:-1;;;;;53332:31:0;;;-1:-1:-1;;53332:31:0;;;;;;;53378:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;53378:29:0;;;;;;;;;;;53458:20;;;:11;:20;;;;;;53493:18;;-1:-1:-1;;;;;;53526:49:0;;;;-1:-1:-1;;;53559:15:0;53526:49;;;;;;;;;;53849:11;;53909:24;;;;;53952:13;;53458:20;;53909:24;;53952:13;53948:384;;54162:13;;54147:11;:28;54143:174;;54200:20;;54269:28;;;;-1:-1:-1;;;;;54243:54:0;-1:-1:-1;;;54243:54:0;-1:-1:-1;;;;;;54243:54:0;;;-1:-1:-1;;;;;54200:20:0;;54243:54;;;;54143:174;53307:1036;;;54379:7;54375:2;-1:-1:-1;;;;;54360:27:0;54369:4;-1:-1:-1;;;;;54360:27:0;-1:-1:-1;;;;;;;;;;;54360:27:0;;;;;;;;;54398:42;42970:395;45284:1906;45456:13;;45404:7;;;;-1:-1:-1;;;;;45484:16:0;;45480:48;;45509:19;;-1:-1:-1;;;45509:19:0;;;;;;;;;;;45480:48;45543:8;45555:1;45543:13;45539:44;;45565:18;;-1:-1:-1;;;45565:18:0;;;;;;;;;;;45539:44;-1:-1:-1;;;;;45934:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;45993:49:0;;-1:-1:-1;;;;;45934:44:0;;;;;;;45993:49;;;;-1:-1:-1;;45934:44:0;;;;;;45993:49;;;;;;;;;;;;;;;;46059:25;;;45993:29;46059:25;;;;;;:35;;-1:-1:-1;;;;;;46109:66:0;;;-1:-1:-1;;;46159:15:0;46109:66;;;;;;;;;;;;;46059:25;;46256:23;;;;23731:19;:23;46296:715;;46336:314;46367:38;;46392:12;;-1:-1:-1;;;;;46367:38:0;;;46384:1;;-1:-1:-1;;;;;;;;;;;46367:38:0;46384:1;;46367:38;46433:69;46472:1;46476:2;46480:14;;;;;;46496:5;46433:30;:69::i;:::-;46428:174;;46538:40;;-1:-1:-1;;;46538:40:0;;;;;;;;;;;46428:174;46645:3;46629:12;:19;46336:314;;46731:12;46714:13;;:29;46710:43;;46745:8;;;46710:43;46296:715;;;46794:202;46907:40;;46932:14;;;;;-1:-1:-1;;;;;46907:40:0;;;46924:1;;-1:-1:-1;;;;;;;;;;;46907:40:0;46924:1;;46907:40;46991:3;46975:12;:19;46794:202;;46296:715;-1:-1:-1;47025:13:0;:28;47153:12;47180:1;47166:13;;:15;;;;:::i;:::-;47146:36;;;;;45284:1906;;;;;;:::o;66908:675::-;66991:7;67034:4;66991:7;67049:497;67073:5;:12;67069:1;:16;67049:497;;;67107:20;67130:5;67136:1;67130:8;;;;;;;;:::i;:::-;;;;;;;67107:31;;67173:12;67157;:28;67153:382;;67659:13;67709:15;;;67745:4;67738:15;;;67792:4;67776:21;;67285:57;;67153:382;;;67659:13;67709:15;;;67745:4;67738:15;;;67792:4;67776:21;;67462:57;;67153:382;-1:-1:-1;67087:3:0;;;;:::i;:::-;;;;67049:497;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:127:1;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:275;217:2;211:9;282:2;263:13;;-1:-1:-1;;259:27:1;247:40;;-1:-1:-1;;;;;302:34:1;;338:22;;;299:62;296:88;;;364:18;;:::i;:::-;400:2;393:22;146:275;;-1:-1:-1;146:275:1:o;426:183::-;486:4;-1:-1:-1;;;;;511:6:1;508:30;505:56;;;541:18;;:::i;:::-;-1:-1:-1;586:1:1;582:14;598:4;578:25;;426:183::o;614:662::-;668:5;721:3;714:4;706:6;702:17;698:27;688:55;;739:1;736;729:12;688:55;775:6;762:20;801:4;825:60;841:43;881:2;841:43;:::i;:::-;825:60;:::i;:::-;919:15;;;1005:1;1001:10;;;;989:23;;985:32;;;950:12;;;;1029:15;;;1026:35;;;1057:1;1054;1047:12;1026:35;1093:2;1085:6;1081:15;1105:142;1121:6;1116:3;1113:15;1105:142;;;1187:17;;1175:30;;1225:12;;;;1138;;1105:142;;;-1:-1:-1;1265:5:1;614:662;-1:-1:-1;;;;;;614:662:1:o;1281:595::-;1399:6;1407;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;1516:9;1503:23;-1:-1:-1;;;;;1586:2:1;1578:6;1575:14;1572:34;;;1602:1;1599;1592:12;1572:34;1625:61;1678:7;1669:6;1658:9;1654:22;1625:61;:::i;:::-;1615:71;;1739:2;1728:9;1724:18;1711:32;1695:48;;1768:2;1758:8;1755:16;1752:36;;;1784:1;1781;1774:12;1752:36;;1807:63;1862:7;1851:8;1840:9;1836:24;1807:63;:::i;:::-;1797:73;;;1281:595;;;;;:::o;1881:131::-;-1:-1:-1;;;;;;1955:32:1;;1945:43;;1935:71;;2002:1;1999;1992:12;2017:245;2075:6;2128:2;2116:9;2107:7;2103:23;2099:32;2096:52;;;2144:1;2141;2134:12;2096:52;2183:9;2170:23;2202:30;2226:5;2202:30;:::i;2459:250::-;2544:1;2554:113;2568:6;2565:1;2562:13;2554:113;;;2644:11;;;2638:18;2625:11;;;2618:39;2590:2;2583:10;2554:113;;;-1:-1:-1;;2701:1:1;2683:16;;2676:27;2459:250::o;2714:271::-;2756:3;2794:5;2788:12;2821:6;2816:3;2809:19;2837:76;2906:6;2899:4;2894:3;2890:14;2883:4;2876:5;2872:16;2837:76;:::i;:::-;2967:2;2946:15;-1:-1:-1;;2942:29:1;2933:39;;;;2974:4;2929:50;;2714:271;-1:-1:-1;;2714:271:1:o;2990:220::-;3139:2;3128:9;3121:21;3102:4;3159:45;3200:2;3189:9;3185:18;3177:6;3159:45;:::i;3215:180::-;3274:6;3327:2;3315:9;3306:7;3302:23;3298:32;3295:52;;;3343:1;3340;3333:12;3295:52;-1:-1:-1;3366:23:1;;3215:180;-1:-1:-1;3215:180:1:o;3608:173::-;3676:20;;-1:-1:-1;;;;;3725:31:1;;3715:42;;3705:70;;3771:1;3768;3761:12;3705:70;3608:173;;;:::o;3786:254::-;3854:6;3862;3915:2;3903:9;3894:7;3890:23;3886:32;3883:52;;;3931:1;3928;3921:12;3883:52;3967:9;3954:23;3944:33;;3996:38;4030:2;4019:9;4015:18;3996:38;:::i;:::-;3986:48;;3786:254;;;;;:::o;4227:::-;4295:6;4303;4356:2;4344:9;4335:7;4331:23;4327:32;4324:52;;;4372:1;4369;4362:12;4324:52;4395:29;4414:9;4395:29;:::i;:::-;4385:39;4471:2;4456:18;;;;4443:32;;-1:-1:-1;;;4227:254:1:o;4486:407::-;4551:5;-1:-1:-1;;;;;4577:6:1;4574:30;4571:56;;;4607:18;;:::i;:::-;4645:57;4690:2;4669:15;;-1:-1:-1;;4665:29:1;4696:4;4661:40;4645:57;:::i;:::-;4636:66;;4725:6;4718:5;4711:21;4765:3;4756:6;4751:3;4747:16;4744:25;4741:45;;;4782:1;4779;4772:12;4741:45;4831:6;4826:3;4819:4;4812:5;4808:16;4795:43;4885:1;4878:4;4869:6;4862:5;4858:18;4854:29;4847:40;4486:407;;;;;:::o;4898:222::-;4941:5;4994:3;4987:4;4979:6;4975:17;4971:27;4961:55;;5012:1;5009;5002:12;4961:55;5034:80;5110:3;5101:6;5088:20;5081:4;5073:6;5069:17;5034:80;:::i;5125:637::-;5237:6;5245;5253;5306:2;5294:9;5285:7;5281:23;5277:32;5274:52;;;5322:1;5319;5312:12;5274:52;5362:9;5349:23;-1:-1:-1;;;;;5432:2:1;5424:6;5421:14;5418:34;;;5448:1;5445;5438:12;5418:34;5471:61;5524:7;5515:6;5504:9;5500:22;5471:61;:::i;:::-;5461:71;;5585:2;5574:9;5570:18;5557:32;5541:48;;5614:2;5604:8;5601:16;5598:36;;;5630:1;5627;5620:12;5598:36;;5653:52;5697:7;5686:8;5675:9;5671:24;5653:52;:::i;:::-;5643:62;;;5752:2;5741:9;5737:18;5724:32;5714:42;;5125:637;;;;;:::o;5767:186::-;5826:6;5879:2;5867:9;5858:7;5854:23;5850:32;5847:52;;;5895:1;5892;5885:12;5847:52;5918:29;5937:9;5918:29;:::i;5958:533::-;6054:6;6062;6070;6078;6131:3;6119:9;6110:7;6106:23;6102:33;6099:53;;;6148:1;6145;6138:12;6099:53;6171:29;6190:9;6171:29;:::i;:::-;6161:39;;6247:2;6236:9;6232:18;6219:32;6209:42;;6298:2;6287:9;6283:18;6270:32;6260:42;;6353:2;6342:9;6338:18;6325:32;-1:-1:-1;;;;;6372:6:1;6369:30;6366:50;;;6412:1;6409;6402:12;6366:50;6435;6477:7;6468:6;6457:9;6453:22;6435:50;:::i;:::-;6425:60;;;5958:533;;;;;;;:::o;6496:328::-;6573:6;6581;6589;6642:2;6630:9;6621:7;6617:23;6613:32;6610:52;;;6658:1;6655;6648:12;6610:52;6681:29;6700:9;6681:29;:::i;:::-;6671:39;;6729:38;6763:2;6752:9;6748:18;6729:38;:::i;:::-;6719:48;;6814:2;6803:9;6799:18;6786:32;6776:42;;6496:328;;;;;:::o;6829:390::-;6907:6;6915;6968:2;6956:9;6947:7;6943:23;6939:32;6936:52;;;6984:1;6981;6974:12;6936:52;7020:9;7007:23;6997:33;;7081:2;7070:9;7066:18;7053:32;-1:-1:-1;;;;;7100:6:1;7097:30;7094:50;;;7140:1;7137;7130:12;7094:50;7163;7205:7;7196:6;7185:9;7181:22;7163:50;:::i;7447:416::-;7540:6;7548;7601:2;7589:9;7580:7;7576:23;7572:32;7569:52;;;7617:1;7614;7607:12;7569:52;7657:9;7644:23;-1:-1:-1;;;;;7682:6:1;7679:30;7676:50;;;7722:1;7719;7712:12;7676:50;7745:61;7798:7;7789:6;7778:9;7774:22;7745:61;:::i;:::-;7735:71;7853:2;7838:18;;;;7825:32;;-1:-1:-1;;;;7447:416:1:o;8336:527::-;8432:6;8440;8448;8456;8509:3;8497:9;8488:7;8484:23;8480:33;8477:53;;;8526:1;8523;8516:12;8477:53;8562:9;8549:23;8539:33;;8619:2;8608:9;8604:18;8591:32;8581:42;;8670:2;8659:9;8655:18;8642:32;8632:42;;8725:2;8714:9;8710:18;8697:32;-1:-1:-1;;;;;8744:6:1;8741:30;8738:50;;;8784:1;8781;8774:12;8868:367;8931:8;8941:6;8995:3;8988:4;8980:6;8976:17;8972:27;8962:55;;9013:1;9010;9003:12;8962:55;-1:-1:-1;9036:20:1;;-1:-1:-1;;;;;9068:30:1;;9065:50;;;9111:1;9108;9101:12;9065:50;9148:4;9140:6;9136:17;9124:29;;9208:3;9201:4;9191:6;9188:1;9184:14;9176:6;9172:27;9168:38;9165:47;9162:67;;;9225:1;9222;9215:12;9240:505;9335:6;9343;9351;9404:2;9392:9;9383:7;9379:23;9375:32;9372:52;;;9420:1;9417;9410:12;9372:52;9456:9;9443:23;9433:33;;9517:2;9506:9;9502:18;9489:32;-1:-1:-1;;;;;9536:6:1;9533:30;9530:50;;;9576:1;9573;9566:12;9530:50;9615:70;9677:7;9668:6;9657:9;9653:22;9615:70;:::i;:::-;9240:505;;9704:8;;-1:-1:-1;9589:96:1;;-1:-1:-1;;;;9240:505:1:o;9750:322::-;9819:6;9872:2;9860:9;9851:7;9847:23;9843:32;9840:52;;;9888:1;9885;9878:12;9840:52;9928:9;9915:23;-1:-1:-1;;;;;9953:6:1;9950:30;9947:50;;;9993:1;9990;9983:12;9947:50;10016;10058:7;10049:6;10038:9;10034:22;10016:50;:::i;10077:348::-;10161:6;10214:2;10202:9;10193:7;10189:23;10185:32;10182:52;;;10230:1;10227;10220:12;10182:52;10270:9;10257:23;-1:-1:-1;;;;;10295:6:1;10292:30;10289:50;;;10335:1;10332;10325:12;10289:50;10358:61;10411:7;10402:6;10391:9;10387:22;10358:61;:::i;10713:724::-;10948:2;11000:21;;;11070:13;;10973:18;;;11092:22;;;10919:4;;10948:2;11171:15;;;;11145:2;11130:18;;;10919:4;11214:197;11228:6;11225:1;11222:13;11214:197;;;11277:52;11325:3;11316:6;11310:13;10514:12;;-1:-1:-1;;;;;10510:38:1;10498:51;;10602:4;10591:16;;;10585:23;-1:-1:-1;;;;;10581:48:1;10565:14;;;10558:72;10693:4;10682:16;;;10676:23;10669:31;10662:39;10646:14;;10639:63;10430:278;11277:52;11386:15;;;;11358:4;11349:14;;;;;11250:1;11243:9;11214:197;;11442:648;11555:6;11563;11571;11579;11587;11640:3;11628:9;11619:7;11615:23;11611:33;11608:53;;;11657:1;11654;11647:12;11608:53;11680:29;11699:9;11680:29;:::i;:::-;11670:39;;11760:2;11749:9;11745:18;11732:32;-1:-1:-1;;;;;11779:6:1;11776:30;11773:50;;;11819:1;11816;11809:12;11773:50;11858:70;11920:7;11911:6;11900:9;11896:22;11858:70;:::i;:::-;11442:648;;11947:8;;-1:-1:-1;11832:96:1;;12029:2;12014:18;;12001:32;;12080:2;12065:18;;;12052:32;;-1:-1:-1;11442:648:1;-1:-1:-1;;;;11442:648:1:o;12095:435::-;12148:3;12186:5;12180:12;12213:6;12208:3;12201:19;12239:4;12268:2;12263:3;12259:12;12252:19;;12305:2;12298:5;12294:14;12326:1;12336:169;12350:6;12347:1;12344:13;12336:169;;;12411:13;;12399:26;;12445:12;;;;12480:15;;;;12372:1;12365:9;12336:169;;;-1:-1:-1;12521:3:1;;12095:435;-1:-1:-1;;;;;12095:435:1:o;12535:261::-;12714:2;12703:9;12696:21;12677:4;12734:56;12786:2;12775:9;12771:18;12763:6;12734:56;:::i;13207:322::-;13284:6;13292;13300;13353:2;13341:9;13332:7;13328:23;13324:32;13321:52;;;13369:1;13366;13359:12;13321:52;13392:29;13411:9;13392:29;:::i;:::-;13382:39;13468:2;13453:18;;13440:32;;-1:-1:-1;13519:2:1;13504:18;;;13491:32;;13207:322;-1:-1:-1;;;13207:322:1:o;13534:160::-;13599:20;;13655:13;;13648:21;13638:32;;13628:60;;13684:1;13681;13674:12;13699:254;13764:6;13772;13825:2;13813:9;13804:7;13800:23;13796:32;13793:52;;;13841:1;13838;13831:12;13793:52;13864:29;13883:9;13864:29;:::i;:::-;13854:39;;13912:35;13943:2;13932:9;13928:18;13912:35;:::i;14140:667::-;14235:6;14243;14251;14259;14312:3;14300:9;14291:7;14287:23;14283:33;14280:53;;;14329:1;14326;14319:12;14280:53;14352:29;14371:9;14352:29;:::i;:::-;14342:39;;14400:38;14434:2;14423:9;14419:18;14400:38;:::i;:::-;14390:48;;14485:2;14474:9;14470:18;14457:32;14447:42;;14540:2;14529:9;14525:18;14512:32;-1:-1:-1;;;;;14559:6:1;14556:30;14553:50;;;14599:1;14596;14589:12;14553:50;14622:22;;14675:4;14667:13;;14663:27;-1:-1:-1;14653:55:1;;14704:1;14701;14694:12;14653:55;14727:74;14793:7;14788:2;14775:16;14770:2;14766;14762:11;14727:74;:::i;14812:416::-;14902:6;14910;14963:2;14951:9;14942:7;14938:23;14934:32;14931:52;;;14979:1;14976;14969:12;14931:52;15019:9;15006:23;-1:-1:-1;;;;;15044:6:1;15041:30;15038:50;;;15084:1;15081;15074:12;15038:50;15107:61;15160:7;15151:6;15140:9;15136:22;15107:61;:::i;:::-;15097:71;;;15187:35;15218:2;15207:9;15203:18;15187:35;:::i;15233:458::-;15320:6;15328;15336;15389:2;15377:9;15368:7;15364:23;15360:32;15357:52;;;15405:1;15402;15395:12;15357:52;15445:9;15432:23;-1:-1:-1;;;;;15470:6:1;15467:30;15464:50;;;15510:1;15507;15500:12;15464:50;15533;15575:7;15566:6;15555:9;15551:22;15533:50;:::i;:::-;15523:60;15630:2;15615:18;;15602:32;;-1:-1:-1;15681:2:1;15666:18;;;15653:32;;15233:458;-1:-1:-1;;;;15233:458:1:o;15696:267::-;10514:12;;-1:-1:-1;;;;;10510:38:1;10498:51;;10602:4;10591:16;;;10585:23;-1:-1:-1;;;;;10581:48:1;10565:14;;;10558:72;10693:4;10682:16;;;10676:23;10669:31;10662:39;10646:14;;;10639:63;15894:2;15879:18;;15906:51;10430:278;15968:1369;16107:6;16115;16123;16131;16139;16147;16200:3;16188:9;16179:7;16175:23;16171:33;16168:53;;;16217:1;16214;16207:12;16168:53;16253:9;16240:23;16230:33;;16282:2;16331;16320:9;16316:18;16303:32;16293:42;;16382:2;16371:9;16367:18;16354:32;16344:42;;16433:2;16422:9;16418:18;16405:32;16395:42;;16484:3;16473:9;16469:19;16456:33;16446:43;;16540:3;16529:9;16525:19;16512:33;-1:-1:-1;;;;;16605:2:1;16597:6;16594:14;16591:34;;;16621:1;16618;16611:12;16591:34;16659:6;16648:9;16644:22;16634:32;;16704:7;16697:4;16693:2;16689:13;16685:27;16675:55;;16726:1;16723;16716:12;16675:55;16762:2;16749:16;16785:60;16801:43;16841:2;16801:43;:::i;16785:60::-;16879:15;;;16961:1;16957:10;;;;16949:19;;16945:28;;;16910:12;;;;16985:19;;;16982:39;;;17017:1;17014;17007:12;16982:39;17049:2;17045;17041:11;17061:246;17077:6;17072:3;17069:15;17061:246;;;17156:2;17150:3;17137:17;17134:25;17131:45;;;17172:1;17169;17162:12;17131:45;17201:63;17256:7;17251:2;17244:3;17231:17;17227:2;17223:26;17219:35;17201:63;:::i;:::-;17189:76;;17285:12;;;;17094;;17061:246;;;17065:3;17326:5;17316:15;;;;;;;;15968:1369;;;;;;;;:::o;17342:933::-;17480:6;17488;17496;17504;17512;17520;17528;17581:3;17569:9;17560:7;17556:23;17552:33;17549:53;;;17598:1;17595;17588:12;17549:53;17638:9;17625:23;-1:-1:-1;;;;;17708:2:1;17700:6;17697:14;17694:34;;;17724:1;17721;17714:12;17694:34;17747:50;17789:7;17780:6;17769:9;17765:22;17747:50;:::i;:::-;17737:60;;17844:2;17833:9;17829:18;17816:32;17806:42;;17895:2;17884:9;17880:18;17867:32;17857:42;;17952:2;17941:9;17937:18;17924:32;17908:48;;17981:2;17971:8;17968:16;17965:36;;;17997:1;17994;17987:12;17965:36;;18036:72;18100:7;18089:8;18078:9;18074:24;18036:72;:::i;:::-;18127:8;;-1:-1:-1;18010:98:1;-1:-1:-1;18181:36:1;;-1:-1:-1;18212:3:1;18197:19;;18181:36;:::i;:::-;18171:46;;18264:3;18253:9;18249:19;18236:33;18226:43;;17342:933;;;;;;;;;;:::o;18280:260::-;18348:6;18356;18409:2;18397:9;18388:7;18384:23;18380:32;18377:52;;;18425:1;18422;18415:12;18377:52;18448:29;18467:9;18448:29;:::i;:::-;18438:39;;18496:38;18530:2;18519:9;18515:18;18496:38;:::i;18545:127::-;18606:10;18601:3;18597:20;18594:1;18587:31;18637:4;18634:1;18627:15;18661:4;18658:1;18651:15;18677:127;18738:10;18733:3;18729:20;18726:1;18719:31;18769:4;18766:1;18759:15;18793:4;18790:1;18783:15;18809:135;18848:3;18869:17;;;18866:43;;18889:18;;:::i;:::-;-1:-1:-1;18936:1:1;18925:13;;18809:135::o;18949:380::-;19028:1;19024:12;;;;19071;;;19092:61;;19146:4;19138:6;19134:17;19124:27;;19092:61;19199:2;19191:6;19188:14;19168:18;19165:38;19162:161;;19245:10;19240:3;19236:20;19233:1;19226:31;19280:4;19277:1;19270:15;19308:4;19305:1;19298:15;19162:161;;18949:380;;;:::o;19334:352::-;19536:2;19518:21;;;19575:2;19555:18;;;19548:30;19614;19609:2;19594:18;;19587:58;19677:2;19662:18;;19334:352::o;19691:289::-;19822:3;19860:6;19854:13;19876:66;19935:6;19930:3;19923:4;19915:6;19911:17;19876:66;:::i;:::-;19958:16;;;;;19691:289;-1:-1:-1;;19691:289:1:o;19985:353::-;20187:2;20169:21;;;20226:2;20206:18;;;20199:30;20265:31;20260:2;20245:18;;20238:59;20329:2;20314:18;;19985:353::o;20343:355::-;20545:2;20527:21;;;20584:2;20564:18;;;20557:30;20623:33;20618:2;20603:18;;20596:61;20689:2;20674:18;;20343:355::o;20703:348::-;20905:2;20887:21;;;20944:2;20924:18;;;20917:30;20983:26;20978:2;20963:18;;20956:54;21042:2;21027:18;;20703:348::o;21056:399::-;21258:2;21240:21;;;21297:2;21277:18;;;21270:30;21336:34;21331:2;21316:18;;21309:62;-1:-1:-1;;;21402:2:1;21387:18;;21380:33;21445:3;21430:19;;21056:399::o;21460:125::-;21525:9;;;21546:10;;;21543:36;;;21559:18;;:::i;21590:402::-;21792:2;21774:21;;;21831:2;21811:18;;;21804:30;21870:34;21865:2;21850:18;;21843:62;-1:-1:-1;;;21936:2:1;21921:18;;21914:36;21982:3;21967:19;;21590:402::o;21997:::-;22199:2;22181:21;;;22238:2;22218:18;;;22211:30;22277:34;22272:2;22257:18;;22250:62;-1:-1:-1;;;22343:2:1;22328:18;;22321:36;22389:3;22374:19;;21997:402::o;22404:400::-;22606:2;22588:21;;;22645:2;22625:18;;;22618:30;22684:34;22679:2;22664:18;;22657:62;-1:-1:-1;;;22750:2:1;22735:18;;22728:34;22794:3;22779:19;;22404:400::o;23723:502::-;23986:3;23975:9;23968:22;23949:4;24007:57;24059:3;24048:9;24044:19;24036:6;24007:57;:::i;:::-;-1:-1:-1;;;;;24100:32:1;;;;24095:2;24080:18;;24073:60;-1:-1:-1;24164:2:1;24149:18;;24142:34;;;;24207:2;24192:18;;;24185:34;23999:65;23723:502;-1:-1:-1;23723:502:1:o;24230:349::-;24432:2;24414:21;;;24471:2;24451:18;;;24444:30;24510:27;24505:2;24490:18;;24483:55;24570:2;24555:18;;24230:349::o;24584:398::-;24786:2;24768:21;;;24825:2;24805:18;;;24798:30;24864:34;24859:2;24844:18;;24837:62;-1:-1:-1;;;24930:2:1;24915:18;;24908:32;24972:3;24957:19;;24584:398::o;25113:545::-;25215:2;25210:3;25207:11;25204:448;;;25251:1;25276:5;25272:2;25265:17;25321:4;25317:2;25307:19;25391:2;25379:10;25375:19;25372:1;25368:27;25362:4;25358:38;25427:4;25415:10;25412:20;25409:47;;;-1:-1:-1;25450:4:1;25409:47;25505:2;25500:3;25496:12;25493:1;25489:20;25483:4;25479:31;25469:41;;25560:82;25578:2;25571:5;25568:13;25560:82;;;25623:17;;;25604:1;25593:13;25560:82;;25834:1352;25960:3;25954:10;-1:-1:-1;;;;;25979:6:1;25976:30;25973:56;;;26009:18;;:::i;:::-;26038:97;26128:6;26088:38;26120:4;26114:11;26088:38;:::i;:::-;26082:4;26038:97;:::i;:::-;26190:4;;26254:2;26243:14;;26271:1;26266:663;;;;26973:1;26990:6;26987:89;;;-1:-1:-1;27042:19:1;;;27036:26;26987:89;-1:-1:-1;;25791:1:1;25787:11;;;25783:24;25779:29;25769:40;25815:1;25811:11;;;25766:57;27089:81;;26236:944;;26266:663;25060:1;25053:14;;;25097:4;25084:18;;-1:-1:-1;;26302:20:1;;;26420:236;26434:7;26431:1;26428:14;26420:236;;;26523:19;;;26517:26;26502:42;;26615:27;;;;26583:1;26571:14;;;;26450:19;;26420:236;;;26424:3;26684:6;26675:7;26672:19;26669:201;;;26745:19;;;26739:26;-1:-1:-1;;26828:1:1;26824:14;;;26840:3;26820:24;26816:37;26812:42;26797:58;26782:74;;26669:201;-1:-1:-1;;;;;26916:1:1;26900:14;;;26896:22;26883:36;;-1:-1:-1;25834:1352:1:o;29204:342::-;29405:2;29394:9;29387:21;29368:4;29425:56;29477:2;29466:9;29462:18;29454:6;29425:56;:::i;:::-;29417:64;;29531:6;29524:14;29517:22;29512:2;29501:9;29497:18;29490:50;29204:342;;;;;:::o;29953:496::-;30132:3;30170:6;30164:13;30186:66;30245:6;30240:3;30233:4;30225:6;30221:17;30186:66;:::i;:::-;30315:13;;30274:16;;;;30337:70;30315:13;30274:16;30384:4;30372:17;;30337:70;:::i;:::-;30423:20;;29953:496;-1:-1:-1;;;;29953:496:1:o;32262:779::-;-1:-1:-1;;;;;32623:32:1;;32605:51;;32593:3;32687:2;32672:18;;32665:30;;;32564:4;;32712:45;32738:18;;;32730:6;32712:45;:::i;:::-;32788:2;32773:18;;32766:34;;;;-1:-1:-1;;32831:2:1;32816:18;;32809:34;;;;32874:3;32859:19;;32852:35;;;;32918:3;32903:19;;32896:35;;;;32962:3;32947:19;;32940:35;33019:14;33012:22;33006:3;32991:19;;;32984:51;32704:53;32262:779;-1:-1:-1;;32262:779:1:o;33046:168::-;33119:9;;;33150;;33167:15;;;33161:22;;33147:37;33137:71;;33188:18;;:::i;33219:127::-;33280:10;33275:3;33271:20;33268:1;33261:31;33311:4;33308:1;33301:15;33335:4;33332:1;33325:15;33351:120;33391:1;33417;33407:35;;33422:18;;:::i;:::-;-1:-1:-1;33456:9:1;;33351:120::o;33476:128::-;33543:9;;;33564:11;;;33561:37;;;33578:18;;:::i;34665:489::-;-1:-1:-1;;;;;34934:15:1;;;34916:34;;34986:15;;34981:2;34966:18;;34959:43;35033:2;35018:18;;35011:34;;;35081:3;35076:2;35061:18;;35054:31;;;34859:4;;35102:46;;35128:19;;35120:6;35102:46;:::i;35159:249::-;35228:6;35281:2;35269:9;35260:7;35256:23;35252:32;35249:52;;;35297:1;35294;35287:12;35249:52;35329:9;35323:16;35348:30;35372:5;35348:30;:::i;35413:112::-;35445:1;35471;35461:35;;35476:18;;:::i;:::-;-1:-1:-1;35510:9:1;;35413:112::o;35530:127::-;35591:10;35586:3;35582:20;35579:1;35572:31;35622:4;35619:1;35612:15;35646:4;35643:1;35636:15;35662:907;35893:4;35941:3;35930:9;35926:19;35972:3;35961:9;35954:22;35996:6;36031;36025:13;36062:6;36054;36047:22;36100:3;36089:9;36085:19;36078:26;;36123:6;36120:1;36113:17;36149:4;36139:14;;36189:2;36186:1;36176:16;36210:1;36220:168;36234:6;36231:1;36228:13;36220:168;;;36295:13;;36283:26;;36329:12;;;;36376:1;36364:14;;;;36249:9;36220:168;;;-1:-1:-1;;;;;;;;36444:32:1;;;;36424:18;;;36417:60;-1:-1:-1;36508:2:1;36493:18;;36486:34;;;;36551:2;36536:18;;;36529:34;36405:3;35662:907;-1:-1:-1;35662:907:1:o
Swarm Source
ipfs://4dec6547dc9c491946a88817f1ca4f055f146778088af8ee6828b5e118aad53e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,529.3 | 0.026 | $65.81 |
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.