ERC-721
Overview
Max Total Supply
4 MMW
Holders
2
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
MasterchefMasatoshiOne
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-02 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // 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: Templates/includes/IReverseRegistrar.sol pragma solidity >=0.8.4; interface IReverseRegistrar { function setDefaultResolver(address resolver) external; function claim(address owner) external returns (bytes32); function claimForAddr( address addr, address owner, address resolver ) external returns (bytes32); function claimWithResolver(address owner, address resolver) external returns (bytes32); function setName(string memory name) external returns (bytes32); function setNameForAddr( address addr, address owner, address resolver, string memory name ) external returns (bytes32); function node(address addr) external pure returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // 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: Templates/includes/ERC721.sol // Creator: Chiru Labs pragma solidity ^0.8.10; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Base URI string private _baseURI; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_ ) { require(maxBatchSize_ > 0, "b"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "g"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "b"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("u"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "0"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), "0"); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "t"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("o"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "z"); 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() public view virtual returns (string memory) { return _baseURI; } /** * @dev Internal function to set the base URI for all token IDs. It is * automatically added as a prefix to the value returned in {tokenURI}, * or to the token ID if {tokenURI} is empty. */ function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "o"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "a" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "a"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "a"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "z" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "0"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "a"); require(quantity <= maxBatchSize, "m"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "z" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, "a"); require(prevOwnership.addr == from, "o"); require(to != address(0), "0"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership(prevOwnership.addr, prevOwnership.startTimestamp); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "q"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > currentIndex - 1) { endIndex = currentIndex - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "n"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership(ownership.addr, ownership.startTimestamp); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("z"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: Templates/Auction.sol pragma solidity ^0.8.10; contract MasterchefMasatoshiOne is ERC721, Ownable { address public immutable ENSReverseRegistrar = 0x084b1c3C81545d370f3634392De611CaaBFf8148; address payable public immutable bromakasea = payable(0x4e0f28E1aFDE90FE612A3885436C3432D37043D7); uint256 public immutable rakePercentage = 1; uint256 public minBidIncrementPercentage = 1; uint256 public startingBid = 0; uint256 public currentAuctionID = 0; bool public biddingActive = false; string public currentTokenURI; address payable public highestBidAddress; // first uint256 represents the current auction ID mapping(uint256 => mapping(address => uint256)) public bidPerAddress; mapping(uint256 => string) tokenURIs; constructor( string memory _name, string memory _symbol ) ERC721(_name, _symbol, 1) {} function tokenURI(uint256 tokenID) public view override returns (string memory) { require(_exists(tokenID), "z"); return tokenURIs[tokenID]; } function addReverseENSRecord(string memory name) external onlyOwner{ IReverseRegistrar(ENSReverseRegistrar).setName(name); } function execMint(uint amount, address recipient) public onlyOwner { _safeMint(recipient, amount); } function setMinBidIncrementPercentage(uint256 percentage) public onlyOwner { minBidIncrementPercentage = percentage; } function openBidding(uint256 _startingBid, string calldata _tokenURI) public onlyOwner { require(!biddingActive, "Bidding is already active!"); biddingActive = true; // input starting bid in ETH startingBid = _startingBid * 10 ** 18; currentTokenURI = _tokenURI; } function acceptBid() public onlyOwner { require(biddingActive, "Bidding is inactive!"); uint256 winningBid = bidPerAddress[currentAuctionID][highestBidAddress]; bidPerAddress[currentAuctionID][highestBidAddress] = 0; payable(owner()).transfer(winningBid); _safeMint(highestBidAddress, 1); tokenURIs[totalSupply() - 1] = currentTokenURI; biddingActive = false; highestBidAddress = payable(address(0)); currentAuctionID += 1; } function withdrawBid(uint256 auctionID) external { require(msg.sender != highestBidAddress, "Cannot withdraw bid as highest bidder!"); uint256 bidAmount = bidPerAddress[auctionID][msg.sender]; bidPerAddress[auctionID][msg.sender] = 0; uint thisBalance = address(this).balance; // safe transfer mechanism, if there is some rounding error and there isn't enought ETH on "paper" to cover a withdraw if (bidAmount >= thisBalance) { payable(msg.sender).transfer(thisBalance); } else { payable(msg.sender).transfer(bidAmount); } } receive() external payable { require(biddingActive, "Bidding is inactive!"); if (msg.sender == owner()) { acceptBid(); return; } uint256 rake = msg.value * rakePercentage / 100; uint256 currentBidAfterRake = msg.value - rake; uint256 existingBid = bidPerAddress[currentAuctionID][msg.sender]; uint256 totalBid = existingBid + currentBidAfterRake; uint256 highestBid = bidPerAddress[currentAuctionID][highestBidAddress]; require(totalBid > startingBid, "Total bid must exceed starting bid"); require(totalBid >= highestBid + highestBid * minBidIncrementPercentage / 100, "Total bid must exceed or equal highest bid + min bid increment!"); // adds to existing bid bidPerAddress[currentAuctionID][msg.sender] = existingBid + currentBidAfterRake; bromakasea.transfer(rake); highestBidAddress = payable(msg.sender); } // emergency use only function withdraw() external onlyOwner() { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } } // The High Table
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ENSReverseRegistrar","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"addReverseENSRecord","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"bidPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"biddingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bromakasea","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentAuctionID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"execMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highestBidAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBidIncrementPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startingBid","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"openBidding","outputs":[],"stateMutability":"nonpayable","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":"rakePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setMinBidIncrementPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingBid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"withdrawBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
61010060405260008055600060085573084b1c3c81545d370f3634392de611caabff814873ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff16815250734e0f28e1afde90fe612a3885436c3432d37043d773ffffffffffffffffffffffffffffffffffffffff1660c09073ffffffffffffffffffffffffffffffffffffffff16815250600160e0908152506001600a556000600b556000600c556000600d60006101000a81548160ff021916908315150217905550348015620000db57600080fd5b50604051620051243803806200512483398181016040528101906200010191906200040d565b81816001600081116200014b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014290620004f3565b60405180910390fd5b82600190816200015c919062000760565b5081600290816200016e919062000760565b5080608081815250505050506200019a6200018e620001a260201b60201c565b620001aa60201b60201c565b505062000847565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002d9826200028e565b810181811067ffffffffffffffff82111715620002fb57620002fa6200029f565b5b80604052505050565b60006200031062000270565b90506200031e8282620002ce565b919050565b600067ffffffffffffffff8211156200034157620003406200029f565b5b6200034c826200028e565b9050602081019050919050565b60005b83811015620003795780820151818401526020810190506200035c565b8381111562000389576000848401525b50505050565b6000620003a6620003a08462000323565b62000304565b905082815260208101848484011115620003c557620003c462000289565b5b620003d284828562000359565b509392505050565b600082601f830112620003f257620003f162000284565b5b8151620004048482602086016200038f565b91505092915050565b600080604083850312156200042757620004266200027a565b5b600083015167ffffffffffffffff8111156200044857620004476200027f565b5b6200045685828601620003da565b925050602083015167ffffffffffffffff8111156200047a57620004796200027f565b5b6200048885828601620003da565b9150509250929050565b600082825260208201905092915050565b7f6200000000000000000000000000000000000000000000000000000000000000600082015250565b6000620004db60018362000492565b9150620004e882620004a3565b602082019050919050565b600060208201905081810360008301526200050e81620004cc565b9050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200056857607f821691505b6020821081036200057e576200057d62000520565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005a9565b620005f48683620005a9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006416200063b62000635846200060c565b62000616565b6200060c565b9050919050565b6000819050919050565b6200065d8362000620565b620006756200066c8262000648565b848454620005b6565b825550505050565b600090565b6200068c6200067d565b6200069981848462000652565b505050565b5b81811015620006c157620006b560008262000682565b6001810190506200069f565b5050565b601f8211156200071057620006da8162000584565b620006e58462000599565b81016020851015620006f5578190505b6200070d620007048562000599565b8301826200069e565b50505b505050565b600082821c905092915050565b6000620007356000198460080262000715565b1980831691505092915050565b600062000750838362000722565b9150826002028217905092915050565b6200076b8262000515565b67ffffffffffffffff8111156200078757620007866200029f565b5b6200079382546200054f565b620007a0828285620006c5565b600060209050601f831160018114620007d85760008415620007c3578287015190505b620007cf858262000742565b8655506200083f565b601f198416620007e88662000584565b60005b828110156200081257848901518255600182019150602085019450602081019050620007eb565b868310156200083257848901516200082e601f89168262000722565b8355505b6001600288020188555050505b505050505050565b60805160a05160c05160e051614880620008a4600039600081816102ca015261197a0152600081816104ff015261179a015260008181611c3e0152611e7f01526000818161280c015281816128350152612cc801526148806000f3fe6080604052600436106102295760003560e01c806370a0823111610123578063b296024d116100ab578063d7224ba01161006f578063d7224ba014610b93578063dfb5259c14610bbe578063e52a787414610be7578063e985e9c514610bfe578063f2fde38b14610c3b576105ad565b8063b296024d14610aae578063b56906b114610ad9578063b88d4fde14610b02578063b9fdd56914610b2b578063c87b56dd14610b56576105ad565b80638e9673a5116100f25780638e9673a5146109db57806395d89b4114610a06578063a22cb46514610a31578063a79b817314610a5a578063ac48830b14610a85576105ad565b806370a0823114610931578063715018a61461096e578063896f398a146109855780638da5cb5b146109b0576105ad565b80632fe383f0116101b157806355a3ae861161017557806355a3ae861461084a57806362966678146108755780636352211e146108a05780636c0360eb146108dd5780636c80388614610908576105ad565b80632fe383f0146107655780633ccfd60b146107a257806342842e0e146107b95780634f6ccce7146107e2578063521b20ec1461081f576105ad565b80630eaaf4c8116101f85780630eaaf4c81461068057806317d946f2146106a957806318160ddd146106d457806323b872dd146106ff5780632f745c5914610728576105ad565b806301ffc9a7146105b257806306fdde03146105ef578063081812fc1461061a578063095ea7b314610657576105ad565b366105ad57600d60009054906101000a900460ff1661027d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610274906131ac565b60405180910390fd5b610285610c64565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036102c4576102bf610c8e565b6105ab565b600060647f0000000000000000000000000000000000000000000000000000000000000000346102f49190613205565b6102fe919061328e565b90506000813461030e91906132bf565b9050600060106000600c54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000828261037591906132f3565b9050600060106000600c5481526020019081526020016000206000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b548211610434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042b906133bb565b60405180910390fd5b6064600a54826104449190613205565b61044e919061328e565b8161045991906132f3565b82101561049b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104929061344d565b60405180910390fd5b83836104a791906132f3565b60106000600c54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015610563573d6000803e3d6000fd5b5033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505b005b600080fd5b3480156105be57600080fd5b506105d960048036038101906105d491906134d9565b610f02565b6040516105e69190613521565b60405180910390f35b3480156105fb57600080fd5b5061060461104c565b60405161061191906135c4565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190613612565b6110de565b60405161064e9190613680565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906136c7565b611163565b005b34801561068c57600080fd5b506106a760048036038101906106a29190613612565b61127b565b005b3480156106b557600080fd5b506106be61145b565b6040516106cb9190613521565b60405180910390f35b3480156106e057600080fd5b506106e961146e565b6040516106f69190613716565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613731565b611477565b005b34801561073457600080fd5b5061074f600480360381019061074a91906136c7565b611487565b60405161075c9190613716565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613784565b611683565b6040516107999190613716565b60405180910390f35b3480156107ae57600080fd5b506107b76116a8565b005b3480156107c557600080fd5b506107e060048036038101906107db9190613731565b6116ff565b005b3480156107ee57600080fd5b5061080960048036038101906108049190613612565b61171f565b6040516108169190613716565b60405180910390f35b34801561082b57600080fd5b50610834611772565b60405161084191906137e5565b60405180910390f35b34801561085657600080fd5b5061085f611798565b60405161086c91906137e5565b60405180910390f35b34801561088157600080fd5b5061088a6117bc565b6040516108979190613716565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190613612565b6117c2565b6040516108d49190613680565b60405180910390f35b3480156108e957600080fd5b506108f26117d8565b6040516108ff91906135c4565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a9190613612565b61186a565b005b34801561093d57600080fd5b5061095860048036038101906109539190613800565b61187c565b6040516109659190613716565b60405180910390f35b34801561097a57600080fd5b50610983611964565b005b34801561099157600080fd5b5061099a611978565b6040516109a79190613716565b60405180910390f35b3480156109bc57600080fd5b506109c5610c64565b6040516109d29190613680565b60405180910390f35b3480156109e757600080fd5b506109f061199c565b6040516109fd91906135c4565b60405180910390f35b348015610a1257600080fd5b50610a1b611a2a565b604051610a2891906135c4565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a539190613859565b611abc565b005b348015610a6657600080fd5b50610a6f611c3c565b604051610a7c9190613680565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa79190613784565b611c60565b005b348015610aba57600080fd5b50610ac3611c76565b604051610ad09190613716565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb91906138fe565b611c7c565b005b348015610b0e57600080fd5b50610b296004803603810190610b249190613a8e565b611d20565b005b348015610b3757600080fd5b50610b40611d7c565b604051610b4d9190613716565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613612565b611d82565b604051610b8a91906135c4565b60405180910390f35b348015610b9f57600080fd5b50610ba8611e6f565b604051610bb59190613716565b60405180910390f35b348015610bca57600080fd5b50610be56004803603810190610be09190613bb2565b611e75565b005b348015610bf357600080fd5b50610bfc610c8e565b005b348015610c0a57600080fd5b50610c256004803603810190610c209190613bfb565b611f1d565b604051610c329190613521565b60405180910390f35b348015610c4757600080fd5b50610c626004803603810190610c5d9190613800565b611fb1565b005b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c96612034565b600d60009054906101000a900460ff16610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc906131ac565b60405180910390fd5b600060106000600c5481526020019081526020016000206000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060106000600c5481526020019081526020016000206000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610de0610c64565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e25573d6000803e3d6000fd5b50610e53600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016120b2565b600e601160006001610e6361146e565b610e6d91906132bf565b81526020019081526020016000209081610e879190613e72565b506000600d60006101000a81548160ff0219169083151502179055506000600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000828254610ef891906132f3565b9250508190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fcd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061103557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110455750611044826120d0565b5b9050919050565b60606001805461105b90613c6a565b80601f016020809104026020016040519081016040528092919081815260200182805461108790613c6a565b80156110d45780601f106110a9576101008083540402835291602001916110d4565b820191906000526020600020905b8154815290600101906020018083116110b757829003601f168201915b5050505050905090565b60006110e98261213a565b611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f90613fa6565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061116e826117c2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590614012565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111fd612147565b73ffffffffffffffffffffffffffffffffffffffff16148061122c575061122b81611226612147565b611f1d565b5b61126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290613fa6565b60405180910390fd5b61127683838361214f565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361130b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611302906140a4565b60405180910390fd5b60006010600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006010600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600047905080821061140e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611408573d6000803e3d6000fd5b50611456565b3373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611454573d6000803e3d6000fd5b505b505050565b600d60009054906101000a900460ff1681565b60008054905090565b611482838383612201565b505050565b60006114928361187c565b82106114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90614110565b60405180910390fd5b60006114dd61146e565b905060008060005b83811015611641576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146115d757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361162d5786840361161e57819550505050505061167d565b838061162990614130565b9450505b50808061163990614130565b9150506114e5565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611674906141c4565b60405180910390fd5b92915050565b6010602052816000526040600020602052806000526040600020600091509150505481565b6116b0612034565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116fb573d6000803e3d6000fd5b5050565b61171a83838360405180602001604052806000815250611d20565b505050565b600061172961146e565b821061176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176190614230565b60405180910390fd5b819050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b60006117cd826127b8565b600001519050919050565b6060600380546117e790613c6a565b80601f016020809104026020016040519081016040528092919081815260200182805461181390613c6a565b80156118605780601f1061183557610100808354040283529160200191611860565b820191906000526020600020905b81548152906001019060200180831161184357829003601f168201915b5050505050905090565b611872612034565b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e39061429c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61196c612034565b61197660006129bb565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e80546119a990613c6a565b80601f01602080910402602001604051908101604052809291908181526020018280546119d590613c6a565b8015611a225780601f106119f757610100808354040283529160200191611a22565b820191906000526020600020905b815481529060010190602001808311611a0557829003601f168201915b505050505081565b606060028054611a3990613c6a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6590613c6a565b8015611ab25780601f10611a8757610100808354040283529160200191611ab2565b820191906000526020600020905b815481529060010190602001808311611a9557829003601f168201915b5050505050905090565b611ac4612147565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2890613fa6565b60405180910390fd5b8060076000611b3e612147565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611beb612147565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c309190613521565b60405180910390a35050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611c68612034565b611c7281836120b2565b5050565b600a5481565b611c84612034565b600d60009054906101000a900460ff1615611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90614308565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550670de0b6b3a764000083611d039190613205565b600b819055508181600e9182611d1a929190614333565b50505050565b611d2b848484612201565b611d3784848484612a81565b611d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6d9061444f565b60405180910390fd5b50505050565b600b5481565b6060611d8d8261213a565b611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc39061444f565b60405180910390fd5b601160008381526020019081526020016000208054611dea90613c6a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1690613c6a565b8015611e635780601f10611e3857610100808354040283529160200191611e63565b820191906000526020600020905b815481529060010190602001808311611e4657829003601f168201915b50505050509050919050565b60085481565b611e7d612034565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c47f0027826040518263ffffffff1660e01b8152600401611ed691906135c4565b6020604051808303816000875af1158015611ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1991906144a5565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fb9612034565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90614544565b60405180910390fd5b612031816129bb565b50565b61203c612147565b73ffffffffffffffffffffffffffffffffffffffff1661205a610c64565b73ffffffffffffffffffffffffffffffffffffffff16146120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906145b0565b60405180910390fd5b565b6120cc828260405180602001604052806000815250612c08565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061220c826127b8565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612233612147565b73ffffffffffffffffffffffffffffffffffffffff16148061228f5750612258612147565b73ffffffffffffffffffffffffffffffffffffffff16612277846110de565b73ffffffffffffffffffffffffffffffffffffffff16145b806122ab57506122aa82600001516122a5612147565b611f1d565b5b9050806122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e490613fa6565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461235f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235690614012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c59061429c565b60405180910390fd5b6123db85858560016130e6565b6123eb600084846000015161214f565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661245991906145ec565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124fd9190614620565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461260391906132f3565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612748576126788161213a565b15612747576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127b086868660016130ec565b505050505050565b6127c0613115565b6127c98261213a565b612808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ff906146b2565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000831061286c5760017f00000000000000000000000000000000000000000000000000000000000000008461285f91906132bf565b61286991906132f3565b90505b60008390505b81811061297a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612966578093505050506129b6565b508080612972906146d2565b915050612872565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad90614012565b60405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612aa28473ffffffffffffffffffffffffffffffffffffffff166130f2565b15612bfb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612acb612147565b8786866040518563ffffffff1660e01b8152600401612aed9493929190614750565b6020604051808303816000875af1925050508015612b2957506040513d601f19601f82011682018060405250810190612b2691906147b1565b60015b612bab573d8060008114612b59576040519150601f19603f3d011682016040523d82523d6000602084013e612b5e565b606091505b506000815103612ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9a9061444f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c00565b600190505b949350505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c749061429c565b60405180910390fd5b612c868161213a565b15612cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbd90613fa6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061482a565b60405180910390fd5b612d3660008583866130e6565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e339190614620565b6fffffffffffffffffffffffffffffffff168152602001858360200151612e5a9190614620565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156130c957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130696000888488612a81565b6130a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309f9061444f565b60405180910390fd5b81806130b390614130565b92505080806130c190614130565b915050612ff8565b50806000819055506130de60008785886130ec565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600082825260208201905092915050565b7f42696464696e6720697320696e61637469766521000000000000000000000000600082015250565b600061319660148361314f565b91506131a182613160565b602082019050919050565b600060208201905081810360008301526131c581613189565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613210826131cc565b915061321b836131cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613254576132536131d6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613299826131cc565b91506132a4836131cc565b9250826132b4576132b361325f565b5b828204905092915050565b60006132ca826131cc565b91506132d5836131cc565b9250828210156132e8576132e76131d6565b5b828203905092915050565b60006132fe826131cc565b9150613309836131cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561333e5761333d6131d6565b5b828201905092915050565b7f546f74616c20626964206d75737420657863656564207374617274696e67206260008201527f6964000000000000000000000000000000000000000000000000000000000000602082015250565b60006133a560228361314f565b91506133b082613349565b604082019050919050565b600060208201905081810360008301526133d481613398565b9050919050565b7f546f74616c20626964206d75737420657863656564206f7220657175616c206860008201527f69676865737420626964202b206d696e2062696420696e6372656d656e742100602082015250565b6000613437603f8361314f565b9150613442826133db565b604082019050919050565b600060208201905081810360008301526134668161342a565b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134b681613481565b81146134c157600080fd5b50565b6000813590506134d3816134ad565b92915050565b6000602082840312156134ef576134ee613477565b5b60006134fd848285016134c4565b91505092915050565b60008115159050919050565b61351b81613506565b82525050565b60006020820190506135366000830184613512565b92915050565b600081519050919050565b60005b8381101561356557808201518184015260208101905061354a565b83811115613574576000848401525b50505050565b6000601f19601f8301169050919050565b60006135968261353c565b6135a0818561314f565b93506135b0818560208601613547565b6135b98161357a565b840191505092915050565b600060208201905081810360008301526135de818461358b565b905092915050565b6135ef816131cc565b81146135fa57600080fd5b50565b60008135905061360c816135e6565b92915050565b60006020828403121561362857613627613477565b5b6000613636848285016135fd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061366a8261363f565b9050919050565b61367a8161365f565b82525050565b60006020820190506136956000830184613671565b92915050565b6136a48161365f565b81146136af57600080fd5b50565b6000813590506136c18161369b565b92915050565b600080604083850312156136de576136dd613477565b5b60006136ec858286016136b2565b92505060206136fd858286016135fd565b9150509250929050565b613710816131cc565b82525050565b600060208201905061372b6000830184613707565b92915050565b60008060006060848603121561374a57613749613477565b5b6000613758868287016136b2565b9350506020613769868287016136b2565b925050604061377a868287016135fd565b9150509250925092565b6000806040838503121561379b5761379a613477565b5b60006137a9858286016135fd565b92505060206137ba858286016136b2565b9150509250929050565b60006137cf8261363f565b9050919050565b6137df816137c4565b82525050565b60006020820190506137fa60008301846137d6565b92915050565b60006020828403121561381657613815613477565b5b6000613824848285016136b2565b91505092915050565b61383681613506565b811461384157600080fd5b50565b6000813590506138538161382d565b92915050565b600080604083850312156138705761386f613477565b5b600061387e858286016136b2565b925050602061388f85828601613844565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126138be576138bd613899565b5b8235905067ffffffffffffffff8111156138db576138da61389e565b5b6020830191508360018202830111156138f7576138f66138a3565b5b9250929050565b60008060006040848603121561391757613916613477565b5b6000613925868287016135fd565b935050602084013567ffffffffffffffff8111156139465761394561347c565b5b613952868287016138a8565b92509250509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61399b8261357a565b810181811067ffffffffffffffff821117156139ba576139b9613963565b5b80604052505050565b60006139cd61346d565b90506139d98282613992565b919050565b600067ffffffffffffffff8211156139f9576139f8613963565b5b613a028261357a565b9050602081019050919050565b82818337600083830152505050565b6000613a31613a2c846139de565b6139c3565b905082815260208101848484011115613a4d57613a4c61395e565b5b613a58848285613a0f565b509392505050565b600082601f830112613a7557613a74613899565b5b8135613a85848260208601613a1e565b91505092915050565b60008060008060808587031215613aa857613aa7613477565b5b6000613ab6878288016136b2565b9450506020613ac7878288016136b2565b9350506040613ad8878288016135fd565b925050606085013567ffffffffffffffff811115613af957613af861347c565b5b613b0587828801613a60565b91505092959194509250565b600067ffffffffffffffff821115613b2c57613b2b613963565b5b613b358261357a565b9050602081019050919050565b6000613b55613b5084613b11565b6139c3565b905082815260208101848484011115613b7157613b7061395e565b5b613b7c848285613a0f565b509392505050565b600082601f830112613b9957613b98613899565b5b8135613ba9848260208601613b42565b91505092915050565b600060208284031215613bc857613bc7613477565b5b600082013567ffffffffffffffff811115613be657613be561347c565b5b613bf284828501613b84565b91505092915050565b60008060408385031215613c1257613c11613477565b5b6000613c20858286016136b2565b9250506020613c31858286016136b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c8257607f821691505b602082108103613c9557613c94613c3b565b5b50919050565b600081549050613caa81613c6a565b9050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ceb565b613d328683613ceb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613d6f613d6a613d65846131cc565b613d4a565b6131cc565b9050919050565b6000819050919050565b613d8983613d54565b613d9d613d9582613d76565b848454613cf8565b825550505050565b600090565b613db2613da5565b613dbd818484613d80565b505050565b5b81811015613de157613dd6600082613daa565b600181019050613dc3565b5050565b601f821115613e2657613df781613cb1565b613e0084613cdb565b81016020851015613e0f578190505b613e23613e1b85613cdb565b830182613dc2565b50505b505050565b600082821c905092915050565b6000613e4960001984600802613e2b565b1980831691505092915050565b6000613e628383613e38565b9150826002028217905092915050565b818103613e80575050613f58565b613e8982613c9b565b67ffffffffffffffff811115613ea257613ea1613963565b5b613eac8254613c6a565b613eb7828285613de5565b6000601f831160018114613ee65760008415613ed4578287015490505b613ede8582613e56565b865550613f51565b601f198416613ef487613cc6565b9650613eff86613cb1565b60005b82811015613f2757848901548255600182019150600185019450602081019050613f02565b86831015613f445784890154613f40601f891682613e38565b8355505b6001600288020188555050505b5050505050505b565b7f6100000000000000000000000000000000000000000000000000000000000000600082015250565b6000613f9060018361314f565b9150613f9b82613f5a565b602082019050919050565b60006020820190508181036000830152613fbf81613f83565b9050919050565b7f6f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613ffc60018361314f565b915061400782613fc6565b602082019050919050565b6000602082019050818103600083015261402b81613fef565b9050919050565b7f43616e6e6f74207769746864726177206269642061732068696768657374206260008201527f6964646572210000000000000000000000000000000000000000000000000000602082015250565b600061408e60268361314f565b915061409982614032565b604082019050919050565b600060208201905081810360008301526140bd81614081565b9050919050565b7f6200000000000000000000000000000000000000000000000000000000000000600082015250565b60006140fa60018361314f565b9150614105826140c4565b602082019050919050565b60006020820190508181036000830152614129816140ed565b9050919050565b600061413b826131cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361416d5761416c6131d6565b5b600182019050919050565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b60006141ae60018361314f565b91506141b982614178565b602082019050919050565b600060208201905081810360008301526141dd816141a1565b9050919050565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b600061421a60018361314f565b9150614225826141e4565b602082019050919050565b600060208201905081810360008301526142498161420d565b9050919050565b7f3000000000000000000000000000000000000000000000000000000000000000600082015250565b600061428660018361314f565b915061429182614250565b602082019050919050565b600060208201905081810360008301526142b581614279565b9050919050565b7f42696464696e6720697320616c72656164792061637469766521000000000000600082015250565b60006142f2601a8361314f565b91506142fd826142bc565b602082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b600082905092915050565b61433d8383614328565b67ffffffffffffffff81111561435657614355613963565b5b6143608254613c6a565b61436b828285613de5565b6000601f83116001811461439a5760008415614388578287013590505b6143928582613e56565b8655506143fa565b601f1984166143a886613cb1565b60005b828110156143d0578489013582556001820191506020850194506020810190506143ab565b868310156143ed57848901356143e9601f891682613e38565b8355505b6001600288020188555050505b50505050505050565b7f7a00000000000000000000000000000000000000000000000000000000000000600082015250565b600061443960018361314f565b915061444482614403565b602082019050919050565b600060208201905081810360008301526144688161442c565b9050919050565b6000819050919050565b6144828161446f565b811461448d57600080fd5b50565b60008151905061449f81614479565b92915050565b6000602082840312156144bb576144ba613477565b5b60006144c984828501614490565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061452e60268361314f565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061459a60208361314f565b91506145a582614564565b602082019050919050565b600060208201905081810360008301526145c98161458d565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006145f7826145d0565b9150614602836145d0565b925082821015614615576146146131d6565b5b828203905092915050565b600061462b826145d0565b9150614636836145d0565b9250826fffffffffffffffffffffffffffffffff0382111561465b5761465a6131d6565b5b828201905092915050565b7f7400000000000000000000000000000000000000000000000000000000000000600082015250565b600061469c60018361314f565b91506146a782614666565b602082019050919050565b600060208201905081810360008301526146cb8161468f565b9050919050565b60006146dd826131cc565b9150600082036146f0576146ef6131d6565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b6000614722826146fb565b61472c8185614706565b935061473c818560208601613547565b6147458161357a565b840191505092915050565b60006080820190506147656000830187613671565b6147726020830186613671565b61477f6040830185613707565b81810360608301526147918184614717565b905095945050505050565b6000815190506147ab816134ad565b92915050565b6000602082840312156147c7576147c6613477565b5b60006147d58482850161479c565b91505092915050565b7f6d00000000000000000000000000000000000000000000000000000000000000600082015250565b600061481460018361314f565b915061481f826147de565b602082019050919050565b6000602082019050818103600083015261484381614807565b905091905056fea2646970667358221220a6e630dbe9248ad54294bd821a686d0d2de1a429f2265575284e22b6ede2626f64736f6c634300080f00330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000144d616c6962752773204d6f73742057616e74656400000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d4d570000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102295760003560e01c806370a0823111610123578063b296024d116100ab578063d7224ba01161006f578063d7224ba014610b93578063dfb5259c14610bbe578063e52a787414610be7578063e985e9c514610bfe578063f2fde38b14610c3b576105ad565b8063b296024d14610aae578063b56906b114610ad9578063b88d4fde14610b02578063b9fdd56914610b2b578063c87b56dd14610b56576105ad565b80638e9673a5116100f25780638e9673a5146109db57806395d89b4114610a06578063a22cb46514610a31578063a79b817314610a5a578063ac48830b14610a85576105ad565b806370a0823114610931578063715018a61461096e578063896f398a146109855780638da5cb5b146109b0576105ad565b80632fe383f0116101b157806355a3ae861161017557806355a3ae861461084a57806362966678146108755780636352211e146108a05780636c0360eb146108dd5780636c80388614610908576105ad565b80632fe383f0146107655780633ccfd60b146107a257806342842e0e146107b95780634f6ccce7146107e2578063521b20ec1461081f576105ad565b80630eaaf4c8116101f85780630eaaf4c81461068057806317d946f2146106a957806318160ddd146106d457806323b872dd146106ff5780632f745c5914610728576105ad565b806301ffc9a7146105b257806306fdde03146105ef578063081812fc1461061a578063095ea7b314610657576105ad565b366105ad57600d60009054906101000a900460ff1661027d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610274906131ac565b60405180910390fd5b610285610c64565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036102c4576102bf610c8e565b6105ab565b600060647f0000000000000000000000000000000000000000000000000000000000000001346102f49190613205565b6102fe919061328e565b90506000813461030e91906132bf565b9050600060106000600c54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000828261037591906132f3565b9050600060106000600c5481526020019081526020016000206000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600b548211610434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042b906133bb565b60405180910390fd5b6064600a54826104449190613205565b61044e919061328e565b8161045991906132f3565b82101561049b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104929061344d565b60405180910390fd5b83836104a791906132f3565b60106000600c54815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f0000000000000000000000004e0f28e1afde90fe612a3885436c3432d37043d773ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015610563573d6000803e3d6000fd5b5033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505b005b600080fd5b3480156105be57600080fd5b506105d960048036038101906105d491906134d9565b610f02565b6040516105e69190613521565b60405180910390f35b3480156105fb57600080fd5b5061060461104c565b60405161061191906135c4565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190613612565b6110de565b60405161064e9190613680565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906136c7565b611163565b005b34801561068c57600080fd5b506106a760048036038101906106a29190613612565b61127b565b005b3480156106b557600080fd5b506106be61145b565b6040516106cb9190613521565b60405180910390f35b3480156106e057600080fd5b506106e961146e565b6040516106f69190613716565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613731565b611477565b005b34801561073457600080fd5b5061074f600480360381019061074a91906136c7565b611487565b60405161075c9190613716565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613784565b611683565b6040516107999190613716565b60405180910390f35b3480156107ae57600080fd5b506107b76116a8565b005b3480156107c557600080fd5b506107e060048036038101906107db9190613731565b6116ff565b005b3480156107ee57600080fd5b5061080960048036038101906108049190613612565b61171f565b6040516108169190613716565b60405180910390f35b34801561082b57600080fd5b50610834611772565b60405161084191906137e5565b60405180910390f35b34801561085657600080fd5b5061085f611798565b60405161086c91906137e5565b60405180910390f35b34801561088157600080fd5b5061088a6117bc565b6040516108979190613716565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190613612565b6117c2565b6040516108d49190613680565b60405180910390f35b3480156108e957600080fd5b506108f26117d8565b6040516108ff91906135c4565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a9190613612565b61186a565b005b34801561093d57600080fd5b5061095860048036038101906109539190613800565b61187c565b6040516109659190613716565b60405180910390f35b34801561097a57600080fd5b50610983611964565b005b34801561099157600080fd5b5061099a611978565b6040516109a79190613716565b60405180910390f35b3480156109bc57600080fd5b506109c5610c64565b6040516109d29190613680565b60405180910390f35b3480156109e757600080fd5b506109f061199c565b6040516109fd91906135c4565b60405180910390f35b348015610a1257600080fd5b50610a1b611a2a565b604051610a2891906135c4565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a539190613859565b611abc565b005b348015610a6657600080fd5b50610a6f611c3c565b604051610a7c9190613680565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa79190613784565b611c60565b005b348015610aba57600080fd5b50610ac3611c76565b604051610ad09190613716565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb91906138fe565b611c7c565b005b348015610b0e57600080fd5b50610b296004803603810190610b249190613a8e565b611d20565b005b348015610b3757600080fd5b50610b40611d7c565b604051610b4d9190613716565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613612565b611d82565b604051610b8a91906135c4565b60405180910390f35b348015610b9f57600080fd5b50610ba8611e6f565b604051610bb59190613716565b60405180910390f35b348015610bca57600080fd5b50610be56004803603810190610be09190613bb2565b611e75565b005b348015610bf357600080fd5b50610bfc610c8e565b005b348015610c0a57600080fd5b50610c256004803603810190610c209190613bfb565b611f1d565b604051610c329190613521565b60405180910390f35b348015610c4757600080fd5b50610c626004803603810190610c5d9190613800565b611fb1565b005b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610c96612034565b600d60009054906101000a900460ff16610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc906131ac565b60405180910390fd5b600060106000600c5481526020019081526020016000206000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060106000600c5481526020019081526020016000206000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610de0610c64565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e25573d6000803e3d6000fd5b50610e53600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016120b2565b600e601160006001610e6361146e565b610e6d91906132bf565b81526020019081526020016000209081610e879190613e72565b506000600d60006101000a81548160ff0219169083151502179055506000600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c6000828254610ef891906132f3565b9250508190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fcd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061103557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110455750611044826120d0565b5b9050919050565b60606001805461105b90613c6a565b80601f016020809104026020016040519081016040528092919081815260200182805461108790613c6a565b80156110d45780601f106110a9576101008083540402835291602001916110d4565b820191906000526020600020905b8154815290600101906020018083116110b757829003601f168201915b5050505050905090565b60006110e98261213a565b611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f90613fa6565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061116e826117c2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590614012565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111fd612147565b73ffffffffffffffffffffffffffffffffffffffff16148061122c575061122b81611226612147565b611f1d565b5b61126b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126290613fa6565b60405180910390fd5b61127683838361214f565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361130b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611302906140a4565b60405180910390fd5b60006010600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006010600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600047905080821061140e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611408573d6000803e3d6000fd5b50611456565b3373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611454573d6000803e3d6000fd5b505b505050565b600d60009054906101000a900460ff1681565b60008054905090565b611482838383612201565b505050565b60006114928361187c565b82106114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90614110565b60405180910390fd5b60006114dd61146e565b905060008060005b83811015611641576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146115d757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361162d5786840361161e57819550505050505061167d565b838061162990614130565b9450505b50808061163990614130565b9150506114e5565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611674906141c4565b60405180910390fd5b92915050565b6010602052816000526040600020602052806000526040600020600091509150505481565b6116b0612034565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156116fb573d6000803e3d6000fd5b5050565b61171a83838360405180602001604052806000815250611d20565b505050565b600061172961146e565b821061176a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176190614230565b60405180910390fd5b819050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000004e0f28e1afde90fe612a3885436c3432d37043d781565b600c5481565b60006117cd826127b8565b600001519050919050565b6060600380546117e790613c6a565b80601f016020809104026020016040519081016040528092919081815260200182805461181390613c6a565b80156118605780601f1061183557610100808354040283529160200191611860565b820191906000526020600020905b81548152906001019060200180831161184357829003601f168201915b5050505050905090565b611872612034565b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e39061429c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61196c612034565b61197660006129bb565b565b7f000000000000000000000000000000000000000000000000000000000000000181565b600e80546119a990613c6a565b80601f01602080910402602001604051908101604052809291908181526020018280546119d590613c6a565b8015611a225780601f106119f757610100808354040283529160200191611a22565b820191906000526020600020905b815481529060010190602001808311611a0557829003601f168201915b505050505081565b606060028054611a3990613c6a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6590613c6a565b8015611ab25780601f10611a8757610100808354040283529160200191611ab2565b820191906000526020600020905b815481529060010190602001808311611a9557829003601f168201915b5050505050905090565b611ac4612147565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2890613fa6565b60405180910390fd5b8060076000611b3e612147565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611beb612147565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c309190613521565b60405180910390a35050565b7f000000000000000000000000084b1c3c81545d370f3634392de611caabff814881565b611c68612034565b611c7281836120b2565b5050565b600a5481565b611c84612034565b600d60009054906101000a900460ff1615611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90614308565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550670de0b6b3a764000083611d039190613205565b600b819055508181600e9182611d1a929190614333565b50505050565b611d2b848484612201565b611d3784848484612a81565b611d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6d9061444f565b60405180910390fd5b50505050565b600b5481565b6060611d8d8261213a565b611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc39061444f565b60405180910390fd5b601160008381526020019081526020016000208054611dea90613c6a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1690613c6a565b8015611e635780601f10611e3857610100808354040283529160200191611e63565b820191906000526020600020905b815481529060010190602001808311611e4657829003601f168201915b50505050509050919050565b60085481565b611e7d612034565b7f000000000000000000000000084b1c3c81545d370f3634392de611caabff814873ffffffffffffffffffffffffffffffffffffffff1663c47f0027826040518263ffffffff1660e01b8152600401611ed691906135c4565b6020604051808303816000875af1158015611ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1991906144a5565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fb9612034565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90614544565b60405180910390fd5b612031816129bb565b50565b61203c612147565b73ffffffffffffffffffffffffffffffffffffffff1661205a610c64565b73ffffffffffffffffffffffffffffffffffffffff16146120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906145b0565b60405180910390fd5b565b6120cc828260405180602001604052806000815250612c08565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061220c826127b8565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612233612147565b73ffffffffffffffffffffffffffffffffffffffff16148061228f5750612258612147565b73ffffffffffffffffffffffffffffffffffffffff16612277846110de565b73ffffffffffffffffffffffffffffffffffffffff16145b806122ab57506122aa82600001516122a5612147565b611f1d565b5b9050806122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e490613fa6565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461235f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235690614012565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c59061429c565b60405180910390fd5b6123db85858560016130e6565b6123eb600084846000015161214f565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661245991906145ec565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166124fd9190614620565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461260391906132f3565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612748576126788161213a565b15612747576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127b086868660016130ec565b505050505050565b6127c0613115565b6127c98261213a565b612808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ff906146b2565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000001831061286c5760017f00000000000000000000000000000000000000000000000000000000000000018461285f91906132bf565b61286991906132f3565b90505b60008390505b81811061297a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612966578093505050506129b6565b508080612972906146d2565b915050612872565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad90614012565b60405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612aa28473ffffffffffffffffffffffffffffffffffffffff166130f2565b15612bfb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612acb612147565b8786866040518563ffffffff1660e01b8152600401612aed9493929190614750565b6020604051808303816000875af1925050508015612b2957506040513d601f19601f82011682018060405250810190612b2691906147b1565b60015b612bab573d8060008114612b59576040519150601f19603f3d011682016040523d82523d6000602084013e612b5e565b606091505b506000815103612ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9a9061444f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c00565b600190505b949350505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c749061429c565b60405180910390fd5b612c868161213a565b15612cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbd90613fa6565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001831115612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061482a565b60405180910390fd5b612d3660008583866130e6565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e339190614620565b6fffffffffffffffffffffffffffffffff168152602001858360200151612e5a9190614620565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156130c957818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130696000888488612a81565b6130a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309f9061444f565b60405180910390fd5b81806130b390614130565b92505080806130c190614130565b915050612ff8565b50806000819055506130de60008785886130ec565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600082825260208201905092915050565b7f42696464696e6720697320696e61637469766521000000000000000000000000600082015250565b600061319660148361314f565b91506131a182613160565b602082019050919050565b600060208201905081810360008301526131c581613189565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613210826131cc565b915061321b836131cc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613254576132536131d6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613299826131cc565b91506132a4836131cc565b9250826132b4576132b361325f565b5b828204905092915050565b60006132ca826131cc565b91506132d5836131cc565b9250828210156132e8576132e76131d6565b5b828203905092915050565b60006132fe826131cc565b9150613309836131cc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561333e5761333d6131d6565b5b828201905092915050565b7f546f74616c20626964206d75737420657863656564207374617274696e67206260008201527f6964000000000000000000000000000000000000000000000000000000000000602082015250565b60006133a560228361314f565b91506133b082613349565b604082019050919050565b600060208201905081810360008301526133d481613398565b9050919050565b7f546f74616c20626964206d75737420657863656564206f7220657175616c206860008201527f69676865737420626964202b206d696e2062696420696e6372656d656e742100602082015250565b6000613437603f8361314f565b9150613442826133db565b604082019050919050565b600060208201905081810360008301526134668161342a565b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134b681613481565b81146134c157600080fd5b50565b6000813590506134d3816134ad565b92915050565b6000602082840312156134ef576134ee613477565b5b60006134fd848285016134c4565b91505092915050565b60008115159050919050565b61351b81613506565b82525050565b60006020820190506135366000830184613512565b92915050565b600081519050919050565b60005b8381101561356557808201518184015260208101905061354a565b83811115613574576000848401525b50505050565b6000601f19601f8301169050919050565b60006135968261353c565b6135a0818561314f565b93506135b0818560208601613547565b6135b98161357a565b840191505092915050565b600060208201905081810360008301526135de818461358b565b905092915050565b6135ef816131cc565b81146135fa57600080fd5b50565b60008135905061360c816135e6565b92915050565b60006020828403121561362857613627613477565b5b6000613636848285016135fd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061366a8261363f565b9050919050565b61367a8161365f565b82525050565b60006020820190506136956000830184613671565b92915050565b6136a48161365f565b81146136af57600080fd5b50565b6000813590506136c18161369b565b92915050565b600080604083850312156136de576136dd613477565b5b60006136ec858286016136b2565b92505060206136fd858286016135fd565b9150509250929050565b613710816131cc565b82525050565b600060208201905061372b6000830184613707565b92915050565b60008060006060848603121561374a57613749613477565b5b6000613758868287016136b2565b9350506020613769868287016136b2565b925050604061377a868287016135fd565b9150509250925092565b6000806040838503121561379b5761379a613477565b5b60006137a9858286016135fd565b92505060206137ba858286016136b2565b9150509250929050565b60006137cf8261363f565b9050919050565b6137df816137c4565b82525050565b60006020820190506137fa60008301846137d6565b92915050565b60006020828403121561381657613815613477565b5b6000613824848285016136b2565b91505092915050565b61383681613506565b811461384157600080fd5b50565b6000813590506138538161382d565b92915050565b600080604083850312156138705761386f613477565b5b600061387e858286016136b2565b925050602061388f85828601613844565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126138be576138bd613899565b5b8235905067ffffffffffffffff8111156138db576138da61389e565b5b6020830191508360018202830111156138f7576138f66138a3565b5b9250929050565b60008060006040848603121561391757613916613477565b5b6000613925868287016135fd565b935050602084013567ffffffffffffffff8111156139465761394561347c565b5b613952868287016138a8565b92509250509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61399b8261357a565b810181811067ffffffffffffffff821117156139ba576139b9613963565b5b80604052505050565b60006139cd61346d565b90506139d98282613992565b919050565b600067ffffffffffffffff8211156139f9576139f8613963565b5b613a028261357a565b9050602081019050919050565b82818337600083830152505050565b6000613a31613a2c846139de565b6139c3565b905082815260208101848484011115613a4d57613a4c61395e565b5b613a58848285613a0f565b509392505050565b600082601f830112613a7557613a74613899565b5b8135613a85848260208601613a1e565b91505092915050565b60008060008060808587031215613aa857613aa7613477565b5b6000613ab6878288016136b2565b9450506020613ac7878288016136b2565b9350506040613ad8878288016135fd565b925050606085013567ffffffffffffffff811115613af957613af861347c565b5b613b0587828801613a60565b91505092959194509250565b600067ffffffffffffffff821115613b2c57613b2b613963565b5b613b358261357a565b9050602081019050919050565b6000613b55613b5084613b11565b6139c3565b905082815260208101848484011115613b7157613b7061395e565b5b613b7c848285613a0f565b509392505050565b600082601f830112613b9957613b98613899565b5b8135613ba9848260208601613b42565b91505092915050565b600060208284031215613bc857613bc7613477565b5b600082013567ffffffffffffffff811115613be657613be561347c565b5b613bf284828501613b84565b91505092915050565b60008060408385031215613c1257613c11613477565b5b6000613c20858286016136b2565b9250506020613c31858286016136b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c8257607f821691505b602082108103613c9557613c94613c3b565b5b50919050565b600081549050613caa81613c6a565b9050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ceb565b613d328683613ceb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613d6f613d6a613d65846131cc565b613d4a565b6131cc565b9050919050565b6000819050919050565b613d8983613d54565b613d9d613d9582613d76565b848454613cf8565b825550505050565b600090565b613db2613da5565b613dbd818484613d80565b505050565b5b81811015613de157613dd6600082613daa565b600181019050613dc3565b5050565b601f821115613e2657613df781613cb1565b613e0084613cdb565b81016020851015613e0f578190505b613e23613e1b85613cdb565b830182613dc2565b50505b505050565b600082821c905092915050565b6000613e4960001984600802613e2b565b1980831691505092915050565b6000613e628383613e38565b9150826002028217905092915050565b818103613e80575050613f58565b613e8982613c9b565b67ffffffffffffffff811115613ea257613ea1613963565b5b613eac8254613c6a565b613eb7828285613de5565b6000601f831160018114613ee65760008415613ed4578287015490505b613ede8582613e56565b865550613f51565b601f198416613ef487613cc6565b9650613eff86613cb1565b60005b82811015613f2757848901548255600182019150600185019450602081019050613f02565b86831015613f445784890154613f40601f891682613e38565b8355505b6001600288020188555050505b5050505050505b565b7f6100000000000000000000000000000000000000000000000000000000000000600082015250565b6000613f9060018361314f565b9150613f9b82613f5a565b602082019050919050565b60006020820190508181036000830152613fbf81613f83565b9050919050565b7f6f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613ffc60018361314f565b915061400782613fc6565b602082019050919050565b6000602082019050818103600083015261402b81613fef565b9050919050565b7f43616e6e6f74207769746864726177206269642061732068696768657374206260008201527f6964646572210000000000000000000000000000000000000000000000000000602082015250565b600061408e60268361314f565b915061409982614032565b604082019050919050565b600060208201905081810360008301526140bd81614081565b9050919050565b7f6200000000000000000000000000000000000000000000000000000000000000600082015250565b60006140fa60018361314f565b9150614105826140c4565b602082019050919050565b60006020820190508181036000830152614129816140ed565b9050919050565b600061413b826131cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361416d5761416c6131d6565b5b600182019050919050565b7f7500000000000000000000000000000000000000000000000000000000000000600082015250565b60006141ae60018361314f565b91506141b982614178565b602082019050919050565b600060208201905081810360008301526141dd816141a1565b9050919050565b7f6700000000000000000000000000000000000000000000000000000000000000600082015250565b600061421a60018361314f565b9150614225826141e4565b602082019050919050565b600060208201905081810360008301526142498161420d565b9050919050565b7f3000000000000000000000000000000000000000000000000000000000000000600082015250565b600061428660018361314f565b915061429182614250565b602082019050919050565b600060208201905081810360008301526142b581614279565b9050919050565b7f42696464696e6720697320616c72656164792061637469766521000000000000600082015250565b60006142f2601a8361314f565b91506142fd826142bc565b602082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b600082905092915050565b61433d8383614328565b67ffffffffffffffff81111561435657614355613963565b5b6143608254613c6a565b61436b828285613de5565b6000601f83116001811461439a5760008415614388578287013590505b6143928582613e56565b8655506143fa565b601f1984166143a886613cb1565b60005b828110156143d0578489013582556001820191506020850194506020810190506143ab565b868310156143ed57848901356143e9601f891682613e38565b8355505b6001600288020188555050505b50505050505050565b7f7a00000000000000000000000000000000000000000000000000000000000000600082015250565b600061443960018361314f565b915061444482614403565b602082019050919050565b600060208201905081810360008301526144688161442c565b9050919050565b6000819050919050565b6144828161446f565b811461448d57600080fd5b50565b60008151905061449f81614479565b92915050565b6000602082840312156144bb576144ba613477565b5b60006144c984828501614490565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061452e60268361314f565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061459a60208361314f565b91506145a582614564565b602082019050919050565b600060208201905081810360008301526145c98161458d565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006145f7826145d0565b9150614602836145d0565b925082821015614615576146146131d6565b5b828203905092915050565b600061462b826145d0565b9150614636836145d0565b9250826fffffffffffffffffffffffffffffffff0382111561465b5761465a6131d6565b5b828201905092915050565b7f7400000000000000000000000000000000000000000000000000000000000000600082015250565b600061469c60018361314f565b91506146a782614666565b602082019050919050565b600060208201905081810360008301526146cb8161468f565b9050919050565b60006146dd826131cc565b9150600082036146f0576146ef6131d6565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b6000614722826146fb565b61472c8185614706565b935061473c818560208601613547565b6147458161357a565b840191505092915050565b60006080820190506147656000830187613671565b6147726020830186613671565b61477f6040830185613707565b81810360608301526147918184614717565b905095945050505050565b6000815190506147ab816134ad565b92915050565b6000602082840312156147c7576147c6613477565b5b60006147d58482850161479c565b91505092915050565b7f6d00000000000000000000000000000000000000000000000000000000000000600082015250565b600061481460018361314f565b915061481f826147de565b602082019050919050565b6000602082019050818103600083015261484381614807565b905091905056fea2646970667358221220a6e630dbe9248ad54294bd821a686d0d2de1a429f2265575284e22b6ede2626f64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000144d616c6962752773204d6f73742057616e74656400000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d4d570000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Malibu's Most Wanted
Arg [1] : _symbol (string): MMW
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 4d616c6962752773204d6f73742057616e746564000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 4d4d570000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44175:3821:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46967:13;;;;;;;;;;;46959:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;47030:7;:5;:7::i;:::-;47016:21;;:10;:21;;;47012:70;;47048:11;:9;:11::i;:::-;47068:7;;47012:70;47088:12;47132:3;47115:14;47103:9;:26;;;;:::i;:::-;:32;;;;:::i;:::-;47088:47;;47142:27;47184:4;47172:9;:16;;;;:::i;:::-;47142:46;;47195:19;47217:13;:31;47231:16;;47217:31;;;;;;;;;;;:43;47249:10;47217:43;;;;;;;;;;;;;;;;47195:65;;47267:16;47300:19;47286:11;:33;;;;:::i;:::-;47267:52;;47326:18;47347:13;:31;47361:16;;47347:31;;;;;;;;;;;:50;47379:17;;;;;;;;;;;47347:50;;;;;;;;;;;;;;;;47326:71;;47425:11;;47414:8;:22;47406:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;47556:3;47528:25;;47515:10;:38;;;;:::i;:::-;:44;;;;:::i;:::-;47502:10;:57;;;;:::i;:::-;47490:8;:69;;47482:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;47725:19;47711:11;:33;;;;:::i;:::-;47665:13;:31;47679:16;;47665:31;;;;;;;;;;;:43;47697:10;47665:43;;;;;;;;;;;;;;;:79;;;;47751:10;:19;;:25;47771:4;47751:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47811:10;47783:17;;:39;;;;;;;;;;;;;;;;;;46952:876;;;;;46925:903;44175:3821;;;;;28901:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30529:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32248:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31859:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46336:583;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44603:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27454:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33055:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28084:745;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44776:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47859:134;;;;;;;;;;;;;:::i;:::-;;33288:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27631:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44677:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44325:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44561:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30338:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31366:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45418:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29337:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43286:103;;;;;;;;;;;;;:::i;:::-;;44429:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42638:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44643:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30698:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32490:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44231:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45304:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44477:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45552:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33536:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44526:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45001:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37881:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45166:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45850:480;;;;;;;;;;;;;:::i;:::-;;32824:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43544:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42638:87;42684:7;42711:6;;;;;;;;;;;42704:13;;42638:87;:::o;45850:480::-;42524:13;:11;:13::i;:::-;45903::::1;;;;;;;;;;;45895:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;45948:18;45969:13;:31;45983:16;;45969:31;;;;;;;;;;;:50;46001:17;;;;;;;;;;;45969:50;;;;;;;;;;;;;;;;45948:71;;46079:1;46026:13;:31;46040:16;;46026:31;;;;;;;;;;;:50;46058:17;;;;;;;;;;;46026:50;;;;;;;;;;;;;;;:54;;;;46097:7;:5;:7::i;:::-;46089:25;;:37;46115:10;46089:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46133:31;46143:17;;;;;;;;;;;46162:1;46133:9;:31::i;:::-;46204:15;46173:9;:28;46199:1;46183:13;:11;:13::i;:::-;:17;;;;:::i;:::-;46173:28;;;;;;;;;;;:46;;;;;;:::i;:::-;;46243:5;46227:13;;:21;;;;;;;;;;;;;;;;;;46292:1;46256:17;;:39;;;;;;;;;;;;;;;;;;46323:1;46303:16;;:21;;;;;;;:::i;:::-;;;;;;;;45888:442;45850:480::o:0;28901:372::-;29003:4;29055:25;29040:40;;;:11;:40;;;;:105;;;;29112:33;29097:48;;;:11;:48;;;;29040:105;:172;;;;29177:35;29162:50;;;:11;:50;;;;29040:172;:225;;;;29229:36;29253:11;29229:23;:36::i;:::-;29040:225;29020:245;;28901:372;;;:::o;30529:100::-;30583:13;30616:5;30609:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30529:100;:::o;32248:170::-;32316:7;32344:16;32352:7;32344;:16::i;:::-;32336:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;32386:15;:24;32402:7;32386:24;;;;;;;;;;;;;;;;;;;;;32379:31;;32248:170;;;:::o;31859:323::-;31932:13;31948:23;31963:7;31948:14;:23::i;:::-;31932:39;;31996:5;31990:11;;:2;:11;;;31982:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;32058:5;32042:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32067:37;32084:5;32091:12;:10;:12::i;:::-;32067:16;:37::i;:::-;32042:62;32020:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;32146:28;32155:2;32159:7;32168:5;32146:8;:28::i;:::-;31921:261;31859:323;;:::o;46336:583::-;46414:17;;;;;;;;;;;46400:31;;:10;:31;;;46392:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;46481:17;46501:13;:24;46515:9;46501:24;;;;;;;;;;;:36;46526:10;46501:36;;;;;;;;;;;;;;;;46481:56;;46583:1;46544:13;:24;46558:9;46544:24;;;;;;;;;;;:36;46569:10;46544:36;;;;;;;;;;;;;;;:40;;;;46591:16;46610:21;46591:40;;46781:11;46768:9;:24;46764:150;;46811:10;46803:28;;:41;46832:11;46803:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46764:150;;;46875:10;46867:28;;:39;46896:9;46867:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46764:150;46385:534;;46336:583;:::o;44603:33::-;;;;;;;;;;;;;:::o;27454:100::-;27507:7;27534:12;;27527:19;;27454:100;:::o;33055:162::-;33181:28;33191:4;33197:2;33201:7;33181:9;:28::i;:::-;33055:162;;;:::o;28084:745::-;28173:7;28209:16;28219:5;28209:9;:16::i;:::-;28201:5;:24;28193:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;28242:22;28267:13;:11;:13::i;:::-;28242:38;;28291:19;28325:25;28379:9;28374:426;28398:14;28394:1;:18;28374:426;;;28434:31;28468:11;:14;28480:1;28468:14;;;;;;;;;;;28434:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28527:1;28501:28;;:9;:14;;;:28;;;28497:103;;28570:9;:14;;;28550:34;;28497:103;28639:5;28618:26;;:17;:26;;;28614:175;;28684:5;28669:11;:20;28665:77;;28721:1;28714:8;;;;;;;;;28665:77;28760:13;;;;;:::i;:::-;;;;28614:175;28419:381;28414:3;;;;;:::i;:::-;;;;28374:426;;;;28810:11;;;;;;;;;;:::i;:::-;;;;;;;;28084:745;;;;;:::o;44776:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47859:134::-;42524:13;:11;:13::i;:::-;47907:12:::1;47922:21;47907:36;;47958:10;47950:28;;:37;47979:7;47950:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47900:93;47859:134::o:0;33288:177::-;33418:39;33435:4;33441:2;33445:7;33418:39;;;;;;;;;;;;:16;:39::i;:::-;33288:177;;;:::o;27631:153::-;27698:7;27734:13;:11;:13::i;:::-;27726:5;:21;27718:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;27771:5;27764:12;;27631:153;;;:::o;44677:40::-;;;;;;;;;;;;;:::o;44325:97::-;;;:::o;44561:35::-;;;;:::o;30338:124::-;30402:7;30429:20;30441:7;30429:11;:20::i;:::-;:25;;;30422:32;;30338:124;;;:::o;31366:97::-;31414:13;31447:8;31440:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31366:97;:::o;45418:126::-;42524:13;:11;:13::i;:::-;45528:10:::1;45500:25;:38;;;;45418:126:::0;:::o;29337:179::-;29401:7;29446:1;29429:19;;:5;:19;;;29421:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;29480:12;:19;29493:5;29480:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29472:36;;29465:43;;29337:179;;;:::o;43286:103::-;42524:13;:11;:13::i;:::-;43351:30:::1;43378:1;43351:18;:30::i;:::-;43286:103::o:0;44429:43::-;;;:::o;44643:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30698:104::-;30754:13;30787:7;30780:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30698:104;:::o;32490:263::-;32597:12;:10;:12::i;:::-;32585:24;;:8;:24;;;32577:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32673:8;32628:18;:32;32647:12;:10;:12::i;:::-;32628:32;;;;;;;;;;;;;;;:42;32661:8;32628:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32726:8;32697:48;;32712:12;:10;:12::i;:::-;32697:48;;;32736:8;32697:48;;;;;;:::i;:::-;;;;;;;;32490:263;;:::o;44231:89::-;;;:::o;45304:108::-;42524:13;:11;:13::i;:::-;45378:28:::1;45388:9;45399:6;45378:9;:28::i;:::-;45304:108:::0;;:::o;44477:44::-;;;;:::o;45552:292::-;42524:13;:11;:13::i;:::-;45655::::1;;;;;;;;;;;45654:14;45646:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45722:4;45706:13;;:20;;;;;;;;;;;;;;;;;;45796:8;45781:12;:23;;;;:::i;:::-;45767:11;:37;;;;45829:9;;45811:15;:27;;;;;;;:::i;:::-;;45552:292:::0;;;:::o;33536:305::-;33695:28;33705:4;33711:2;33715:7;33695:9;:28::i;:::-;33756:48;33779:4;33785:2;33789:7;33798:5;33756:22;:48::i;:::-;33734:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;33536:305;;;;:::o;44526:30::-;;;;:::o;45001:159::-;45066:13;45098:16;45106:7;45098;:16::i;:::-;45090:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;45136:9;:18;45146:7;45136:18;;;;;;;;;;;45129:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45001:159;;;:::o;37881:43::-;;;;:::o;45166:132::-;42524:13;:11;:13::i;:::-;45258:19:::1;45240:46;;;45287:4;45240:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45166:132:::0;:::o;32824:164::-;32921:4;32945:18;:25;32964:5;32945:25;;;;;;;;;;;;;;;:35;32971:8;32945:35;;;;;;;;;;;;;;;;;;;;;;;;;32938:42;;32824:164;;;;:::o;43544:201::-;42524:13;:11;:13::i;:::-;43653:1:::1;43633:22;;:8;:22;;::::0;43625:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43709:28;43728:8;43709:18;:28::i;:::-;43544:201:::0;:::o;42803:132::-;42878:12;:10;:12::i;:::-;42867:23;;:7;:5;:7::i;:::-;:23;;;42859:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42803:132::o;34215:104::-;34284:27;34294:2;34298:8;34284:27;;;;;;;;;;;;:9;:27::i;:::-;34215:104;;:::o;13886:157::-;13971:4;14010:25;13995:40;;;:11;:40;;;;13988:47;;13886:157;;;:::o;34096:111::-;34153:4;34187:12;;34177:7;:22;34170:29;;34096:111;;;:::o;25180:98::-;25233:7;25260:10;25253:17;;25180:98;:::o;37677:196::-;37819:2;37792:15;:24;37808:7;37792:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37857:7;37853:2;37837:28;;37846:5;37837:28;;;;;;;;;;;;37677:196;;;:::o;36107:1452::-;36222:35;36260:20;36272:7;36260:11;:20::i;:::-;36222:58;;36293:22;36335:13;:18;;;36319:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;36394:12;:10;:12::i;:::-;36370:36;;:20;36382:7;36370:11;:20::i;:::-;:36;;;36319:87;:154;;;;36423:50;36440:13;:18;;;36460:12;:10;:12::i;:::-;36423:16;:50::i;:::-;36319:154;36293:181;;36495:17;36487:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;36561:4;36539:26;;:13;:18;;;:26;;;36531:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;36604:1;36590:16;;:2;:16;;;36582:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;36625:43;36647:4;36653:2;36657:7;36666:1;36625:21;:43::i;:::-;36733:49;36750:1;36754:7;36763:13;:18;;;36733:8;:49::i;:::-;36825:1;36795:12;:18;36808:4;36795:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36865:1;36837:12;:16;36850:2;36837:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36900:43;;;;;;;;36915:2;36900:43;;;;;;36926:15;36900:43;;;;;36877:11;:20;36889:7;36877:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37183:19;37215:1;37205:7;:11;;;;:::i;:::-;37183:33;;37272:1;37231:43;;:11;:24;37243:11;37231:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;37227:227;;37295:20;37303:11;37295:7;:20::i;:::-;37291:152;;;37363:64;;;;;;;;37378:13;:18;;;37363:64;;;;;;37398:13;:28;;;37363:64;;;;;37336:11;:24;37348:11;37336:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37291:152;37227:227;37490:7;37486:2;37471:27;;37480:4;37471:27;;;;;;;;;;;;37509:42;37530:4;37536:2;37540:7;37549:1;37509:20;:42::i;:::-;36211:1348;;;36107:1452;;;:::o;29713:563::-;29774:21;;:::i;:::-;29816:16;29824:7;29816;:16::i;:::-;29808:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;29851:26;29903:12;29892:7;:23;29888:103;;29978:1;29963:12;29953:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;29932:47;;29888:103;30008:12;30023:7;30008:22;;30003:242;30040:18;30032:4;:26;30003:242;;30083:31;30117:11;:17;30129:4;30117:17;;;;;;;;;;;30083:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30179:1;30153:28;;:9;:14;;;:28;;;30149:85;;30209:9;30202:16;;;;;;;30149:85;30068:177;30060:6;;;;;:::i;:::-;;;;30003:242;;;;30257:11;;;;;;;;;;:::i;:::-;;;;;;;;29713:563;;;;:::o;43905:191::-;43979:16;43998:6;;;;;;;;;;;43979:25;;44024:8;44015:6;;:17;;;;;;;;;;;;;;;;;;44079:8;44048:40;;44069:8;44048:40;;;;;;;;;;;;43968:128;43905:191;:::o;39427:754::-;39582:4;39603:15;:2;:13;;;:15::i;:::-;39599:575;;;39655:2;39639:36;;;39676:12;:10;:12::i;:::-;39690:4;39696:7;39705:5;39639:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39635:484;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39902:1;39885:6;:13;:18;39881:223;;39928:11;;;;;;;;;;:::i;:::-;;;;;;;;39881:223;40054:6;40048:13;40039:6;40035:2;40031:15;40024:38;39635:484;39772:45;;;39762:55;;;:6;:55;;;;39755:62;;;;;39599:575;40158:4;40151:11;;39427:754;;;;;;;:::o;34596:1257::-;34719:20;34742:12;;34719:35;;34787:1;34773:16;;:2;:16;;;34765:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;34940:21;34948:12;34940:7;:21::i;:::-;34939:22;34931:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;34998:12;34986:8;:24;;34978:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35029:61;35059:1;35063:2;35067:12;35081:8;35029:21;:61::i;:::-;35103:30;35136:12;:16;35149:2;35136:16;;;;;;;;;;;;;;;35103:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35182:135;;;;;;;;35238:8;35208:11;:19;;;:39;;;;:::i;:::-;35182:135;;;;;;35297:8;35262:11;:24;;;:44;;;;:::i;:::-;35182:135;;;;;35163:12;:16;35176:2;35163:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35356:43;;;;;;;;35371:2;35356:43;;;;;;35382:15;35356:43;;;;;35328:11;:25;35340:12;35328:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35412:20;35435:12;35412:35;;35465:9;35460:275;35484:8;35480:1;:12;35460:275;;;35544:12;35540:2;35519:38;;35536:1;35519:38;;;;;;;;;;;;35598:59;35629:1;35633:2;35637:12;35651:5;35598:22;:59::i;:::-;35572:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;35709:14;;;;;:::i;:::-;;;;35494:3;;;;;:::i;:::-;;;;35460:275;;;;35762:12;35747;:27;;;;35785:60;35814:1;35818:2;35822:12;35836:8;35785:20;:60::i;:::-;34708:1145;;;34596:1257;;;:::o;40669:159::-;;;;;:::o;41240:158::-;;;;;:::o;3730:326::-;3790:4;4047:1;4025:7;:19;;;:23;4018:30;;3730:326;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:170::-;322:22;318:1;310:6;306:14;299:46;182:170;:::o;358:366::-;500:3;521:67;585:2;580:3;521:67;:::i;:::-;514:74;;597:93;686:3;597:93;:::i;:::-;715:2;710:3;706:12;699:19;;358:366;;;:::o;730:419::-;896:4;934:2;923:9;919:18;911:26;;983:9;977:4;973:20;969:1;958:9;954:17;947:47;1011:131;1137:4;1011:131;:::i;:::-;1003:139;;730:419;;;:::o;1155:77::-;1192:7;1221:5;1210:16;;1155:77;;;:::o;1238:180::-;1286:77;1283:1;1276:88;1383:4;1380:1;1373:15;1407:4;1404:1;1397:15;1424:348;1464:7;1487:20;1505:1;1487:20;:::i;:::-;1482:25;;1521:20;1539:1;1521:20;:::i;:::-;1516:25;;1709:1;1641:66;1637:74;1634:1;1631:81;1626:1;1619:9;1612:17;1608:105;1605:131;;;1716:18;;:::i;:::-;1605:131;1764:1;1761;1757:9;1746:20;;1424:348;;;;:::o;1778:180::-;1826:77;1823:1;1816:88;1923:4;1920:1;1913:15;1947:4;1944:1;1937:15;1964:185;2004:1;2021:20;2039:1;2021:20;:::i;:::-;2016:25;;2055:20;2073:1;2055:20;:::i;:::-;2050:25;;2094:1;2084:35;;2099:18;;:::i;:::-;2084:35;2141:1;2138;2134:9;2129:14;;1964:185;;;;:::o;2155:191::-;2195:4;2215:20;2233:1;2215:20;:::i;:::-;2210:25;;2249:20;2267:1;2249:20;:::i;:::-;2244:25;;2288:1;2285;2282:8;2279:34;;;2293:18;;:::i;:::-;2279:34;2338:1;2335;2331:9;2323:17;;2155:191;;;;:::o;2352:305::-;2392:3;2411:20;2429:1;2411:20;:::i;:::-;2406:25;;2445:20;2463:1;2445:20;:::i;:::-;2440:25;;2599:1;2531:66;2527:74;2524:1;2521:81;2518:107;;;2605:18;;:::i;:::-;2518:107;2649:1;2646;2642:9;2635:16;;2352:305;;;;:::o;2663:221::-;2803:34;2799:1;2791:6;2787:14;2780:58;2872:4;2867:2;2859:6;2855:15;2848:29;2663:221;:::o;2890:366::-;3032:3;3053:67;3117:2;3112:3;3053:67;:::i;:::-;3046:74;;3129:93;3218:3;3129:93;:::i;:::-;3247:2;3242:3;3238:12;3231:19;;2890:366;;;:::o;3262:419::-;3428:4;3466:2;3455:9;3451:18;3443:26;;3515:9;3509:4;3505:20;3501:1;3490:9;3486:17;3479:47;3543:131;3669:4;3543:131;:::i;:::-;3535:139;;3262:419;;;:::o;3687:250::-;3827:34;3823:1;3815:6;3811:14;3804:58;3896:33;3891:2;3883:6;3879:15;3872:58;3687:250;:::o;3943:366::-;4085:3;4106:67;4170:2;4165:3;4106:67;:::i;:::-;4099:74;;4182:93;4271:3;4182:93;:::i;:::-;4300:2;4295:3;4291:12;4284:19;;3943:366;;;:::o;4315:419::-;4481:4;4519:2;4508:9;4504:18;4496:26;;4568:9;4562:4;4558:20;4554:1;4543:9;4539:17;4532:47;4596:131;4722:4;4596:131;:::i;:::-;4588:139;;4315:419;;;:::o;4740:75::-;4773:6;4806:2;4800:9;4790:19;;4740:75;:::o;4821:117::-;4930:1;4927;4920:12;4944:117;5053:1;5050;5043:12;5067:149;5103:7;5143:66;5136:5;5132:78;5121:89;;5067:149;;;:::o;5222:120::-;5294:23;5311:5;5294:23;:::i;:::-;5287:5;5284:34;5274:62;;5332:1;5329;5322:12;5274:62;5222:120;:::o;5348:137::-;5393:5;5431:6;5418:20;5409:29;;5447:32;5473:5;5447:32;:::i;:::-;5348:137;;;;:::o;5491:327::-;5549:6;5598:2;5586:9;5577:7;5573:23;5569:32;5566:119;;;5604:79;;:::i;:::-;5566:119;5724:1;5749:52;5793:7;5784:6;5773:9;5769:22;5749:52;:::i;:::-;5739:62;;5695:116;5491:327;;;;:::o;5824:90::-;5858:7;5901:5;5894:13;5887:21;5876:32;;5824:90;;;:::o;5920:109::-;6001:21;6016:5;6001:21;:::i;:::-;5996:3;5989:34;5920:109;;:::o;6035:210::-;6122:4;6160:2;6149:9;6145:18;6137:26;;6173:65;6235:1;6224:9;6220:17;6211:6;6173:65;:::i;:::-;6035:210;;;;:::o;6251:99::-;6303:6;6337:5;6331:12;6321:22;;6251:99;;;:::o;6356:307::-;6424:1;6434:113;6448:6;6445:1;6442:13;6434:113;;;6533:1;6528:3;6524:11;6518:18;6514:1;6509:3;6505:11;6498:39;6470:2;6467:1;6463:10;6458:15;;6434:113;;;6565:6;6562:1;6559:13;6556:101;;;6645:1;6636:6;6631:3;6627:16;6620:27;6556:101;6405:258;6356:307;;;:::o;6669:102::-;6710:6;6761:2;6757:7;6752:2;6745:5;6741:14;6737:28;6727:38;;6669:102;;;:::o;6777:364::-;6865:3;6893:39;6926:5;6893:39;:::i;:::-;6948:71;7012:6;7007:3;6948:71;:::i;:::-;6941:78;;7028:52;7073:6;7068:3;7061:4;7054:5;7050:16;7028:52;:::i;:::-;7105:29;7127:6;7105:29;:::i;:::-;7100:3;7096:39;7089:46;;6869:272;6777:364;;;;:::o;7147:313::-;7260:4;7298:2;7287:9;7283:18;7275:26;;7347:9;7341:4;7337:20;7333:1;7322:9;7318:17;7311:47;7375:78;7448:4;7439:6;7375:78;:::i;:::-;7367:86;;7147:313;;;;:::o;7466:122::-;7539:24;7557:5;7539:24;:::i;:::-;7532:5;7529:35;7519:63;;7578:1;7575;7568:12;7519:63;7466:122;:::o;7594:139::-;7640:5;7678:6;7665:20;7656:29;;7694:33;7721:5;7694:33;:::i;:::-;7594:139;;;;:::o;7739:329::-;7798:6;7847:2;7835:9;7826:7;7822:23;7818:32;7815:119;;;7853:79;;:::i;:::-;7815:119;7973:1;7998:53;8043:7;8034:6;8023:9;8019:22;7998:53;:::i;:::-;7988:63;;7944:117;7739:329;;;;:::o;8074:126::-;8111:7;8151:42;8144:5;8140:54;8129:65;;8074:126;;;:::o;8206:96::-;8243:7;8272:24;8290:5;8272:24;:::i;:::-;8261:35;;8206:96;;;:::o;8308:118::-;8395:24;8413:5;8395:24;:::i;:::-;8390:3;8383:37;8308:118;;:::o;8432:222::-;8525:4;8563:2;8552:9;8548:18;8540:26;;8576:71;8644:1;8633:9;8629:17;8620:6;8576:71;:::i;:::-;8432:222;;;;:::o;8660:122::-;8733:24;8751:5;8733:24;:::i;:::-;8726:5;8723:35;8713:63;;8772:1;8769;8762:12;8713:63;8660:122;:::o;8788:139::-;8834:5;8872:6;8859:20;8850:29;;8888:33;8915:5;8888:33;:::i;:::-;8788:139;;;;:::o;8933:474::-;9001:6;9009;9058:2;9046:9;9037:7;9033:23;9029:32;9026:119;;;9064:79;;:::i;:::-;9026:119;9184:1;9209:53;9254:7;9245:6;9234:9;9230:22;9209:53;:::i;:::-;9199:63;;9155:117;9311:2;9337:53;9382:7;9373:6;9362:9;9358:22;9337:53;:::i;:::-;9327:63;;9282:118;8933:474;;;;;:::o;9413:118::-;9500:24;9518:5;9500:24;:::i;:::-;9495:3;9488:37;9413:118;;:::o;9537:222::-;9630:4;9668:2;9657:9;9653:18;9645:26;;9681:71;9749:1;9738:9;9734:17;9725:6;9681:71;:::i;:::-;9537:222;;;;:::o;9765:619::-;9842:6;9850;9858;9907:2;9895:9;9886:7;9882:23;9878:32;9875:119;;;9913:79;;:::i;:::-;9875:119;10033:1;10058:53;10103:7;10094:6;10083:9;10079:22;10058:53;:::i;:::-;10048:63;;10004:117;10160:2;10186:53;10231:7;10222:6;10211:9;10207:22;10186:53;:::i;:::-;10176:63;;10131:118;10288:2;10314:53;10359:7;10350:6;10339:9;10335:22;10314:53;:::i;:::-;10304:63;;10259:118;9765:619;;;;;:::o;10390:474::-;10458:6;10466;10515:2;10503:9;10494:7;10490:23;10486:32;10483:119;;;10521:79;;:::i;:::-;10483:119;10641:1;10666:53;10711:7;10702:6;10691:9;10687:22;10666:53;:::i;:::-;10656:63;;10612:117;10768:2;10794:53;10839:7;10830:6;10819:9;10815:22;10794:53;:::i;:::-;10784:63;;10739:118;10390:474;;;;;:::o;10870:104::-;10915:7;10944:24;10962:5;10944:24;:::i;:::-;10933:35;;10870:104;;;:::o;10980:142::-;11083:32;11109:5;11083:32;:::i;:::-;11078:3;11071:45;10980:142;;:::o;11128:254::-;11237:4;11275:2;11264:9;11260:18;11252:26;;11288:87;11372:1;11361:9;11357:17;11348:6;11288:87;:::i;:::-;11128:254;;;;:::o;11388:329::-;11447:6;11496:2;11484:9;11475:7;11471:23;11467:32;11464:119;;;11502:79;;:::i;:::-;11464:119;11622:1;11647:53;11692:7;11683:6;11672:9;11668:22;11647:53;:::i;:::-;11637:63;;11593:117;11388:329;;;;:::o;11723:116::-;11793:21;11808:5;11793:21;:::i;:::-;11786:5;11783:32;11773:60;;11829:1;11826;11819:12;11773:60;11723:116;:::o;11845:133::-;11888:5;11926:6;11913:20;11904:29;;11942:30;11966:5;11942:30;:::i;:::-;11845:133;;;;:::o;11984:468::-;12049:6;12057;12106:2;12094:9;12085:7;12081:23;12077:32;12074:119;;;12112:79;;:::i;:::-;12074:119;12232:1;12257:53;12302:7;12293:6;12282:9;12278:22;12257:53;:::i;:::-;12247:63;;12203:117;12359:2;12385:50;12427:7;12418:6;12407:9;12403:22;12385:50;:::i;:::-;12375:60;;12330:115;11984:468;;;;;:::o;12458:117::-;12567:1;12564;12557:12;12581:117;12690:1;12687;12680:12;12704:117;12813:1;12810;12803:12;12841:553;12899:8;12909:6;12959:3;12952:4;12944:6;12940:17;12936:27;12926:122;;12967:79;;:::i;:::-;12926:122;13080:6;13067:20;13057:30;;13110:18;13102:6;13099:30;13096:117;;;13132:79;;:::i;:::-;13096:117;13246:4;13238:6;13234:17;13222:29;;13300:3;13292:4;13284:6;13280:17;13270:8;13266:32;13263:41;13260:128;;;13307:79;;:::i;:::-;13260:128;12841:553;;;;;:::o;13400:674::-;13480:6;13488;13496;13545:2;13533:9;13524:7;13520:23;13516:32;13513:119;;;13551:79;;:::i;:::-;13513:119;13671:1;13696:53;13741:7;13732:6;13721:9;13717:22;13696:53;:::i;:::-;13686:63;;13642:117;13826:2;13815:9;13811:18;13798:32;13857:18;13849:6;13846:30;13843:117;;;13879:79;;:::i;:::-;13843:117;13992:65;14049:7;14040:6;14029:9;14025:22;13992:65;:::i;:::-;13974:83;;;;13769:298;13400:674;;;;;:::o;14080:117::-;14189:1;14186;14179:12;14203:180;14251:77;14248:1;14241:88;14348:4;14345:1;14338:15;14372:4;14369:1;14362:15;14389:281;14472:27;14494:4;14472:27;:::i;:::-;14464:6;14460:40;14602:6;14590:10;14587:22;14566:18;14554:10;14551:34;14548:62;14545:88;;;14613:18;;:::i;:::-;14545:88;14653:10;14649:2;14642:22;14432:238;14389:281;;:::o;14676:129::-;14710:6;14737:20;;:::i;:::-;14727:30;;14766:33;14794:4;14786:6;14766:33;:::i;:::-;14676:129;;;:::o;14811:307::-;14872:4;14962:18;14954:6;14951:30;14948:56;;;14984:18;;:::i;:::-;14948:56;15022:29;15044:6;15022:29;:::i;:::-;15014:37;;15106:4;15100;15096:15;15088:23;;14811:307;;;:::o;15124:154::-;15208:6;15203:3;15198;15185:30;15270:1;15261:6;15256:3;15252:16;15245:27;15124:154;;;:::o;15284:410::-;15361:5;15386:65;15402:48;15443:6;15402:48;:::i;:::-;15386:65;:::i;:::-;15377:74;;15474:6;15467:5;15460:21;15512:4;15505:5;15501:16;15550:3;15541:6;15536:3;15532:16;15529:25;15526:112;;;15557:79;;:::i;:::-;15526:112;15647:41;15681:6;15676:3;15671;15647:41;:::i;:::-;15367:327;15284:410;;;;;:::o;15713:338::-;15768:5;15817:3;15810:4;15802:6;15798:17;15794:27;15784:122;;15825:79;;:::i;:::-;15784:122;15942:6;15929:20;15967:78;16041:3;16033:6;16026:4;16018:6;16014:17;15967:78;:::i;:::-;15958:87;;15774:277;15713:338;;;;:::o;16057:943::-;16152:6;16160;16168;16176;16225:3;16213:9;16204:7;16200:23;16196:33;16193:120;;;16232:79;;:::i;:::-;16193:120;16352:1;16377:53;16422:7;16413:6;16402:9;16398:22;16377:53;:::i;:::-;16367:63;;16323:117;16479:2;16505:53;16550:7;16541:6;16530:9;16526:22;16505:53;:::i;:::-;16495:63;;16450:118;16607:2;16633:53;16678:7;16669:6;16658:9;16654:22;16633:53;:::i;:::-;16623:63;;16578:118;16763:2;16752:9;16748:18;16735:32;16794:18;16786:6;16783:30;16780:117;;;16816:79;;:::i;:::-;16780:117;16921:62;16975:7;16966:6;16955:9;16951:22;16921:62;:::i;:::-;16911:72;;16706:287;16057:943;;;;;;;:::o;17006:308::-;17068:4;17158:18;17150:6;17147:30;17144:56;;;17180:18;;:::i;:::-;17144:56;17218:29;17240:6;17218:29;:::i;:::-;17210:37;;17302:4;17296;17292:15;17284:23;;17006:308;;;:::o;17320:412::-;17398:5;17423:66;17439:49;17481:6;17439:49;:::i;:::-;17423:66;:::i;:::-;17414:75;;17512:6;17505:5;17498:21;17550:4;17543:5;17539:16;17588:3;17579:6;17574:3;17570:16;17567:25;17564:112;;;17595:79;;:::i;:::-;17564:112;17685:41;17719:6;17714:3;17709;17685:41;:::i;:::-;17404:328;17320:412;;;;;:::o;17752:340::-;17808:5;17857:3;17850:4;17842:6;17838:17;17834:27;17824:122;;17865:79;;:::i;:::-;17824:122;17982:6;17969:20;18007:79;18082:3;18074:6;18067:4;18059:6;18055:17;18007:79;:::i;:::-;17998:88;;17814:278;17752:340;;;;:::o;18098:509::-;18167:6;18216:2;18204:9;18195:7;18191:23;18187:32;18184:119;;;18222:79;;:::i;:::-;18184:119;18370:1;18359:9;18355:17;18342:31;18400:18;18392:6;18389:30;18386:117;;;18422:79;;:::i;:::-;18386:117;18527:63;18582:7;18573:6;18562:9;18558:22;18527:63;:::i;:::-;18517:73;;18313:287;18098:509;;;;:::o;18613:474::-;18681:6;18689;18738:2;18726:9;18717:7;18713:23;18709:32;18706:119;;;18744:79;;:::i;:::-;18706:119;18864:1;18889:53;18934:7;18925:6;18914:9;18910:22;18889:53;:::i;:::-;18879:63;;18835:117;18991:2;19017:53;19062:7;19053:6;19042:9;19038:22;19017:53;:::i;:::-;19007:63;;18962:118;18613:474;;;;;:::o;19093:180::-;19141:77;19138:1;19131:88;19238:4;19235:1;19228:15;19262:4;19259:1;19252:15;19279:320;19323:6;19360:1;19354:4;19350:12;19340:22;;19407:1;19401:4;19397:12;19428:18;19418:81;;19484:4;19476:6;19472:17;19462:27;;19418:81;19546:2;19538:6;19535:14;19515:18;19512:38;19509:84;;19565:18;;:::i;:::-;19509:84;19330:269;19279:320;;;:::o;19605:153::-;19658:6;19692:5;19686:12;19676:22;;19718:33;19744:6;19718:33;:::i;:::-;19708:43;;19605:153;;;:::o;19764:141::-;19813:4;19836:3;19828:11;;19859:3;19856:1;19849:14;19893:4;19890:1;19880:18;19872:26;;19764:141;;;:::o;19911:145::-;19964:4;19987:3;19979:11;;20010:3;20007:1;20000:14;20044:4;20041:1;20031:18;20023:26;;19911:145;;;:::o;20062:93::-;20099:6;20146:2;20141;20134:5;20130:14;20126:23;20116:33;;20062:93;;;:::o;20161:107::-;20205:8;20255:5;20249:4;20245:16;20224:37;;20161:107;;;;:::o;20274:393::-;20343:6;20393:1;20381:10;20377:18;20416:97;20446:66;20435:9;20416:97;:::i;:::-;20534:39;20564:8;20553:9;20534:39;:::i;:::-;20522:51;;20606:4;20602:9;20595:5;20591:21;20582:30;;20655:4;20645:8;20641:19;20634:5;20631:30;20621:40;;20350:317;;20274:393;;;;;:::o;20673:60::-;20701:3;20722:5;20715:12;;20673:60;;;:::o;20739:142::-;20789:9;20822:53;20840:34;20849:24;20867:5;20849:24;:::i;:::-;20840:34;:::i;:::-;20822:53;:::i;:::-;20809:66;;20739:142;;;:::o;20887:75::-;20930:3;20951:5;20944:12;;20887:75;;;:::o;20968:269::-;21078:39;21109:7;21078:39;:::i;:::-;21139:91;21188:41;21212:16;21188:41;:::i;:::-;21180:6;21173:4;21167:11;21139:91;:::i;:::-;21133:4;21126:105;21044:193;20968:269;;;:::o;21243:73::-;21288:3;21243:73;:::o;21322:189::-;21399:32;;:::i;:::-;21440:65;21498:6;21490;21484:4;21440:65;:::i;:::-;21375:136;21322:189;;:::o;21517:186::-;21577:120;21594:3;21587:5;21584:14;21577:120;;;21648:39;21685:1;21678:5;21648:39;:::i;:::-;21621:1;21614:5;21610:13;21601:22;;21577:120;;;21517:186;;:::o;21709:543::-;21810:2;21805:3;21802:11;21799:446;;;21844:38;21876:5;21844:38;:::i;:::-;21928:29;21946:10;21928:29;:::i;:::-;21918:8;21914:44;22111:2;22099:10;22096:18;22093:49;;;22132:8;22117:23;;22093:49;22155:80;22211:22;22229:3;22211:22;:::i;:::-;22201:8;22197:37;22184:11;22155:80;:::i;:::-;21814:431;;21799:446;21709:543;;;:::o;22258:117::-;22312:8;22362:5;22356:4;22352:16;22331:37;;22258:117;;;;:::o;22381:169::-;22425:6;22458:51;22506:1;22502:6;22494:5;22491:1;22487:13;22458:51;:::i;:::-;22454:56;22539:4;22533;22529:15;22519:25;;22432:118;22381:169;;;;:::o;22555:295::-;22631:4;22777:29;22802:3;22796:4;22777:29;:::i;:::-;22769:37;;22839:3;22836:1;22832:11;22826:4;22823:21;22815:29;;22555:295;;;;:::o;22855:1463::-;22970:3;22964:4;22961:13;22958:26;;22977:5;;;;22958:26;23008:38;23042:3;23008:38;:::i;:::-;23111:18;23103:6;23100:30;23097:56;;;23133:18;;:::i;:::-;23097:56;23177:38;23209:4;23203:11;23177:38;:::i;:::-;23262:67;23322:6;23314;23308:4;23262:67;:::i;:::-;23356:1;23385:2;23377:6;23374:14;23402:1;23397:676;;;;24117:1;24134:6;24131:77;;;24183:9;24178:3;24174:19;24168:26;24159:35;;24131:77;24234:67;24294:6;24287:5;24234:67;:::i;:::-;24228:4;24221:81;24090:222;23367:945;;23397:676;23449:4;23445:9;23437:6;23433:22;23475:40;23511:3;23475:40;:::i;:::-;23468:47;;23542:37;23574:4;23542:37;:::i;:::-;23601:1;23615:207;23629:7;23626:1;23623:14;23615:207;;;23708:9;23703:3;23699:19;23693:26;23685:6;23678:42;23759:1;23751:6;23747:14;23737:24;;23806:1;23795:9;23791:17;23778:30;;23652:4;23649:1;23645:12;23640:17;;23615:207;;;23850:6;23841:7;23838:19;23835:179;;;23908:9;23903:3;23899:19;23893:26;23951:48;23993:4;23985:6;23981:17;23970:9;23951:48;:::i;:::-;23943:6;23936:64;23858:156;23835:179;24060:1;24056;24048:6;24044:14;24040:22;24034:4;24027:36;23404:669;;;23367:945;;22948:1370;;;22855:1463;;;:::o;24324:151::-;24464:3;24460:1;24452:6;24448:14;24441:27;24324:151;:::o;24481:365::-;24623:3;24644:66;24708:1;24703:3;24644:66;:::i;:::-;24637:73;;24719:93;24808:3;24719:93;:::i;:::-;24837:2;24832:3;24828:12;24821:19;;24481:365;;;:::o;24852:419::-;25018:4;25056:2;25045:9;25041:18;25033:26;;25105:9;25099:4;25095:20;25091:1;25080:9;25076:17;25069:47;25133:131;25259:4;25133:131;:::i;:::-;25125:139;;24852:419;;;:::o;25277:151::-;25417:3;25413:1;25405:6;25401:14;25394:27;25277:151;:::o;25434:365::-;25576:3;25597:66;25661:1;25656:3;25597:66;:::i;:::-;25590:73;;25672:93;25761:3;25672:93;:::i;:::-;25790:2;25785:3;25781:12;25774:19;;25434:365;;;:::o;25805:419::-;25971:4;26009:2;25998:9;25994:18;25986:26;;26058:9;26052:4;26048:20;26044:1;26033:9;26029:17;26022:47;26086:131;26212:4;26086:131;:::i;:::-;26078:139;;25805:419;;;:::o;26230:225::-;26370:34;26366:1;26358:6;26354:14;26347:58;26439:8;26434:2;26426:6;26422:15;26415:33;26230:225;:::o;26461:366::-;26603:3;26624:67;26688:2;26683:3;26624:67;:::i;:::-;26617:74;;26700:93;26789:3;26700:93;:::i;:::-;26818:2;26813:3;26809:12;26802:19;;26461:366;;;:::o;26833:419::-;26999:4;27037:2;27026:9;27022:18;27014:26;;27086:9;27080:4;27076:20;27072:1;27061:9;27057:17;27050:47;27114:131;27240:4;27114:131;:::i;:::-;27106:139;;26833:419;;;:::o;27258:151::-;27398:3;27394:1;27386:6;27382:14;27375:27;27258:151;:::o;27415:365::-;27557:3;27578:66;27642:1;27637:3;27578:66;:::i;:::-;27571:73;;27653:93;27742:3;27653:93;:::i;:::-;27771:2;27766:3;27762:12;27755:19;;27415:365;;;:::o;27786:419::-;27952:4;27990:2;27979:9;27975:18;27967:26;;28039:9;28033:4;28029:20;28025:1;28014:9;28010:17;28003:47;28067:131;28193:4;28067:131;:::i;:::-;28059:139;;27786:419;;;:::o;28211:233::-;28250:3;28273:24;28291:5;28273:24;:::i;:::-;28264:33;;28319:66;28312:5;28309:77;28306:103;;28389:18;;:::i;:::-;28306:103;28436:1;28429:5;28425:13;28418:20;;28211:233;;;:::o;28450:151::-;28590:3;28586:1;28578:6;28574:14;28567:27;28450:151;:::o;28607:365::-;28749:3;28770:66;28834:1;28829:3;28770:66;:::i;:::-;28763:73;;28845:93;28934:3;28845:93;:::i;:::-;28963:2;28958:3;28954:12;28947:19;;28607:365;;;:::o;28978:419::-;29144:4;29182:2;29171:9;29167:18;29159:26;;29231:9;29225:4;29221:20;29217:1;29206:9;29202:17;29195:47;29259:131;29385:4;29259:131;:::i;:::-;29251:139;;28978:419;;;:::o;29403:151::-;29543:3;29539:1;29531:6;29527:14;29520:27;29403:151;:::o;29560:365::-;29702:3;29723:66;29787:1;29782:3;29723:66;:::i;:::-;29716:73;;29798:93;29887:3;29798:93;:::i;:::-;29916:2;29911:3;29907:12;29900:19;;29560:365;;;:::o;29931:419::-;30097:4;30135:2;30124:9;30120:18;30112:26;;30184:9;30178:4;30174:20;30170:1;30159:9;30155:17;30148:47;30212:131;30338:4;30212:131;:::i;:::-;30204:139;;29931:419;;;:::o;30356:151::-;30496:3;30492:1;30484:6;30480:14;30473:27;30356:151;:::o;30513:365::-;30655:3;30676:66;30740:1;30735:3;30676:66;:::i;:::-;30669:73;;30751:93;30840:3;30751:93;:::i;:::-;30869:2;30864:3;30860:12;30853:19;;30513:365;;;:::o;30884:419::-;31050:4;31088:2;31077:9;31073:18;31065:26;;31137:9;31131:4;31127:20;31123:1;31112:9;31108:17;31101:47;31165:131;31291:4;31165:131;:::i;:::-;31157:139;;30884:419;;;:::o;31309:176::-;31449:28;31445:1;31437:6;31433:14;31426:52;31309:176;:::o;31491:366::-;31633:3;31654:67;31718:2;31713:3;31654:67;:::i;:::-;31647:74;;31730:93;31819:3;31730:93;:::i;:::-;31848:2;31843:3;31839:12;31832:19;;31491:366;;;:::o;31863:419::-;32029:4;32067:2;32056:9;32052:18;32044:26;;32116:9;32110:4;32106:20;32102:1;32091:9;32087:17;32080:47;32144:131;32270:4;32144:131;:::i;:::-;32136:139;;31863:419;;;:::o;32288:97::-;32347:6;32375:3;32365:13;;32288:97;;;;:::o;32391:1403::-;32515:44;32555:3;32550;32515:44;:::i;:::-;32624:18;32616:6;32613:30;32610:56;;;32646:18;;:::i;:::-;32610:56;32690:38;32722:4;32716:11;32690:38;:::i;:::-;32775:67;32835:6;32827;32821:4;32775:67;:::i;:::-;32869:1;32898:2;32890:6;32887:14;32915:1;32910:632;;;;33586:1;33603:6;33600:84;;;33659:9;33654:3;33650:19;33637:33;33628:42;;33600:84;33710:67;33770:6;33763:5;33710:67;:::i;:::-;33704:4;33697:81;33559:229;32880:908;;32910:632;32962:4;32958:9;32950:6;32946:22;32996:37;33028:4;32996:37;:::i;:::-;33055:1;33069:215;33083:7;33080:1;33077:14;33069:215;;;33169:9;33164:3;33160:19;33147:33;33139:6;33132:49;33220:1;33212:6;33208:14;33198:24;;33267:2;33256:9;33252:18;33239:31;;33106:4;33103:1;33099:12;33094:17;;33069:215;;;33312:6;33303:7;33300:19;33297:186;;;33377:9;33372:3;33368:19;33355:33;33420:48;33462:4;33454:6;33450:17;33439:9;33420:48;:::i;:::-;33412:6;33405:64;33320:163;33297:186;33529:1;33525;33517:6;33513:14;33509:22;33503:4;33496:36;32917:625;;;32880:908;;32490:1304;;;32391:1403;;;:::o;33800:151::-;33940:3;33936:1;33928:6;33924:14;33917:27;33800:151;:::o;33957:365::-;34099:3;34120:66;34184:1;34179:3;34120:66;:::i;:::-;34113:73;;34195:93;34284:3;34195:93;:::i;:::-;34313:2;34308:3;34304:12;34297:19;;33957:365;;;:::o;34328:419::-;34494:4;34532:2;34521:9;34517:18;34509:26;;34581:9;34575:4;34571:20;34567:1;34556:9;34552:17;34545:47;34609:131;34735:4;34609:131;:::i;:::-;34601:139;;34328:419;;;:::o;34753:77::-;34790:7;34819:5;34808:16;;34753:77;;;:::o;34836:122::-;34909:24;34927:5;34909:24;:::i;:::-;34902:5;34899:35;34889:63;;34948:1;34945;34938:12;34889:63;34836:122;:::o;34964:143::-;35021:5;35052:6;35046:13;35037:22;;35068:33;35095:5;35068:33;:::i;:::-;34964:143;;;;:::o;35113:351::-;35183:6;35232:2;35220:9;35211:7;35207:23;35203:32;35200:119;;;35238:79;;:::i;:::-;35200:119;35358:1;35383:64;35439:7;35430:6;35419:9;35415:22;35383:64;:::i;:::-;35373:74;;35329:128;35113:351;;;;:::o;35470:225::-;35610:34;35606:1;35598:6;35594:14;35587:58;35679:8;35674:2;35666:6;35662:15;35655:33;35470:225;:::o;35701:366::-;35843:3;35864:67;35928:2;35923:3;35864:67;:::i;:::-;35857:74;;35940:93;36029:3;35940:93;:::i;:::-;36058:2;36053:3;36049:12;36042:19;;35701:366;;;:::o;36073:419::-;36239:4;36277:2;36266:9;36262:18;36254:26;;36326:9;36320:4;36316:20;36312:1;36301:9;36297:17;36290:47;36354:131;36480:4;36354:131;:::i;:::-;36346:139;;36073:419;;;:::o;36498:182::-;36638:34;36634:1;36626:6;36622:14;36615:58;36498:182;:::o;36686:366::-;36828:3;36849:67;36913:2;36908:3;36849:67;:::i;:::-;36842:74;;36925:93;37014:3;36925:93;:::i;:::-;37043:2;37038:3;37034:12;37027:19;;36686:366;;;:::o;37058:419::-;37224:4;37262:2;37251:9;37247:18;37239:26;;37311:9;37305:4;37301:20;37297:1;37286:9;37282:17;37275:47;37339:131;37465:4;37339:131;:::i;:::-;37331:139;;37058:419;;;:::o;37483:118::-;37520:7;37560:34;37553:5;37549:46;37538:57;;37483:118;;;:::o;37607:191::-;37647:4;37667:20;37685:1;37667:20;:::i;:::-;37662:25;;37701:20;37719:1;37701:20;:::i;:::-;37696:25;;37740:1;37737;37734:8;37731:34;;;37745:18;;:::i;:::-;37731:34;37790:1;37787;37783:9;37775:17;;37607:191;;;;:::o;37804:273::-;37844:3;37863:20;37881:1;37863:20;:::i;:::-;37858:25;;37897:20;37915:1;37897:20;:::i;:::-;37892:25;;38019:1;37983:34;37979:42;37976:1;37973:49;37970:75;;;38025:18;;:::i;:::-;37970:75;38069:1;38066;38062:9;38055:16;;37804:273;;;;:::o;38083:151::-;38223:3;38219:1;38211:6;38207:14;38200:27;38083:151;:::o;38240:365::-;38382:3;38403:66;38467:1;38462:3;38403:66;:::i;:::-;38396:73;;38478:93;38567:3;38478:93;:::i;:::-;38596:2;38591:3;38587:12;38580:19;;38240:365;;;:::o;38611:419::-;38777:4;38815:2;38804:9;38800:18;38792:26;;38864:9;38858:4;38854:20;38850:1;38839:9;38835:17;38828:47;38892:131;39018:4;38892:131;:::i;:::-;38884:139;;38611:419;;;:::o;39036:171::-;39075:3;39098:24;39116:5;39098:24;:::i;:::-;39089:33;;39144:4;39137:5;39134:15;39131:41;;39152:18;;:::i;:::-;39131:41;39199:1;39192:5;39188:13;39181:20;;39036:171;;;:::o;39213:98::-;39264:6;39298:5;39292:12;39282:22;;39213:98;;;:::o;39317:168::-;39400:11;39434:6;39429:3;39422:19;39474:4;39469:3;39465:14;39450:29;;39317:168;;;;:::o;39491:360::-;39577:3;39605:38;39637:5;39605:38;:::i;:::-;39659:70;39722:6;39717:3;39659:70;:::i;:::-;39652:77;;39738:52;39783:6;39778:3;39771:4;39764:5;39760:16;39738:52;:::i;:::-;39815:29;39837:6;39815:29;:::i;:::-;39810:3;39806:39;39799:46;;39581:270;39491:360;;;;:::o;39857:640::-;40052:4;40090:3;40079:9;40075:19;40067:27;;40104:71;40172:1;40161:9;40157:17;40148:6;40104:71;:::i;:::-;40185:72;40253:2;40242:9;40238:18;40229:6;40185:72;:::i;:::-;40267;40335:2;40324:9;40320:18;40311:6;40267:72;:::i;:::-;40386:9;40380:4;40376:20;40371:2;40360:9;40356:18;40349:48;40414:76;40485:4;40476:6;40414:76;:::i;:::-;40406:84;;39857:640;;;;;;;:::o;40503:141::-;40559:5;40590:6;40584:13;40575:22;;40606:32;40632:5;40606:32;:::i;:::-;40503:141;;;;:::o;40650:349::-;40719:6;40768:2;40756:9;40747:7;40743:23;40739:32;40736:119;;;40774:79;;:::i;:::-;40736:119;40894:1;40919:63;40974:7;40965:6;40954:9;40950:22;40919:63;:::i;:::-;40909:73;;40865:127;40650:349;;;;:::o;41005:151::-;41145:3;41141:1;41133:6;41129:14;41122:27;41005:151;:::o;41162:365::-;41304:3;41325:66;41389:1;41384:3;41325:66;:::i;:::-;41318:73;;41400:93;41489:3;41400:93;:::i;:::-;41518:2;41513:3;41509:12;41502:19;;41162:365;;;:::o;41533:419::-;41699:4;41737:2;41726:9;41722:18;41714:26;;41786:9;41780:4;41776:20;41772:1;41761:9;41757:17;41750:47;41814:131;41940:4;41814:131;:::i;:::-;41806:139;;41533:419;;;:::o
Swarm Source
ipfs://a6e630dbe9248ad54294bd821a686d0d2de1a429f2265575284e22b6ede2626f
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.