Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
217 ANXR
Holders
53
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 ANXRLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
SmartContract
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-26 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } } // 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 v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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/Address.sol // OpenZeppelin Contracts (last updated v4.5.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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // 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/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: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.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 be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev 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: contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; 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). */ 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) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @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) 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) 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 See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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; } function _safeMint(address to, uint256 quantity) internal { _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 { _mint(to, quantity, _data, true); } /** * @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, bytes memory _data, bool safe ) 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; if (safe && 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 Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); 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 This is 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 ) private 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 {} } // File: contracts/SmartContract.sol // Edited by Cindy Horn - Extended ERC721A // 5/23/22 - Created // Amended by HashLips pragma solidity >=0.7.0 <0.9.0; contract SmartContract is Ownable, ERC721A { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string private uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0.022 ether; uint256 public maxSupply = 1111; uint256 public maxMintAmountPerTx = 100; bool public paused = true; bool public revealed = true; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri) ERC721A(_name, _symbol) { uriPrefix = _initBaseURI; setHiddenMetadataUri(_initNotRevealedUri); } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(totalSupply() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } modifier callerIsUser() { require(tx.origin == msg.sender, 'The caller is another contract.'); _; } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) callerIsUser { require(!paused, "The contract is paused!"); require(msg.value >= cost * _mintAmount, "Insufficient funds!"); _safeMint(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _safeMint(_receiver, _mintAmount); } function mintPresale(uint256 _mintAmount) public mintCompliance(_mintAmount) onlyOwner { _safeMint(msg.sender, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { if ( _exists( currentTokenId ) ) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, Strings.toString(_tokenId), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxSupply(uint256 _maxSupply) public onlyOwner { maxSupply = _maxSupply; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function getUriPrefix() public view onlyOwner returns (string memory) { return uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner { // This will transfer the remaining contract balance to the owner. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } function _baseURI() internal view override virtual returns (string memory) { return uriPrefix; } function _startTokenId() internal view virtual override returns (uint256) { return 1; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","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":"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600a90805190602001906200002b92919062000342565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200007992919062000342565b50664e28e2290f0000600d55610457600e556064600f556001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000d357600080fd5b5060405162004a0438038062004a048339818101604052810190620000f9919062000470565b83836200011b6200010f6200019960201b60201c565b620001a160201b60201c565b81600390805190602001906200013392919062000342565b5080600490805190602001906200014c92919062000342565b506200015d6200026560201b60201c565b600181905550505081600a90805190602001906200017d92919062000342565b506200018f816200026e60201b60201c565b5050505062000765565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b6200027e6200019960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a46200031960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f49062000585565b60405180910390fd5b80600c90805190602001906200031592919062000342565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000350906200064d565b90600052602060002090601f016020900481019282620003745760008555620003c0565b82601f106200038f57805160ff1916838001178555620003c0565b82800160010185558215620003c0579182015b82811115620003bf578251825591602001919060010190620003a2565b5b509050620003cf9190620003d3565b5090565b5b80821115620003ee576000816000905550600101620003d4565b5090565b6000620004096200040384620005d0565b620005a7565b9050828152602081018484840111156200042857620004276200071c565b5b6200043584828562000617565b509392505050565b600082601f83011262000455576200045462000717565b5b815162000467848260208601620003f2565b91505092915050565b600080600080608085870312156200048d576200048c62000726565b5b600085015167ffffffffffffffff811115620004ae57620004ad62000721565b5b620004bc878288016200043d565b945050602085015167ffffffffffffffff811115620004e057620004df62000721565b5b620004ee878288016200043d565b935050604085015167ffffffffffffffff81111562000512576200051162000721565b5b62000520878288016200043d565b925050606085015167ffffffffffffffff81111562000544576200054362000721565b5b62000552878288016200043d565b91505092959194509250565b60006200056d60208362000606565b91506200057a826200073c565b602082019050919050565b60006020820190508181036000830152620005a0816200055e565b9050919050565b6000620005b3620005c6565b9050620005c1828262000683565b919050565b6000604051905090565b600067ffffffffffffffff821115620005ee57620005ed620006e8565b5b620005f9826200072b565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620006375780820151818401526020810190506200061a565b8381111562000647576000848401525b50505050565b600060028204905060018216806200066657607f821691505b602082108114156200067d576200067c620006b9565b5b50919050565b6200068e826200072b565b810181811067ffffffffffffffff82111715620006b057620006af620006e8565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61428f80620007756000396000f3fe6080604052600436106102255760003560e01c806370a0823111610123578063ae7c5f76116100ab578063e0a808531161006f578063e0a80853146107d2578063e985e9c5146107fb578063efbd73f414610838578063f2fde38b14610861578063f759867a1461088a57610225565b8063ae7c5f76146106ed578063b071401b14610718578063b88d4fde14610741578063c87b56dd1461076a578063d5abeb01146107a757610225565b806394354fd0116100f257806394354fd01461062757806395d89b4114610652578063a0712d681461067d578063a22cb46514610699578063a45ba8e7146106c257610225565b806370a082311461057f578063715018a6146105bc5780637ec4a659146105d35780638da5cb5b146105fc57610225565b80633ccfd60b116101b1578063518302271161017557806351830227146104985780635503a0e8146104c35780635c975abb146104ee5780636352211e146105195780636f8b44b01461055657610225565b80633ccfd60b146103c957806342842e0e146103e0578063438b63001461040957806344a0d68a146104465780634fdd43cb1461046f57610225565b806313faede6116101f857806313faede6146102f857806316ba10e01461032357806316c38b3c1461034c57806318160ddd1461037557806323b872dd146103a057610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613545565b6108b3565b60405161025e9190613a33565b60405180910390f35b34801561027357600080fd5b5061027c610995565b6040516102899190613a4e565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906135e8565b610a27565b6040516102c691906139aa565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906134d8565b610aa3565b005b34801561030457600080fd5b5061030d610bae565b60405161031a9190613b70565b60405180910390f35b34801561032f57600080fd5b5061034a6004803603810190610345919061359f565b610bb4565b005b34801561035857600080fd5b50610373600480360381019061036e9190613518565b610c4a565b005b34801561038157600080fd5b5061038a610ce3565b6040516103979190613b70565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c291906133c2565b610cfa565b005b3480156103d557600080fd5b506103de610d0a565b005b3480156103ec57600080fd5b50610407600480360381019061040291906133c2565b610e06565b005b34801561041557600080fd5b50610430600480360381019061042b9190613355565b610e26565b60405161043d9190613a11565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906135e8565b610f40565b005b34801561047b57600080fd5b506104966004803603810190610491919061359f565b610fc6565b005b3480156104a457600080fd5b506104ad61105c565b6040516104ba9190613a33565b60405180910390f35b3480156104cf57600080fd5b506104d861106f565b6040516104e59190613a4e565b60405180910390f35b3480156104fa57600080fd5b506105036110fd565b6040516105109190613a33565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b91906135e8565b611110565b60405161054d91906139aa565b60405180910390f35b34801561056257600080fd5b5061057d600480360381019061057891906135e8565b611126565b005b34801561058b57600080fd5b506105a660048036038101906105a19190613355565b6111ac565b6040516105b39190613b70565b60405180910390f35b3480156105c857600080fd5b506105d161127c565b005b3480156105df57600080fd5b506105fa60048036038101906105f5919061359f565b611304565b005b34801561060857600080fd5b5061061161139a565b60405161061e91906139aa565b60405180910390f35b34801561063357600080fd5b5061063c6113c3565b6040516106499190613b70565b60405180910390f35b34801561065e57600080fd5b506106676113c9565b6040516106749190613a4e565b60405180910390f35b610697600480360381019061069291906135e8565b61145b565b005b3480156106a557600080fd5b506106c060048036038101906106bb9190613498565b611620565b005b3480156106ce57600080fd5b506106d7611798565b6040516106e49190613a4e565b60405180910390f35b3480156106f957600080fd5b50610702611826565b60405161070f9190613a4e565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906135e8565b611934565b005b34801561074d57600080fd5b5061076860048036038101906107639190613415565b6119ba565b005b34801561077657600080fd5b50610791600480360381019061078c91906135e8565b611a36565b60405161079e9190613a4e565b60405180910390f35b3480156107b357600080fd5b506107bc611b8f565b6040516107c99190613b70565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190613518565b611b95565b005b34801561080757600080fd5b50610822600480360381019061081d9190613382565b611c2e565b60405161082f9190613a33565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190613615565b611cc2565b005b34801561086d57600080fd5b5061088860048036038101906108839190613355565b611df6565b005b34801561089657600080fd5b506108b160048036038101906108ac91906135e8565b611eee565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098e575061098d82612021565b5b9050919050565b6060600380546109a490613e79565b80601f01602080910402602001604051908101604052809291908181526020018280546109d090613e79565b8015610a1d5780601f106109f257610100808354040283529160200191610a1d565b820191906000526020600020905b815481529060010190602001808311610a0057829003601f168201915b5050505050905090565b6000610a328261208b565b610a68576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aae82611110565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b16576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b356120d9565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b675750610b6581610b606120d9565b611c2e565b155b15610b9e576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba98383836120e1565b505050565b600d5481565b610bbc6120d9565b73ffffffffffffffffffffffffffffffffffffffff16610bda61139a565b73ffffffffffffffffffffffffffffffffffffffff1614610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790613ad0565b60405180910390fd5b80600b9080519060200190610c46929190613126565b5050565b610c526120d9565b73ffffffffffffffffffffffffffffffffffffffff16610c7061139a565b73ffffffffffffffffffffffffffffffffffffffff1614610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90613ad0565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610ced612193565b6002546001540303905090565b610d0583838361219c565b505050565b610d126120d9565b73ffffffffffffffffffffffffffffffffffffffff16610d3061139a565b73ffffffffffffffffffffffffffffffffffffffff1614610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90613ad0565b60405180910390fd5b6000610d9061139a565b73ffffffffffffffffffffffffffffffffffffffff1647604051610db390613995565b60006040518083038185875af1925050503d8060008114610df0576040519150601f19603f3d011682016040523d82523d6000602084013e610df5565b606091505b5050905080610e0357600080fd5b50565b610e21838383604051806020016040528060008152506119ba565b505050565b60606000610e33836111ac565b905060008167ffffffffffffffff811115610e5157610e50614012565b5b604051908082528060200260200182016040528015610e7f5781602001602082028036833780820191505090505b50905060006001905060005b8381108015610e9c5750600e548211155b15610f3457610eaa8261208b565b15610f21576000610eba83611110565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1f5782848381518110610f0457610f03613fe3565b5b6020026020010181815250508180610f1b90613edc565b9250505b505b8180610f2c90613edc565b925050610e8b565b82945050505050919050565b610f486120d9565b73ffffffffffffffffffffffffffffffffffffffff16610f6661139a565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb390613ad0565b60405180910390fd5b80600d8190555050565b610fce6120d9565b73ffffffffffffffffffffffffffffffffffffffff16610fec61139a565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990613ad0565b60405180910390fd5b80600c9080519060200190611058929190613126565b5050565b601060019054906101000a900460ff1681565b600b805461107c90613e79565b80601f01602080910402602001604051908101604052809291908181526020018280546110a890613e79565b80156110f55780601f106110ca576101008083540402835291602001916110f5565b820191906000526020600020905b8154815290600101906020018083116110d857829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b600061111b82612652565b600001519050919050565b61112e6120d9565b73ffffffffffffffffffffffffffffffffffffffff1661114c61139a565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613ad0565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611214576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6112846120d9565b73ffffffffffffffffffffffffffffffffffffffff166112a261139a565b73ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90613ad0565b60405180910390fd5b61130260006128e1565b565b61130c6120d9565b73ffffffffffffffffffffffffffffffffffffffff1661132a61139a565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613ad0565b60405180910390fd5b80600a9080519060200190611396929190613126565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600480546113d890613e79565b80601f016020809104026020016040519081016040528092919081815260200182805461140490613e79565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b5050505050905090565b8060008111801561146e5750600f548111155b6114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490613ab0565b60405180910390fd5b600e54816114b9610ce3565b6114c39190613cae565b1115611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90613b30565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156990613a70565b60405180910390fd5b601060009054906101000a900460ff16156115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b990613af0565b60405180910390fd5b81600d546115d09190613d35565b341015611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990613b50565b60405180910390fd5b61161c33836129a5565b5050565b6116286120d9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561168d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061169a6120d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117476120d9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161178c9190613a33565b60405180910390a35050565b600c80546117a590613e79565b80601f01602080910402602001604051908101604052809291908181526020018280546117d190613e79565b801561181e5780601f106117f35761010080835404028352916020019161181e565b820191906000526020600020905b81548152906001019060200180831161180157829003601f168201915b505050505081565b60606118306120d9565b73ffffffffffffffffffffffffffffffffffffffff1661184e61139a565b73ffffffffffffffffffffffffffffffffffffffff16146118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90613ad0565b60405180910390fd5b600a80546118b190613e79565b80601f01602080910402602001604051908101604052809291908181526020018280546118dd90613e79565b801561192a5780601f106118ff5761010080835404028352916020019161192a565b820191906000526020600020905b81548152906001019060200180831161190d57829003601f168201915b5050505050905090565b61193c6120d9565b73ffffffffffffffffffffffffffffffffffffffff1661195a61139a565b73ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790613ad0565b60405180910390fd5b80600f8190555050565b6119c584848461219c565b6119e48373ffffffffffffffffffffffffffffffffffffffff166129c3565b80156119f957506119f7848484846129e6565b155b15611a30576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a418261208b565b611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613b10565b60405180910390fd5b60001515601060019054906101000a900460ff1615151415611b2e57600c8054611aa990613e79565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad590613e79565b8015611b225780601f10611af757610100808354040283529160200191611b22565b820191906000526020600020905b815481529060010190602001808311611b0557829003601f168201915b50505050509050611b8a565b6000611b38612b46565b90506000815111611b585760405180602001604052806000815250611b86565b80611b6284612bd8565b600b604051602001611b7693929190613964565b6040516020818303038152906040525b9150505b919050565b600e5481565b611b9d6120d9565b73ffffffffffffffffffffffffffffffffffffffff16611bbb61139a565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890613ad0565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611cd55750600f548111155b611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90613ab0565b60405180910390fd5b600e5481611d20610ce3565b611d2a9190613cae565b1115611d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6290613b30565b60405180910390fd5b611d736120d9565b73ffffffffffffffffffffffffffffffffffffffff16611d9161139a565b73ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde90613ad0565b60405180910390fd5b611df182846129a5565b505050565b611dfe6120d9565b73ffffffffffffffffffffffffffffffffffffffff16611e1c61139a565b73ffffffffffffffffffffffffffffffffffffffff1614611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990613ad0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed990613a90565b60405180910390fd5b611eeb816128e1565b50565b80600081118015611f015750600f548111155b611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790613ab0565b60405180910390fd5b600e5481611f4c610ce3565b611f569190613cae565b1115611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90613b30565b60405180910390fd5b611f9f6120d9565b73ffffffffffffffffffffffffffffffffffffffff16611fbd61139a565b73ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613ad0565b60405180910390fd5b61201d33836129a5565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081612096612193565b111580156120a5575060015482105b80156120d2575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006121a782612652565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612212576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166122336120d9565b73ffffffffffffffffffffffffffffffffffffffff16148061226257506122618561225c6120d9565b611c2e565b5b806122a757506122706120d9565b73ffffffffffffffffffffffffffffffffffffffff1661228f84610a27565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806122e0576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612347576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123548585856001612d39565b612360600084876120e1565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125e05760015482146125df57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461264b8585856001612d3f565b5050505050565b61265a6131ac565b600082905080612668612193565b11158015612677575060015481105b156128aa576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516128a857600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461278c5780925050506128dc565b5b6001156128a757818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128a25780925050506128dc565b61278d565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129bf828260405180602001604052806000815250612d45565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a0c6120d9565b8786866040518563ffffffff1660e01b8152600401612a2e94939291906139c5565b602060405180830381600087803b158015612a4857600080fd5b505af1925050508015612a7957506040513d601f19601f82011682018060405250810190612a769190613572565b60015b612af3573d8060008114612aa9576040519150601f19603f3d011682016040523d82523d6000602084013e612aae565b606091505b50600081511415612aeb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612b5590613e79565b80601f0160208091040260200160405190810160405280929190818152602001828054612b8190613e79565b8015612bce5780601f10612ba357610100808354040283529160200191612bce565b820191906000526020600020905b815481529060010190602001808311612bb157829003601f168201915b5050505050905090565b60606000821415612c20576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d34565b600082905060005b60008214612c52578080612c3b90613edc565b915050600a82612c4b9190613d04565b9150612c28565b60008167ffffffffffffffff811115612c6e57612c6d614012565b5b6040519080825280601f01601f191660200182016040528015612ca05781602001600182028036833780820191505090505b5090505b60008514612d2d57600182612cb99190613d8f565b9150600a85612cc89190613f25565b6030612cd49190613cae565b60f81b818381518110612cea57612ce9613fe3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d269190613d04565b9450612ca4565b8093505050505b919050565b50505050565b50505050565b612d528383836001612d57565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612dc5576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612e00576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e0d6000868387612d39565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612fd75750612fd68773ffffffffffffffffffffffffffffffffffffffff166129c3565b5b1561309d575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461304c60008884806001019550886129e6565b613082576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612fdd57826001541461309857600080fd5b613109565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561309e575b81600181905550505061311f6000868387612d3f565b5050505050565b82805461313290613e79565b90600052602060002090601f016020900481019282613154576000855561319b565b82601f1061316d57805160ff191683800117855561319b565b8280016001018555821561319b579182015b8281111561319a57825182559160200191906001019061317f565b5b5090506131a891906131ef565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156132085760008160009055506001016131f0565b5090565b600061321f61321a84613bb0565b613b8b565b90508281526020810184848401111561323b5761323a614046565b5b613246848285613e37565b509392505050565b600061326161325c84613be1565b613b8b565b90508281526020810184848401111561327d5761327c614046565b5b613288848285613e37565b509392505050565b60008135905061329f816141fd565b92915050565b6000813590506132b481614214565b92915050565b6000813590506132c98161422b565b92915050565b6000815190506132de8161422b565b92915050565b600082601f8301126132f9576132f8614041565b5b813561330984826020860161320c565b91505092915050565b600082601f83011261332757613326614041565b5b813561333784826020860161324e565b91505092915050565b60008135905061334f81614242565b92915050565b60006020828403121561336b5761336a614050565b5b600061337984828501613290565b91505092915050565b6000806040838503121561339957613398614050565b5b60006133a785828601613290565b92505060206133b885828601613290565b9150509250929050565b6000806000606084860312156133db576133da614050565b5b60006133e986828701613290565b93505060206133fa86828701613290565b925050604061340b86828701613340565b9150509250925092565b6000806000806080858703121561342f5761342e614050565b5b600061343d87828801613290565b945050602061344e87828801613290565b935050604061345f87828801613340565b925050606085013567ffffffffffffffff8111156134805761347f61404b565b5b61348c878288016132e4565b91505092959194509250565b600080604083850312156134af576134ae614050565b5b60006134bd85828601613290565b92505060206134ce858286016132a5565b9150509250929050565b600080604083850312156134ef576134ee614050565b5b60006134fd85828601613290565b925050602061350e85828601613340565b9150509250929050565b60006020828403121561352e5761352d614050565b5b600061353c848285016132a5565b91505092915050565b60006020828403121561355b5761355a614050565b5b6000613569848285016132ba565b91505092915050565b60006020828403121561358857613587614050565b5b6000613596848285016132cf565b91505092915050565b6000602082840312156135b5576135b4614050565b5b600082013567ffffffffffffffff8111156135d3576135d261404b565b5b6135df84828501613312565b91505092915050565b6000602082840312156135fe576135fd614050565b5b600061360c84828501613340565b91505092915050565b6000806040838503121561362c5761362b614050565b5b600061363a85828601613340565b925050602061364b85828601613290565b9150509250929050565b60006136618383613946565b60208301905092915050565b61367681613dc3565b82525050565b600061368782613c37565b6136918185613c65565b935061369c83613c12565b8060005b838110156136cd5781516136b48882613655565b97506136bf83613c58565b9250506001810190506136a0565b5085935050505092915050565b6136e381613dd5565b82525050565b60006136f482613c42565b6136fe8185613c76565b935061370e818560208601613e46565b61371781614055565b840191505092915050565b600061372d82613c4d565b6137378185613c92565b9350613747818560208601613e46565b61375081614055565b840191505092915050565b600061376682613c4d565b6137708185613ca3565b9350613780818560208601613e46565b80840191505092915050565b6000815461379981613e79565b6137a38186613ca3565b945060018216600081146137be57600181146137cf57613802565b60ff19831686528186019350613802565b6137d885613c22565b60005b838110156137fa578154818901526001820191506020810190506137db565b838801955050505b50505092915050565b6000613818601f83613c92565b915061382382614066565b602082019050919050565b600061383b602683613c92565b91506138468261408f565b604082019050919050565b600061385e601483613c92565b9150613869826140de565b602082019050919050565b6000613881602083613c92565b915061388c82614107565b602082019050919050565b60006138a4601783613c92565b91506138af82614130565b602082019050919050565b60006138c7602f83613c92565b91506138d282614159565b604082019050919050565b60006138ea600083613c87565b91506138f5826141a8565b600082019050919050565b600061390d601483613c92565b9150613918826141ab565b602082019050919050565b6000613930601383613c92565b915061393b826141d4565b602082019050919050565b61394f81613e2d565b82525050565b61395e81613e2d565b82525050565b6000613970828661375b565b915061397c828561375b565b9150613988828461378c565b9150819050949350505050565b60006139a0826138dd565b9150819050919050565b60006020820190506139bf600083018461366d565b92915050565b60006080820190506139da600083018761366d565b6139e7602083018661366d565b6139f46040830185613955565b8181036060830152613a0681846136e9565b905095945050505050565b60006020820190508181036000830152613a2b818461367c565b905092915050565b6000602082019050613a4860008301846136da565b92915050565b60006020820190508181036000830152613a688184613722565b905092915050565b60006020820190508181036000830152613a898161380b565b9050919050565b60006020820190508181036000830152613aa98161382e565b9050919050565b60006020820190508181036000830152613ac981613851565b9050919050565b60006020820190508181036000830152613ae981613874565b9050919050565b60006020820190508181036000830152613b0981613897565b9050919050565b60006020820190508181036000830152613b29816138ba565b9050919050565b60006020820190508181036000830152613b4981613900565b9050919050565b60006020820190508181036000830152613b6981613923565b9050919050565b6000602082019050613b856000830184613955565b92915050565b6000613b95613ba6565b9050613ba18282613eab565b919050565b6000604051905090565b600067ffffffffffffffff821115613bcb57613bca614012565b5b613bd482614055565b9050602081019050919050565b600067ffffffffffffffff821115613bfc57613bfb614012565b5b613c0582614055565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cb982613e2d565b9150613cc483613e2d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cf957613cf8613f56565b5b828201905092915050565b6000613d0f82613e2d565b9150613d1a83613e2d565b925082613d2a57613d29613f85565b5b828204905092915050565b6000613d4082613e2d565b9150613d4b83613e2d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8457613d83613f56565b5b828202905092915050565b6000613d9a82613e2d565b9150613da583613e2d565b925082821015613db857613db7613f56565b5b828203905092915050565b6000613dce82613e0d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e64578082015181840152602081019050613e49565b83811115613e73576000848401525b50505050565b60006002820490506001821680613e9157607f821691505b60208210811415613ea557613ea4613fb4565b5b50919050565b613eb482614055565b810181811067ffffffffffffffff82111715613ed357613ed2614012565b5b80604052505050565b6000613ee782613e2d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f1a57613f19613f56565b5b600182019050919050565b6000613f3082613e2d565b9150613f3b83613e2d565b925082613f4b57613f4a613f85565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163742e00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61420681613dc3565b811461421157600080fd5b50565b61421d81613dd5565b811461422857600080fd5b50565b61423481613de1565b811461423f57600080fd5b50565b61424b81613e2d565b811461425657600080fd5b5056fea26469706673582212206a520fb11e22a6c1d33aec2c53c4e63e0d198ee986fd33b47ca256832299616464736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000f417374726f4e5852437573746f6d7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004414e5852000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55515945646e6f345644566e48774239434b416877417276474d6673795642686244355956356f444b4344592f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102255760003560e01c806370a0823111610123578063ae7c5f76116100ab578063e0a808531161006f578063e0a80853146107d2578063e985e9c5146107fb578063efbd73f414610838578063f2fde38b14610861578063f759867a1461088a57610225565b8063ae7c5f76146106ed578063b071401b14610718578063b88d4fde14610741578063c87b56dd1461076a578063d5abeb01146107a757610225565b806394354fd0116100f257806394354fd01461062757806395d89b4114610652578063a0712d681461067d578063a22cb46514610699578063a45ba8e7146106c257610225565b806370a082311461057f578063715018a6146105bc5780637ec4a659146105d35780638da5cb5b146105fc57610225565b80633ccfd60b116101b1578063518302271161017557806351830227146104985780635503a0e8146104c35780635c975abb146104ee5780636352211e146105195780636f8b44b01461055657610225565b80633ccfd60b146103c957806342842e0e146103e0578063438b63001461040957806344a0d68a146104465780634fdd43cb1461046f57610225565b806313faede6116101f857806313faede6146102f857806316ba10e01461032357806316c38b3c1461034c57806318160ddd1461037557806323b872dd146103a057610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613545565b6108b3565b60405161025e9190613a33565b60405180910390f35b34801561027357600080fd5b5061027c610995565b6040516102899190613a4e565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b491906135e8565b610a27565b6040516102c691906139aa565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906134d8565b610aa3565b005b34801561030457600080fd5b5061030d610bae565b60405161031a9190613b70565b60405180910390f35b34801561032f57600080fd5b5061034a6004803603810190610345919061359f565b610bb4565b005b34801561035857600080fd5b50610373600480360381019061036e9190613518565b610c4a565b005b34801561038157600080fd5b5061038a610ce3565b6040516103979190613b70565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c291906133c2565b610cfa565b005b3480156103d557600080fd5b506103de610d0a565b005b3480156103ec57600080fd5b50610407600480360381019061040291906133c2565b610e06565b005b34801561041557600080fd5b50610430600480360381019061042b9190613355565b610e26565b60405161043d9190613a11565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906135e8565b610f40565b005b34801561047b57600080fd5b506104966004803603810190610491919061359f565b610fc6565b005b3480156104a457600080fd5b506104ad61105c565b6040516104ba9190613a33565b60405180910390f35b3480156104cf57600080fd5b506104d861106f565b6040516104e59190613a4e565b60405180910390f35b3480156104fa57600080fd5b506105036110fd565b6040516105109190613a33565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b91906135e8565b611110565b60405161054d91906139aa565b60405180910390f35b34801561056257600080fd5b5061057d600480360381019061057891906135e8565b611126565b005b34801561058b57600080fd5b506105a660048036038101906105a19190613355565b6111ac565b6040516105b39190613b70565b60405180910390f35b3480156105c857600080fd5b506105d161127c565b005b3480156105df57600080fd5b506105fa60048036038101906105f5919061359f565b611304565b005b34801561060857600080fd5b5061061161139a565b60405161061e91906139aa565b60405180910390f35b34801561063357600080fd5b5061063c6113c3565b6040516106499190613b70565b60405180910390f35b34801561065e57600080fd5b506106676113c9565b6040516106749190613a4e565b60405180910390f35b610697600480360381019061069291906135e8565b61145b565b005b3480156106a557600080fd5b506106c060048036038101906106bb9190613498565b611620565b005b3480156106ce57600080fd5b506106d7611798565b6040516106e49190613a4e565b60405180910390f35b3480156106f957600080fd5b50610702611826565b60405161070f9190613a4e565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906135e8565b611934565b005b34801561074d57600080fd5b5061076860048036038101906107639190613415565b6119ba565b005b34801561077657600080fd5b50610791600480360381019061078c91906135e8565b611a36565b60405161079e9190613a4e565b60405180910390f35b3480156107b357600080fd5b506107bc611b8f565b6040516107c99190613b70565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190613518565b611b95565b005b34801561080757600080fd5b50610822600480360381019061081d9190613382565b611c2e565b60405161082f9190613a33565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190613615565b611cc2565b005b34801561086d57600080fd5b5061088860048036038101906108839190613355565b611df6565b005b34801561089657600080fd5b506108b160048036038101906108ac91906135e8565b611eee565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098e575061098d82612021565b5b9050919050565b6060600380546109a490613e79565b80601f01602080910402602001604051908101604052809291908181526020018280546109d090613e79565b8015610a1d5780601f106109f257610100808354040283529160200191610a1d565b820191906000526020600020905b815481529060010190602001808311610a0057829003601f168201915b5050505050905090565b6000610a328261208b565b610a68576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aae82611110565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b16576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b356120d9565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b675750610b6581610b606120d9565b611c2e565b155b15610b9e576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba98383836120e1565b505050565b600d5481565b610bbc6120d9565b73ffffffffffffffffffffffffffffffffffffffff16610bda61139a565b73ffffffffffffffffffffffffffffffffffffffff1614610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790613ad0565b60405180910390fd5b80600b9080519060200190610c46929190613126565b5050565b610c526120d9565b73ffffffffffffffffffffffffffffffffffffffff16610c7061139a565b73ffffffffffffffffffffffffffffffffffffffff1614610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd90613ad0565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610ced612193565b6002546001540303905090565b610d0583838361219c565b505050565b610d126120d9565b73ffffffffffffffffffffffffffffffffffffffff16610d3061139a565b73ffffffffffffffffffffffffffffffffffffffff1614610d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7d90613ad0565b60405180910390fd5b6000610d9061139a565b73ffffffffffffffffffffffffffffffffffffffff1647604051610db390613995565b60006040518083038185875af1925050503d8060008114610df0576040519150601f19603f3d011682016040523d82523d6000602084013e610df5565b606091505b5050905080610e0357600080fd5b50565b610e21838383604051806020016040528060008152506119ba565b505050565b60606000610e33836111ac565b905060008167ffffffffffffffff811115610e5157610e50614012565b5b604051908082528060200260200182016040528015610e7f5781602001602082028036833780820191505090505b50905060006001905060005b8381108015610e9c5750600e548211155b15610f3457610eaa8261208b565b15610f21576000610eba83611110565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1f5782848381518110610f0457610f03613fe3565b5b6020026020010181815250508180610f1b90613edc565b9250505b505b8180610f2c90613edc565b925050610e8b565b82945050505050919050565b610f486120d9565b73ffffffffffffffffffffffffffffffffffffffff16610f6661139a565b73ffffffffffffffffffffffffffffffffffffffff1614610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb390613ad0565b60405180910390fd5b80600d8190555050565b610fce6120d9565b73ffffffffffffffffffffffffffffffffffffffff16610fec61139a565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990613ad0565b60405180910390fd5b80600c9080519060200190611058929190613126565b5050565b601060019054906101000a900460ff1681565b600b805461107c90613e79565b80601f01602080910402602001604051908101604052809291908181526020018280546110a890613e79565b80156110f55780601f106110ca576101008083540402835291602001916110f5565b820191906000526020600020905b8154815290600101906020018083116110d857829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b600061111b82612652565b600001519050919050565b61112e6120d9565b73ffffffffffffffffffffffffffffffffffffffff1661114c61139a565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613ad0565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611214576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6112846120d9565b73ffffffffffffffffffffffffffffffffffffffff166112a261139a565b73ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90613ad0565b60405180910390fd5b61130260006128e1565b565b61130c6120d9565b73ffffffffffffffffffffffffffffffffffffffff1661132a61139a565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613ad0565b60405180910390fd5b80600a9080519060200190611396929190613126565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600480546113d890613e79565b80601f016020809104026020016040519081016040528092919081815260200182805461140490613e79565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b5050505050905090565b8060008111801561146e5750600f548111155b6114ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a490613ab0565b60405180910390fd5b600e54816114b9610ce3565b6114c39190613cae565b1115611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90613b30565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156990613a70565b60405180910390fd5b601060009054906101000a900460ff16156115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b990613af0565b60405180910390fd5b81600d546115d09190613d35565b341015611612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160990613b50565b60405180910390fd5b61161c33836129a5565b5050565b6116286120d9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561168d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806008600061169a6120d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117476120d9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161178c9190613a33565b60405180910390a35050565b600c80546117a590613e79565b80601f01602080910402602001604051908101604052809291908181526020018280546117d190613e79565b801561181e5780601f106117f35761010080835404028352916020019161181e565b820191906000526020600020905b81548152906001019060200180831161180157829003601f168201915b505050505081565b60606118306120d9565b73ffffffffffffffffffffffffffffffffffffffff1661184e61139a565b73ffffffffffffffffffffffffffffffffffffffff16146118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90613ad0565b60405180910390fd5b600a80546118b190613e79565b80601f01602080910402602001604051908101604052809291908181526020018280546118dd90613e79565b801561192a5780601f106118ff5761010080835404028352916020019161192a565b820191906000526020600020905b81548152906001019060200180831161190d57829003601f168201915b5050505050905090565b61193c6120d9565b73ffffffffffffffffffffffffffffffffffffffff1661195a61139a565b73ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790613ad0565b60405180910390fd5b80600f8190555050565b6119c584848461219c565b6119e48373ffffffffffffffffffffffffffffffffffffffff166129c3565b80156119f957506119f7848484846129e6565b155b15611a30576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a418261208b565b611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613b10565b60405180910390fd5b60001515601060019054906101000a900460ff1615151415611b2e57600c8054611aa990613e79565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad590613e79565b8015611b225780601f10611af757610100808354040283529160200191611b22565b820191906000526020600020905b815481529060010190602001808311611b0557829003601f168201915b50505050509050611b8a565b6000611b38612b46565b90506000815111611b585760405180602001604052806000815250611b86565b80611b6284612bd8565b600b604051602001611b7693929190613964565b6040516020818303038152906040525b9150505b919050565b600e5481565b611b9d6120d9565b73ffffffffffffffffffffffffffffffffffffffff16611bbb61139a565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890613ad0565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611cd55750600f548111155b611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90613ab0565b60405180910390fd5b600e5481611d20610ce3565b611d2a9190613cae565b1115611d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6290613b30565b60405180910390fd5b611d736120d9565b73ffffffffffffffffffffffffffffffffffffffff16611d9161139a565b73ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde90613ad0565b60405180910390fd5b611df182846129a5565b505050565b611dfe6120d9565b73ffffffffffffffffffffffffffffffffffffffff16611e1c61139a565b73ffffffffffffffffffffffffffffffffffffffff1614611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990613ad0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed990613a90565b60405180910390fd5b611eeb816128e1565b50565b80600081118015611f015750600f548111155b611f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3790613ab0565b60405180910390fd5b600e5481611f4c610ce3565b611f569190613cae565b1115611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90613b30565b60405180910390fd5b611f9f6120d9565b73ffffffffffffffffffffffffffffffffffffffff16611fbd61139a565b73ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613ad0565b60405180910390fd5b61201d33836129a5565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081612096612193565b111580156120a5575060015482105b80156120d2575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006121a782612652565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612212576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166122336120d9565b73ffffffffffffffffffffffffffffffffffffffff16148061226257506122618561225c6120d9565b611c2e565b5b806122a757506122706120d9565b73ffffffffffffffffffffffffffffffffffffffff1661228f84610a27565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806122e0576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612347576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123548585856001612d39565b612360600084876120e1565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125e05760015482146125df57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461264b8585856001612d3f565b5050505050565b61265a6131ac565b600082905080612668612193565b11158015612677575060015481105b156128aa576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516128a857600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461278c5780925050506128dc565b5b6001156128a757818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128a25780925050506128dc565b61278d565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129bf828260405180602001604052806000815250612d45565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a0c6120d9565b8786866040518563ffffffff1660e01b8152600401612a2e94939291906139c5565b602060405180830381600087803b158015612a4857600080fd5b505af1925050508015612a7957506040513d601f19601f82011682018060405250810190612a769190613572565b60015b612af3573d8060008114612aa9576040519150601f19603f3d011682016040523d82523d6000602084013e612aae565b606091505b50600081511415612aeb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612b5590613e79565b80601f0160208091040260200160405190810160405280929190818152602001828054612b8190613e79565b8015612bce5780601f10612ba357610100808354040283529160200191612bce565b820191906000526020600020905b815481529060010190602001808311612bb157829003601f168201915b5050505050905090565b60606000821415612c20576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d34565b600082905060005b60008214612c52578080612c3b90613edc565b915050600a82612c4b9190613d04565b9150612c28565b60008167ffffffffffffffff811115612c6e57612c6d614012565b5b6040519080825280601f01601f191660200182016040528015612ca05781602001600182028036833780820191505090505b5090505b60008514612d2d57600182612cb99190613d8f565b9150600a85612cc89190613f25565b6030612cd49190613cae565b60f81b818381518110612cea57612ce9613fe3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d269190613d04565b9450612ca4565b8093505050505b919050565b50505050565b50505050565b612d528383836001612d57565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612dc5576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612e00576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e0d6000868387612d39565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612fd75750612fd68773ffffffffffffffffffffffffffffffffffffffff166129c3565b5b1561309d575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461304c60008884806001019550886129e6565b613082576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612fdd57826001541461309857600080fd5b613109565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561309e575b81600181905550505061311f6000868387612d3f565b5050505050565b82805461313290613e79565b90600052602060002090601f016020900481019282613154576000855561319b565b82601f1061316d57805160ff191683800117855561319b565b8280016001018555821561319b579182015b8281111561319a57825182559160200191906001019061317f565b5b5090506131a891906131ef565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156132085760008160009055506001016131f0565b5090565b600061321f61321a84613bb0565b613b8b565b90508281526020810184848401111561323b5761323a614046565b5b613246848285613e37565b509392505050565b600061326161325c84613be1565b613b8b565b90508281526020810184848401111561327d5761327c614046565b5b613288848285613e37565b509392505050565b60008135905061329f816141fd565b92915050565b6000813590506132b481614214565b92915050565b6000813590506132c98161422b565b92915050565b6000815190506132de8161422b565b92915050565b600082601f8301126132f9576132f8614041565b5b813561330984826020860161320c565b91505092915050565b600082601f83011261332757613326614041565b5b813561333784826020860161324e565b91505092915050565b60008135905061334f81614242565b92915050565b60006020828403121561336b5761336a614050565b5b600061337984828501613290565b91505092915050565b6000806040838503121561339957613398614050565b5b60006133a785828601613290565b92505060206133b885828601613290565b9150509250929050565b6000806000606084860312156133db576133da614050565b5b60006133e986828701613290565b93505060206133fa86828701613290565b925050604061340b86828701613340565b9150509250925092565b6000806000806080858703121561342f5761342e614050565b5b600061343d87828801613290565b945050602061344e87828801613290565b935050604061345f87828801613340565b925050606085013567ffffffffffffffff8111156134805761347f61404b565b5b61348c878288016132e4565b91505092959194509250565b600080604083850312156134af576134ae614050565b5b60006134bd85828601613290565b92505060206134ce858286016132a5565b9150509250929050565b600080604083850312156134ef576134ee614050565b5b60006134fd85828601613290565b925050602061350e85828601613340565b9150509250929050565b60006020828403121561352e5761352d614050565b5b600061353c848285016132a5565b91505092915050565b60006020828403121561355b5761355a614050565b5b6000613569848285016132ba565b91505092915050565b60006020828403121561358857613587614050565b5b6000613596848285016132cf565b91505092915050565b6000602082840312156135b5576135b4614050565b5b600082013567ffffffffffffffff8111156135d3576135d261404b565b5b6135df84828501613312565b91505092915050565b6000602082840312156135fe576135fd614050565b5b600061360c84828501613340565b91505092915050565b6000806040838503121561362c5761362b614050565b5b600061363a85828601613340565b925050602061364b85828601613290565b9150509250929050565b60006136618383613946565b60208301905092915050565b61367681613dc3565b82525050565b600061368782613c37565b6136918185613c65565b935061369c83613c12565b8060005b838110156136cd5781516136b48882613655565b97506136bf83613c58565b9250506001810190506136a0565b5085935050505092915050565b6136e381613dd5565b82525050565b60006136f482613c42565b6136fe8185613c76565b935061370e818560208601613e46565b61371781614055565b840191505092915050565b600061372d82613c4d565b6137378185613c92565b9350613747818560208601613e46565b61375081614055565b840191505092915050565b600061376682613c4d565b6137708185613ca3565b9350613780818560208601613e46565b80840191505092915050565b6000815461379981613e79565b6137a38186613ca3565b945060018216600081146137be57600181146137cf57613802565b60ff19831686528186019350613802565b6137d885613c22565b60005b838110156137fa578154818901526001820191506020810190506137db565b838801955050505b50505092915050565b6000613818601f83613c92565b915061382382614066565b602082019050919050565b600061383b602683613c92565b91506138468261408f565b604082019050919050565b600061385e601483613c92565b9150613869826140de565b602082019050919050565b6000613881602083613c92565b915061388c82614107565b602082019050919050565b60006138a4601783613c92565b91506138af82614130565b602082019050919050565b60006138c7602f83613c92565b91506138d282614159565b604082019050919050565b60006138ea600083613c87565b91506138f5826141a8565b600082019050919050565b600061390d601483613c92565b9150613918826141ab565b602082019050919050565b6000613930601383613c92565b915061393b826141d4565b602082019050919050565b61394f81613e2d565b82525050565b61395e81613e2d565b82525050565b6000613970828661375b565b915061397c828561375b565b9150613988828461378c565b9150819050949350505050565b60006139a0826138dd565b9150819050919050565b60006020820190506139bf600083018461366d565b92915050565b60006080820190506139da600083018761366d565b6139e7602083018661366d565b6139f46040830185613955565b8181036060830152613a0681846136e9565b905095945050505050565b60006020820190508181036000830152613a2b818461367c565b905092915050565b6000602082019050613a4860008301846136da565b92915050565b60006020820190508181036000830152613a688184613722565b905092915050565b60006020820190508181036000830152613a898161380b565b9050919050565b60006020820190508181036000830152613aa98161382e565b9050919050565b60006020820190508181036000830152613ac981613851565b9050919050565b60006020820190508181036000830152613ae981613874565b9050919050565b60006020820190508181036000830152613b0981613897565b9050919050565b60006020820190508181036000830152613b29816138ba565b9050919050565b60006020820190508181036000830152613b4981613900565b9050919050565b60006020820190508181036000830152613b6981613923565b9050919050565b6000602082019050613b856000830184613955565b92915050565b6000613b95613ba6565b9050613ba18282613eab565b919050565b6000604051905090565b600067ffffffffffffffff821115613bcb57613bca614012565b5b613bd482614055565b9050602081019050919050565b600067ffffffffffffffff821115613bfc57613bfb614012565b5b613c0582614055565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cb982613e2d565b9150613cc483613e2d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cf957613cf8613f56565b5b828201905092915050565b6000613d0f82613e2d565b9150613d1a83613e2d565b925082613d2a57613d29613f85565b5b828204905092915050565b6000613d4082613e2d565b9150613d4b83613e2d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d8457613d83613f56565b5b828202905092915050565b6000613d9a82613e2d565b9150613da583613e2d565b925082821015613db857613db7613f56565b5b828203905092915050565b6000613dce82613e0d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e64578082015181840152602081019050613e49565b83811115613e73576000848401525b50505050565b60006002820490506001821680613e9157607f821691505b60208210811415613ea557613ea4613fb4565b5b50919050565b613eb482614055565b810181811067ffffffffffffffff82111715613ed357613ed2614012565b5b80604052505050565b6000613ee782613e2d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f1a57613f19613f56565b5b600182019050919050565b6000613f3082613e2d565b9150613f3b83613e2d565b925082613f4b57613f4a613f85565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163742e00600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61420681613dc3565b811461421157600080fd5b50565b61421d81613dd5565b811461422857600080fd5b50565b61423481613de1565b811461423f57600080fd5b50565b61424b81613e2d565b811461425657600080fd5b5056fea26469706673582212206a520fb11e22a6c1d33aec2c53c4e63e0d198ee986fd33b47ca256832299616464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000f417374726f4e5852437573746f6d7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004414e5852000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55515945646e6f345644566e48774239434b416877417276474d6673795642686244355956356f444b4344592f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): AstroNXRCustoms
Arg [1] : _symbol (string): ANXR
Arg [2] : _initBaseURI (string): ipfs://QmUQYEdno4VDVnHwB9CKAhwArvGMfsyVBhbD5YV5oDKCDY/
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 417374726f4e5852437573746f6d730000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 414e585200000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d55515945646e6f345644566e48774239434b4168774172
Arg [10] : 76474d6673795642686244355956356f444b4344592f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46394:4467:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28467:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31580:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33083:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32646:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46664:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49994:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50100:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27716:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33948:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50183:462;;;;;;;;;;;;;:::i;:::-;;34189:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48031:694;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49329:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49645:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46814:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46586:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46784:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31388:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49409:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28836:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;49783:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46738:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31749:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47462:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33359:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46624:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49889:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49509:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34445:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48735:501;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46702:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49242:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33717:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47730:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47891:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28467:305;28569:4;28621:25;28606:40;;;:11;:40;;;;:105;;;;28678:33;28663:48;;;:11;:48;;;;28606:105;:158;;;;28728:36;28752:11;28728:23;:36::i;:::-;28606:158;28586:178;;28467:305;;;:::o;31580:100::-;31634:13;31667:5;31660:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31580:100;:::o;33083:204::-;33151:7;33176:16;33184:7;33176;:16::i;:::-;33171:64;;33201:34;;;;;;;;;;;;;;33171:64;33255:15;:24;33271:7;33255:24;;;;;;;;;;;;;;;;;;;;;33248:31;;33083:204;;;:::o;32646:371::-;32719:13;32735:24;32751:7;32735:15;:24::i;:::-;32719:40;;32780:5;32774:11;;:2;:11;;;32770:48;;;32794:24;;;;;;;;;;;;;;32770:48;32851:5;32835:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;32861:37;32878:5;32885:12;:10;:12::i;:::-;32861:16;:37::i;:::-;32860:38;32835:63;32831:138;;;32922:35;;;;;;;;;;;;;;32831:138;32981:28;32990:2;32994:7;33003:5;32981:8;:28::i;:::-;32708:309;32646:371;;:::o;46664:33::-;;;;:::o;49994:100::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50078:10:::1;50066:9;:22;;;;;;;;;;;;:::i;:::-;;49994:100:::0;:::o;50100:77::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50165:6:::1;50156;;:15;;;;;;;;;;;;;;;;;;50100:77:::0;:::o;27716:303::-;27760:7;27985:15;:13;:15::i;:::-;27970:12;;27954:13;;:28;:46;27947:53;;27716:303;:::o;33948:170::-;34082:28;34092:4;34098:2;34102:7;34082:9;:28::i;:::-;33948:170;;;:::o;50183:462::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50467:7:::1;50488;:5;:7::i;:::-;50480:21;;50509;50480:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50466:69;;;50550:2;50542:11;;;::::0;::::1;;50220:425;50183:462::o:0;34189:185::-;34327:39;34344:4;34350:2;34354:7;34327:39;;;;;;;;;;;;:16;:39::i;:::-;34189:185;;;:::o;48031:694::-;48106:16;48134:23;48160:17;48170:6;48160:9;:17::i;:::-;48134:43;;48184:30;48231:15;48217:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48184:63;;48254:22;48279:1;48254:26;;48287:23;48323:368;48348:15;48330;:33;:64;;;;;48385:9;;48367:14;:27;;48330:64;48323:368;;;48410:25;48419:14;48410:7;:25::i;:::-;48405:254;;;48449:25;48477:23;48485:14;48477:7;:23::i;:::-;48449:51;;48538:6;48517:27;;:17;:27;;;48513:137;;;48592:14;48559:13;48573:15;48559:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;48621:17;;;;;:::i;:::-;;;;48513:137;48438:221;48405:254;48667:16;;;;;:::i;:::-;;;;48323:368;;;48706:13;48699:20;;;;;;48031:694;;;:::o;49329:74::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49392:5:::1;49385:4;:12;;;;49329:74:::0;:::o;49645:132::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49753:18:::1;49733:17;:38;;;;;;;;;;;;:::i;:::-;;49645:132:::0;:::o;46814:27::-;;;;;;;;;;;;;:::o;46586:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46784:25::-;;;;;;;;;;;;;:::o;31388:125::-;31452:7;31479:21;31492:7;31479:12;:21::i;:::-;:26;;;31472:33;;31388:125;;;:::o;49409:94::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49487:10:::1;49475:9;:22;;;;49409:94:::0;:::o;28836:206::-;28900:7;28941:1;28924:19;;:5;:19;;;28920:60;;;28952:28;;;;;;;;;;;;;;28920:60;29006:12;:19;29019:5;29006:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28998:36;;28991:43;;28836:206;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;49783:100::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49867:10:::1;49855:9;:22;;;;;;;;;;;;:::i;:::-;;49783:100:::0;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;46738:39::-;;;;:::o;31749:104::-;31805:13;31838:7;31831:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31749:104;:::o;47462:260::-;47527:11;47177:1;47163:11;:15;:52;;;;;47197:18;;47182:11;:33;;47163:52;47155:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47286:9;;47271:11;47255:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;47247:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47393:10:::1;47380:23;;:9;:23;;;47372:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47569:6:::2;;;;;;;;;;;47568:7;47560:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;47638:11;47631:4;;:18;;;;:::i;:::-;47618:9;:31;;47610:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47682:34;47692:10;47704:11;47682:9;:34::i;:::-;47462:260:::0;;:::o;33359:287::-;33470:12;:10;:12::i;:::-;33458:24;;:8;:24;;;33454:54;;;33491:17;;;;;;;;;;;;;;33454:54;33566:8;33521:18;:32;33540:12;:10;:12::i;:::-;33521:32;;;;;;;;;;;;;;;:42;33554:8;33521:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33619:8;33590:48;;33605:12;:10;:12::i;:::-;33590:48;;;33629:8;33590:48;;;;;;:::i;:::-;;;;;;;;33359:287;;:::o;46624:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49889:99::-;49944:13;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49973:9:::1;49966:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49889:99:::0;:::o;49509:130::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49614:19:::1;49593:18;:40;;;;49509:130:::0;:::o;34445:369::-;34612:28;34622:4;34628:2;34632:7;34612:9;:28::i;:::-;34655:15;:2;:13;;;:15::i;:::-;:76;;;;;34675:56;34706:4;34712:2;34716:7;34725:5;34675:30;:56::i;:::-;34674:57;34655:76;34651:156;;;34755:40;;;;;;;;;;;;;;34651:156;34445:369;;;;:::o;48735:501::-;48834:13;48875:17;48883:8;48875:7;:17::i;:::-;48859:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;48982:5;48970:17;;:8;;;;;;;;;;;:17;;;48966:64;;;49005:17;48998:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48966:64;49038:28;49069:10;:8;:10::i;:::-;49038:41;;49124:1;49099:14;49093:28;:32;:137;;;;;;;;;;;;;;;;;49161:14;49177:26;49194:8;49177:16;:26::i;:::-;49205:9;49144:71;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49093:137;49086:144;;;48735:501;;;;:::o;46702:31::-;;;;:::o;49242:81::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49311:6:::1;49300:8;;:17;;;;;;;;;;;;;;;;;;49242:81:::0;:::o;33717:164::-;33814:4;33838:18;:25;33857:5;33838:25;;;;;;;;;;;;;;;:35;33864:8;33838:35;;;;;;;;;;;;;;;;;;;;;;;;;33831:42;;33717:164;;;;:::o;47730:155::-;47816:11;47177:1;47163:11;:15;:52;;;;;47197:18;;47182:11;:33;;47163:52;47155:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47286:9;;47271:11;47255:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;47247:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5775:12:::1;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47846:33:::2;47856:9;47867:11;47846:9;:33::i;:::-;47730:155:::0;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;47891:134::-;47955:11;47177:1;47163:11;:15;:52;;;;;47197:18;;47182:11;:33;;47163:52;47155:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47286:9;;47271:11;47255:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;47247:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5775:12:::1;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47985:34:::2;47995:10;48007:11;47985:9;:34::i;:::-;47891:134:::0;;:::o;18351:157::-;18436:4;18475:25;18460:40;;;:11;:40;;;;18453:47;;18351:157;;;:::o;35069:174::-;35126:4;35169:7;35150:15;:13;:15::i;:::-;:26;;:53;;;;;35190:13;;35180:7;:23;35150:53;:85;;;;;35208:11;:20;35220:7;35208:20;;;;;;;;;;;:27;;;;;;;;;;;;35207:28;35150:85;35143:92;;35069:174;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;43226:196::-;43368:2;43341:15;:24;43357:7;43341:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43406:7;43402:2;43386:28;;43395:5;43386:28;;;;;;;;;;;;43226:196;;;:::o;50761:95::-;50826:7;50849:1;50842:8;;50761:95;:::o;38169:2130::-;38284:35;38322:21;38335:7;38322:12;:21::i;:::-;38284:59;;38382:4;38360:26;;:13;:18;;;:26;;;38356:67;;38395:28;;;;;;;;;;;;;;38356:67;38436:22;38478:4;38462:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;38499:36;38516:4;38522:12;:10;:12::i;:::-;38499:16;:36::i;:::-;38462:73;:126;;;;38576:12;:10;:12::i;:::-;38552:36;;:20;38564:7;38552:11;:20::i;:::-;:36;;;38462:126;38436:153;;38607:17;38602:66;;38633:35;;;;;;;;;;;;;;38602:66;38697:1;38683:16;;:2;:16;;;38679:52;;;38708:23;;;;;;;;;;;;;;38679:52;38744:43;38766:4;38772:2;38776:7;38785:1;38744:21;:43::i;:::-;38852:35;38869:1;38873:7;38882:4;38852:8;:35::i;:::-;39213:1;39183:12;:18;39196:4;39183:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39257:1;39229:12;:16;39242:2;39229:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39275:31;39309:11;:20;39321:7;39309:20;;;;;;;;;;;39275:54;;39360:2;39344:8;:13;;;:18;;;;;;;;;;;;;;;;;;39410:15;39377:8;:23;;;:49;;;;;;;;;;;;;;;;;;39678:19;39710:1;39700:7;:11;39678:33;;39726:31;39760:11;:24;39772:11;39760:24;;;;;;;;;;;39726:58;;39828:1;39803:27;;:8;:13;;;;;;;;;;;;:27;;;39799:384;;;40013:13;;39998:11;:28;39994:174;;40067:4;40051:8;:13;;;:20;;;;;;;;;;;;;;;;;;40120:13;:28;;;40094:8;:23;;;:54;;;;;;;;;;;;;;;;;;39994:174;39799:384;39158:1036;;;40230:7;40226:2;40211:27;;40220:4;40211:27;;;;;;;;;;;;40249:42;40270:4;40276:2;40280:7;40289:1;40249:20;:42::i;:::-;38273:2026;;38169:2130;;;:::o;30217:1109::-;30279:21;;:::i;:::-;30313:12;30328:7;30313:22;;30396:4;30377:15;:13;:15::i;:::-;:23;;:47;;;;;30411:13;;30404:4;:20;30377:47;30373:886;;;30445:31;30479:11;:17;30491:4;30479:17;;;;;;;;;;;30445:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30520:9;:16;;;30515:729;;30591:1;30565:28;;:9;:14;;;:28;;;30561:101;;30629:9;30622:16;;;;;;30561:101;30964:261;30971:4;30964:261;;;31004:6;;;;;;;;31049:11;:17;31061:4;31049:17;;;;;;;;;;;31037:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31123:1;31097:28;;:9;:14;;;:28;;;31093:109;;31165:9;31158:16;;;;;;31093:109;30964:261;;;30515:729;30426:833;30373:886;31287:31;;;;;;;;;;;;;;30217:1109;;;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;35251:104::-;35320:27;35330:2;35334:8;35320:27;;;;;;;;;;;;:9;:27::i;:::-;35251:104;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;43914:667::-;44077:4;44114:2;44098:36;;;44135:12;:10;:12::i;:::-;44149:4;44155:7;44164:5;44098:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44094:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44349:1;44332:6;:13;:18;44328:235;;;44378:40;;;;;;;;;;;;;;44328:235;44521:6;44515:13;44506:6;44502:2;44498:15;44491:38;44094:480;44227:45;;;44217:55;;;:6;:55;;;;44210:62;;;43914:667;;;;;;:::o;50651:104::-;50711:13;50740:9;50733:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50651:104;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;45229:159::-;;;;;:::o;46047:158::-;;;;;:::o;35718:163::-;35841:32;35847:2;35851:8;35861:5;35868:4;35841:5;:32::i;:::-;35718:163;;;:::o;36140:1775::-;36279:20;36302:13;;36279:36;;36344:1;36330:16;;:2;:16;;;36326:48;;;36355:19;;;;;;;;;;;;;;36326:48;36401:1;36389:8;:13;36385:44;;;36411:18;;;;;;;;;;;;;;36385:44;36442:61;36472:1;36476:2;36480:12;36494:8;36442:21;:61::i;:::-;36815:8;36780:12;:16;36793:2;36780:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36879:8;36839:12;:16;36852:2;36839:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36938:2;36905:11;:25;36917:12;36905:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37005:15;36955:11;:25;36967:12;36955:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37038:20;37061:12;37038:35;;37088:11;37117:8;37102:12;:23;37088:37;;37146:4;:23;;;;;37154:15;:2;:13;;;:15::i;:::-;37146:23;37142:641;;;37190:314;37246:12;37242:2;37221:38;;37238:1;37221:38;;;;;;;;;;;;37287:69;37326:1;37330:2;37334:14;;;;;;37350:5;37287:30;:69::i;:::-;37282:174;;37392:40;;;;;;;;;;;;;;37282:174;37499:3;37483:12;:19;;37190:314;;37585:12;37568:13;;:29;37564:43;;37599:8;;;37564:43;37142:641;;;37648:120;37704:14;;;;;;37700:2;37679:40;;37696:1;37679:40;;;;;;;;;;;;37763:3;37747:12;:19;;37648:120;;37142:641;37813:12;37797:13;:28;;;;36755:1082;;37847:60;37876:1;37880:2;37884:12;37898:8;37847:20;:60::i;:::-;36268:1647;36140:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:179::-;8036:10;8057:46;8099:3;8091:6;8057:46;:::i;:::-;8135:4;8130:3;8126:14;8112:28;;7967:179;;;;:::o;8152:118::-;8239:24;8257:5;8239:24;:::i;:::-;8234:3;8227:37;8152:118;;:::o;8306:732::-;8425:3;8454:54;8502:5;8454:54;:::i;:::-;8524:86;8603:6;8598:3;8524:86;:::i;:::-;8517:93;;8634:56;8684:5;8634:56;:::i;:::-;8713:7;8744:1;8729:284;8754:6;8751:1;8748:13;8729:284;;;8830:6;8824:13;8857:63;8916:3;8901:13;8857:63;:::i;:::-;8850:70;;8943:60;8996:6;8943:60;:::i;:::-;8933:70;;8789:224;8776:1;8773;8769:9;8764:14;;8729:284;;;8733:14;9029:3;9022:10;;8430:608;;;8306:732;;;;:::o;9044:109::-;9125:21;9140:5;9125:21;:::i;:::-;9120:3;9113:34;9044:109;;:::o;9159:360::-;9245:3;9273:38;9305:5;9273:38;:::i;:::-;9327:70;9390:6;9385:3;9327:70;:::i;:::-;9320:77;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:29;9505:6;9483:29;:::i;:::-;9478:3;9474:39;9467:46;;9249:270;9159:360;;;;:::o;9525:364::-;9613:3;9641:39;9674:5;9641:39;:::i;:::-;9696:71;9760:6;9755:3;9696:71;:::i;:::-;9689:78;;9776:52;9821:6;9816:3;9809:4;9802:5;9798:16;9776:52;:::i;:::-;9853:29;9875:6;9853:29;:::i;:::-;9848:3;9844:39;9837:46;;9617:272;9525:364;;;;:::o;9895:377::-;10001:3;10029:39;10062:5;10029:39;:::i;:::-;10084:89;10166:6;10161:3;10084:89;:::i;:::-;10077:96;;10182:52;10227:6;10222:3;10215:4;10208:5;10204:16;10182:52;:::i;:::-;10259:6;10254:3;10250:16;10243:23;;10005:267;9895:377;;;;:::o;10302:845::-;10405:3;10442:5;10436:12;10471:36;10497:9;10471:36;:::i;:::-;10523:89;10605:6;10600:3;10523:89;:::i;:::-;10516:96;;10643:1;10632:9;10628:17;10659:1;10654:137;;;;10805:1;10800:341;;;;10621:520;;10654:137;10738:4;10734:9;10723;10719:25;10714:3;10707:38;10774:6;10769:3;10765:16;10758:23;;10654:137;;10800:341;10867:38;10899:5;10867:38;:::i;:::-;10927:1;10941:154;10955:6;10952:1;10949:13;10941:154;;;11029:7;11023:14;11019:1;11014:3;11010:11;11003:35;11079:1;11070:7;11066:15;11055:26;;10977:4;10974:1;10970:12;10965:17;;10941:154;;;11124:6;11119:3;11115:16;11108:23;;10807:334;;10621:520;;10409:738;;10302:845;;;;:::o;11153:366::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:398::-;13544:3;13565:83;13646:1;13641:3;13565:83;:::i;:::-;13558:90;;13657:93;13746:3;13657:93;:::i;:::-;13775:1;13770:3;13766:11;13759:18;;13385:398;;;:::o;13789:366::-;13931:3;13952:67;14016:2;14011:3;13952:67;:::i;:::-;13945:74;;14028:93;14117:3;14028:93;:::i;:::-;14146:2;14141:3;14137:12;14130:19;;13789:366;;;:::o;14161:::-;14303:3;14324:67;14388:2;14383:3;14324:67;:::i;:::-;14317:74;;14400:93;14489:3;14400:93;:::i;:::-;14518:2;14513:3;14509:12;14502:19;;14161:366;;;:::o;14533:108::-;14610:24;14628:5;14610:24;:::i;:::-;14605:3;14598:37;14533:108;;:::o;14647:118::-;14734:24;14752:5;14734:24;:::i;:::-;14729:3;14722:37;14647:118;;:::o;14771:589::-;14996:3;15018:95;15109:3;15100:6;15018:95;:::i;:::-;15011:102;;15130:95;15221:3;15212:6;15130:95;:::i;:::-;15123:102;;15242:92;15330:3;15321:6;15242:92;:::i;:::-;15235:99;;15351:3;15344:10;;14771:589;;;;;;:::o;15366:379::-;15550:3;15572:147;15715:3;15572:147;:::i;:::-;15565:154;;15736:3;15729:10;;15366:379;;;:::o;15751:222::-;15844:4;15882:2;15871:9;15867:18;15859:26;;15895:71;15963:1;15952:9;15948:17;15939:6;15895:71;:::i;:::-;15751:222;;;;:::o;15979:640::-;16174:4;16212:3;16201:9;16197:19;16189:27;;16226:71;16294:1;16283:9;16279:17;16270:6;16226:71;:::i;:::-;16307:72;16375:2;16364:9;16360:18;16351:6;16307:72;:::i;:::-;16389;16457:2;16446:9;16442:18;16433:6;16389:72;:::i;:::-;16508:9;16502:4;16498:20;16493:2;16482:9;16478:18;16471:48;16536:76;16607:4;16598:6;16536:76;:::i;:::-;16528:84;;15979:640;;;;;;;:::o;16625:373::-;16768:4;16806:2;16795:9;16791:18;16783:26;;16855:9;16849:4;16845:20;16841:1;16830:9;16826:17;16819:47;16883:108;16986:4;16977:6;16883:108;:::i;:::-;16875:116;;16625:373;;;;:::o;17004:210::-;17091:4;17129:2;17118:9;17114:18;17106:26;;17142:65;17204:1;17193:9;17189:17;17180:6;17142:65;:::i;:::-;17004:210;;;;:::o;17220:313::-;17333:4;17371:2;17360:9;17356:18;17348:26;;17420:9;17414:4;17410:20;17406:1;17395:9;17391:17;17384:47;17448:78;17521:4;17512:6;17448:78;:::i;:::-;17440:86;;17220:313;;;;:::o;17539:419::-;17705:4;17743:2;17732:9;17728:18;17720:26;;17792:9;17786:4;17782:20;17778:1;17767:9;17763:17;17756:47;17820:131;17946:4;17820:131;:::i;:::-;17812:139;;17539:419;;;:::o;17964:::-;18130:4;18168:2;18157:9;18153:18;18145:26;;18217:9;18211:4;18207:20;18203:1;18192:9;18188:17;18181:47;18245:131;18371:4;18245:131;:::i;:::-;18237:139;;17964:419;;;:::o;18389:::-;18555:4;18593:2;18582:9;18578:18;18570:26;;18642:9;18636:4;18632:20;18628:1;18617:9;18613:17;18606:47;18670:131;18796:4;18670:131;:::i;:::-;18662:139;;18389:419;;;:::o;18814:::-;18980:4;19018:2;19007:9;19003:18;18995:26;;19067:9;19061:4;19057:20;19053:1;19042:9;19038:17;19031:47;19095:131;19221:4;19095:131;:::i;:::-;19087:139;;18814:419;;;:::o;19239:::-;19405:4;19443:2;19432:9;19428:18;19420:26;;19492:9;19486:4;19482:20;19478:1;19467:9;19463:17;19456:47;19520:131;19646:4;19520:131;:::i;:::-;19512:139;;19239:419;;;:::o;19664:::-;19830:4;19868:2;19857:9;19853:18;19845:26;;19917:9;19911:4;19907:20;19903:1;19892:9;19888:17;19881:47;19945:131;20071:4;19945:131;:::i;:::-;19937:139;;19664:419;;;:::o;20089:::-;20255:4;20293:2;20282:9;20278:18;20270:26;;20342:9;20336:4;20332:20;20328:1;20317:9;20313:17;20306:47;20370:131;20496:4;20370:131;:::i;:::-;20362:139;;20089:419;;;:::o;20514:::-;20680:4;20718:2;20707:9;20703:18;20695:26;;20767:9;20761:4;20757:20;20753:1;20742:9;20738:17;20731:47;20795:131;20921:4;20795:131;:::i;:::-;20787:139;;20514:419;;;:::o;20939:222::-;21032:4;21070:2;21059:9;21055:18;21047:26;;21083:71;21151:1;21140:9;21136:17;21127:6;21083:71;:::i;:::-;20939:222;;;;:::o;21167:129::-;21201:6;21228:20;;:::i;:::-;21218:30;;21257:33;21285:4;21277:6;21257:33;:::i;:::-;21167:129;;;:::o;21302:75::-;21335:6;21368:2;21362:9;21352:19;;21302:75;:::o;21383:307::-;21444:4;21534:18;21526:6;21523:30;21520:56;;;21556:18;;:::i;:::-;21520:56;21594:29;21616:6;21594:29;:::i;:::-;21586:37;;21678:4;21672;21668:15;21660:23;;21383:307;;;:::o;21696:308::-;21758:4;21848:18;21840:6;21837:30;21834:56;;;21870:18;;:::i;:::-;21834:56;21908:29;21930:6;21908:29;:::i;:::-;21900:37;;21992:4;21986;21982:15;21974:23;;21696:308;;;:::o;22010:132::-;22077:4;22100:3;22092:11;;22130:4;22125:3;22121:14;22113:22;;22010:132;;;:::o;22148:141::-;22197:4;22220:3;22212:11;;22243:3;22240:1;22233:14;22277:4;22274:1;22264:18;22256:26;;22148:141;;;:::o;22295:114::-;22362:6;22396:5;22390:12;22380:22;;22295:114;;;:::o;22415:98::-;22466:6;22500:5;22494:12;22484:22;;22415:98;;;:::o;22519:99::-;22571:6;22605:5;22599:12;22589:22;;22519:99;;;:::o;22624:113::-;22694:4;22726;22721:3;22717:14;22709:22;;22624:113;;;:::o;22743:184::-;22842:11;22876:6;22871:3;22864:19;22916:4;22911:3;22907:14;22892:29;;22743:184;;;;:::o;22933:168::-;23016:11;23050:6;23045:3;23038:19;23090:4;23085:3;23081:14;23066:29;;22933:168;;;;:::o;23107:147::-;23208:11;23245:3;23230:18;;23107:147;;;;:::o;23260:169::-;23344:11;23378:6;23373:3;23366:19;23418:4;23413:3;23409:14;23394:29;;23260:169;;;;:::o;23435:148::-;23537:11;23574:3;23559:18;;23435:148;;;;:::o;23589:305::-;23629:3;23648:20;23666:1;23648:20;:::i;:::-;23643:25;;23682:20;23700:1;23682:20;:::i;:::-;23677:25;;23836:1;23768:66;23764:74;23761:1;23758:81;23755:107;;;23842:18;;:::i;:::-;23755:107;23886:1;23883;23879:9;23872:16;;23589:305;;;;:::o;23900:185::-;23940:1;23957:20;23975:1;23957:20;:::i;:::-;23952:25;;23991:20;24009:1;23991:20;:::i;:::-;23986:25;;24030:1;24020:35;;24035:18;;:::i;:::-;24020:35;24077:1;24074;24070:9;24065:14;;23900:185;;;;:::o;24091:348::-;24131:7;24154:20;24172:1;24154:20;:::i;:::-;24149:25;;24188:20;24206:1;24188:20;:::i;:::-;24183:25;;24376:1;24308:66;24304:74;24301:1;24298:81;24293:1;24286:9;24279:17;24275:105;24272:131;;;24383:18;;:::i;:::-;24272:131;24431:1;24428;24424:9;24413:20;;24091:348;;;;:::o;24445:191::-;24485:4;24505:20;24523:1;24505:20;:::i;:::-;24500:25;;24539:20;24557:1;24539:20;:::i;:::-;24534:25;;24578:1;24575;24572:8;24569:34;;;24583:18;;:::i;:::-;24569:34;24628:1;24625;24621:9;24613:17;;24445:191;;;;:::o;24642:96::-;24679:7;24708:24;24726:5;24708:24;:::i;:::-;24697:35;;24642:96;;;:::o;24744:90::-;24778:7;24821:5;24814:13;24807:21;24796:32;;24744:90;;;:::o;24840:149::-;24876:7;24916:66;24909:5;24905:78;24894:89;;24840:149;;;:::o;24995:126::-;25032:7;25072:42;25065:5;25061:54;25050:65;;24995:126;;;:::o;25127:77::-;25164:7;25193:5;25182:16;;25127:77;;;:::o;25210:154::-;25294:6;25289:3;25284;25271:30;25356:1;25347:6;25342:3;25338:16;25331:27;25210:154;;;:::o;25370:307::-;25438:1;25448:113;25462:6;25459:1;25456:13;25448:113;;;25547:1;25542:3;25538:11;25532:18;25528:1;25523:3;25519:11;25512:39;25484:2;25481:1;25477:10;25472:15;;25448:113;;;25579:6;25576:1;25573:13;25570:101;;;25659:1;25650:6;25645:3;25641:16;25634:27;25570:101;25419:258;25370:307;;;:::o;25683:320::-;25727:6;25764:1;25758:4;25754:12;25744:22;;25811:1;25805:4;25801:12;25832:18;25822:81;;25888:4;25880:6;25876:17;25866:27;;25822:81;25950:2;25942:6;25939:14;25919:18;25916:38;25913:84;;;25969:18;;:::i;:::-;25913:84;25734:269;25683:320;;;:::o;26009:281::-;26092:27;26114:4;26092:27;:::i;:::-;26084:6;26080:40;26222:6;26210:10;26207:22;26186:18;26174:10;26171:34;26168:62;26165:88;;;26233:18;;:::i;:::-;26165:88;26273:10;26269:2;26262:22;26052:238;26009:281;;:::o;26296:233::-;26335:3;26358:24;26376:5;26358:24;:::i;:::-;26349:33;;26404:66;26397:5;26394:77;26391:103;;;26474:18;;:::i;:::-;26391:103;26521:1;26514:5;26510:13;26503:20;;26296:233;;;:::o;26535:176::-;26567:1;26584:20;26602:1;26584:20;:::i;:::-;26579:25;;26618:20;26636:1;26618:20;:::i;:::-;26613:25;;26657:1;26647:35;;26662:18;;:::i;:::-;26647:35;26703:1;26700;26696:9;26691:14;;26535:176;;;;:::o;26717:180::-;26765:77;26762:1;26755:88;26862:4;26859:1;26852:15;26886:4;26883:1;26876:15;26903:180;26951:77;26948:1;26941:88;27048:4;27045:1;27038:15;27072:4;27069:1;27062:15;27089:180;27137:77;27134:1;27127:88;27234:4;27231:1;27224:15;27258:4;27255:1;27248:15;27275:180;27323:77;27320:1;27313:88;27420:4;27417:1;27410:15;27444:4;27441:1;27434:15;27461:180;27509:77;27506:1;27499:88;27606:4;27603:1;27596:15;27630:4;27627:1;27620:15;27647:117;27756:1;27753;27746:12;27770:117;27879:1;27876;27869:12;27893:117;28002:1;27999;27992:12;28016:117;28125:1;28122;28115:12;28139:102;28180:6;28231:2;28227:7;28222:2;28215:5;28211:14;28207:28;28197:38;;28139:102;;;:::o;28247:181::-;28387:33;28383:1;28375:6;28371:14;28364:57;28247:181;:::o;28434:225::-;28574:34;28570:1;28562:6;28558:14;28551:58;28643:8;28638:2;28630:6;28626:15;28619:33;28434:225;:::o;28665:170::-;28805:22;28801:1;28793:6;28789:14;28782:46;28665:170;:::o;28841:182::-;28981:34;28977:1;28969:6;28965:14;28958:58;28841:182;:::o;29029:173::-;29169:25;29165:1;29157:6;29153:14;29146:49;29029:173;:::o;29208:234::-;29348:34;29344:1;29336:6;29332:14;29325:58;29417:17;29412:2;29404:6;29400:15;29393:42;29208:234;:::o;29448:114::-;;:::o;29568:170::-;29708:22;29704:1;29696:6;29692:14;29685:46;29568:170;:::o;29744:169::-;29884:21;29880:1;29872:6;29868:14;29861:45;29744:169;:::o;29919:122::-;29992:24;30010:5;29992:24;:::i;:::-;29985:5;29982:35;29972:63;;30031:1;30028;30021:12;29972:63;29919:122;:::o;30047:116::-;30117:21;30132:5;30117:21;:::i;:::-;30110:5;30107:32;30097:60;;30153:1;30150;30143:12;30097:60;30047:116;:::o;30169:120::-;30241:23;30258:5;30241:23;:::i;:::-;30234:5;30231:34;30221:62;;30279:1;30276;30269:12;30221:62;30169:120;:::o;30295:122::-;30368:24;30386:5;30368:24;:::i;:::-;30361:5;30358:35;30348:63;;30407:1;30404;30397:12;30348:63;30295:122;:::o
Swarm Source
ipfs://6a520fb11e22a6c1d33aec2c53c4e63e0d198ee986fd33b47ca2568322996164
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.