Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
129 GOLDENP
Holders
103
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 GOLDENPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
GoldenNFTPresale
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-16 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; 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); } 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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } 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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } 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); } 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 tokenId); /** * @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); } 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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // 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 Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract GoldenNFTPresale is ERC721Enumerable, Ownable, ReentrancyGuard { uint256 public _cap = 80; uint256 public _maxBuyAmount = 1; uint256 public _pricePerToken = 5*10**16; address payable public _wallet; bool private _isSalePaused = false; mapping(address => bool) public _whitelist; uint256 public _whitelistClaimed = 0; constructor() ERC721('GoldenNFT Presale Token', 'GOLDENP') { _wallet = payable(_msgSender()); _isSalePaused = false; _whitelist[0xF95082E9BC09E16d93A43A2c6CF207677AAFA183] = true; _whitelist[0xf53B490D06D1F43da86A074a47a50e9f4E23bB6E] = true; _whitelist[0x1e0d4A10a3D2b2eFCaB3BD98fA046bDf6132D676] = true; _whitelist[0x5fd2D44888781053fc1D73e9D96132De812aCAeb] = true; _whitelist[0xAD8a6394dF247978Fa1EA1a7252493a2b242Fb3b] = true; _whitelist[0x456D7Da634d1BAcFEefe20eca9de534E02f33013] = true; _whitelist[0xF457d7B33a3be005Dd083Bdee1c206098064C83b] = true; _whitelist[0xF5d767bBe080A3c4966943950070fc9C209f7eFB] = true; _whitelist[0x7cd26AF728703800891F92300712D088212abd8B] = true; _whitelist[0xB4505D4C35CadD746600D3A6c2FE3378055fE450] = true; _whitelist[0x561BAE02AEe0588C971EcAA8382Ba140537a93D2] = true; _whitelist[0xa8D0c5Eb97458CA3c0faad27796f96d1Cba53f48] = true; _whitelist[0x2B40Ad71d8DDAc25d52727018b642Aa236d9C359] = true; _whitelist[0x704F4AdA7780d3a228CbCe2628Fc341030c6bae1] = true; _whitelist[0xF22c1cd3C39bBff4Fb281Ae51321f66c9d7983CD] = true; _whitelist[0xc9925776CE233ba2b23c70F04e5F5e8405B1A202] = true; _whitelist[0x5FC1063Dd07ECcc4590a7C1DB56FB6D0083e4549] = true; _whitelist[0x13eA818d86b1b53aDa7EeC6580d579fEa1C32Ef0] = true; _whitelist[0x0BDa6211b7479Fc2bB26406A22e4Ea968E8784B9] = true; _whitelist[0xDb768F2d0585D0b43153BF244a42B4543Fa1F19A] = true; _whitelist[0xbF8703d3C22166D90A49C156DF29592e39512DE4] = true; _whitelist[0x48C08d9653d724301E7350B0563E519E1e2d21D0] = true; _whitelist[0x2Fa36278D762a3B7C6cd9B660C84244Cb41d18f4] = true; _whitelist[0xe0bff49377d0f66351b164A2b8CBD3A6d72926fA] = true; _whitelist[0x161Eef2eAe201864821F8A3CB9379dfd031AAC70] = true; _whitelist[0x650eD2bDbeE35ACf966a6D6364EBc79600e6809a] = true; _whitelist[0x23736cF143877F302740822D3803494FA35B82ee] = true; _whitelist[0x048c77F46578fb2736E0aE0B0a5151907805c5f6] = true; _whitelist[0x80E5506814F437D0cD3f33b59802d97A38BAf13a] = true; _whitelist[0xB6e88a9a40e04528D6229CAc16105b8B3d546873] = true; _whitelist[0x1689f1c198dAe90c5502515a5Ff5f3dbEe9B7020] = true; _whitelist[0xE28aD49154D0DE74133a6a0FF4031e01bABaC0ce] = true; _whitelist[0xfE72c32C49725990227d98a6202c84EBECBC9Db8] = true; _whitelist[0x9F0870CF6598795C67829Ed7c409796d06c007D1] = true; _whitelist[0xEF89060245FA4b73500891A6FBb33fAc60D0458a] = true; _whitelist[0x2D73288a762C957a4A70B456eac5cAcC29Bd62f0] = true; _whitelist[0xDE6fbE680Df68f215EcE40B59342DAdD2451df16] = true; _whitelist[0xF930b0A0500D8F53b2E7EFa4F7bCB5cc0c71067E] = true; _whitelist[0xa69987Bb895Eb110FEf1063F2f0a6874F4C93f82] = true; _whitelist[0x7Dc44c48BA4085cAe547f17c7b45B9B5252C5046] = true; _whitelist[0x4004E90a1E4931a28f4EDb3feb0b74E8352454b9] = true; _whitelist[0x73C88A670B3817DFE02092c3824945b5b874834b] = true; _whitelist[0x874dA3F4C00EDAcB153615171826f1c4898Ad17a] = true; _whitelist[0xCe61693a38163827788c258E51f609647acAE14F] = true; _whitelist[0xf54b3bDfD8E016814a58d00144D69c6a6640Ef35] = true; _whitelist[0xDd9942ab3B54E3f7020C33126f359Dac7f8AF2b7] = true; _whitelist[0xD6c0Cfa5C2D2978327d2A9d4F1581B2c73EcDaB4] = true; _whitelist[0xEb0600754C439A56c60a4Cf1bf8Cb5a10939Fa68] = true; _whitelist[0xE3Fb76Ca99CdBc419A028e44aCDC9c1618f8E03A] = true; _whitelist[0x0FfF8805cAFfE42a48baf50A9845e250AEc9bD4A] = true; _whitelist[0xE21a248244C8e6E825fAFEB5b2451908529f2240] = true; _whitelist[0xaDEeEF1A5b500FD93f0D31781CB1c20ffb7Ab83f] = true; _whitelist[0x6c4D4e4861F7D8e11887A50cDf16B0914C9F5B78] = true; _whitelist[0xC96a65D27746D00bF302a93130b8dadC0589b4D1] = true; _whitelist[0xc0527858398a3914cb33f04eEA3D71850aBd1a78] = true; _whitelist[0x7845b88EbeD1C3C12D9A7b81F3D258984A68400F] = true; _whitelist[0x33E3dE87A2aCA107cAB26269bCa8E7Cc4BEaaC51] = true; _whitelist[0xDf2EfB71d96655dB5814403B258E479C88a0723E] = true; _whitelist[0x89403f641671a58Cd1249472d486c3c57FCd8768] = true; _whitelist[0x5580b4B9cfD371cAB260A6c443A6604deD6820CF] = true; _whitelist[0xae356Afd5AE673aa6402Be8904b1aF56c3b0943F] = true; _whitelist[0x650f8A8B6e1682bbe77aF99f5a31F07689F96d18] = true; _whitelist[0xee34F5236fc104646d0b121144Fb78F6F6C74213] = true; _whitelist[0xD0b3DDfF476F1bEdAB6213f2F525c839Fe1eED77] = true; _whitelist[0x9BfB1AF34aE8f05Ba96EdAF03214fB0AAA63d73A] = true; _whitelist[0xcA465C48f8a48c064dE2AD751214bD34a21AD49F] = true; _whitelist[0xf04cae498C5C18311746a13A7e46261DbC052aFD] = true; _whitelist[0x532deFfda336Ce4F06EE026d7392c6b284258106] = true; _whitelist[0xc0Bc37BB9E7035ab085EB0747c7F7c5e40d81010] = true; _whitelist[0xf67720dF37044a67F1569407018F3C31740fa743] = true; _whitelist[0x0F885Dc9339444B7e8706D2A31D23Fec87428333] = true; _whitelist[0x7e928675b995e751057aCA4212426F4D6Bafa09b] = true; _whitelist[0x65a633CDC22b03E7aD0D11af1BEC9979c32a80d1] = true; _whitelist[0xB0cf9235283871C07F20Cbb33eedcAc2dB98Aa83] = true; _whitelist[0x1A2134a294f5516d730BA1DEf212329814b094fb] = true; _whitelist[0x80E5506814F437D0cD3f33b59802d97A38BAf13a] = true; _whitelist[0x8Bd2F5EAf3F0862f24c6F9514baFd7f5772411dB] = true; _whitelist[0x2173c7e5cE195736DfFB1006d571dA6146eb9e7B] = true; _whitelist[0x4B288F73c8f6a8048c79b2D3cE363DD6D12942Cd] = true; _whitelist[0xb0865Ed100D9eEa9Ee2cfa580062231Fd8E6E84A] = true; _whitelist[0x09C160223939a19F537b3612848174d827eaf2a3] = true; _whitelist[0xeDe471bcc91E33a93C1BF3F9d09e2080FB5Ef80A] = true; _whitelist[0xF4d0A3b8B5e1156D9623D0C0F86287A16de0E9a1] = true; _whitelist[0x1689f1c198dAe90c5502515a5Ff5f3dbEe9B7020] = true; _whitelist[0xe7D32427C08ADdAFD8EA862AfA7af289Dfa30206] = true; _whitelist[0x8D8BE5168C6bb3b6128f7B6D9E2fD27853D76e73] = true; _whitelist[0x4D8F4F3EB162312235142CE92bFE46667574D1aD] = true; _whitelist[0xe24D9Fe04Af1db140db03678F5f8e887b8241912] = true; _whitelist[0xee34F5236fc104646d0b121144Fb78F6F6C74213] = true; _whitelist[0xC5c60585feeFbe31d0Ac07663005E083d8A8d064] = true; _whitelist[0xD1B6af2Bd8FE5665259C318D4761f917A4745712] = true; _whitelist[0xF9435d468f3C9AeaaEae3CC53e502329b1773191] = true; _whitelist[0xBc9679C8191C61759eEA6C47097d5ABde653B004] = true; _whitelist[0x36EBFC12FcD5EF71cd0815102Ad7bc92685097ab] = true; _whitelist[0xF8599268d92667087e5Ad6eAEEe7b6A4BBF904f3] = true; _mintToken(_msgSender()); } function mint(uint256 mintAmount) public payable nonReentrant { require(!isSalePaused(), "GoldenNFTPresale: sale is paused"); require(mintAmount > 0, "GoldenNFTPresale: buy at least 1 NFT"); require(mintAmount <= _maxBuyAmount, "GoldenNFTPresale: its not allowed to buy this much"); // check whitelist if(_whitelist[msg.sender]) { _whitelist[msg.sender] = false; _whitelistClaimed = _whitelistClaimed + 1; } else { require(mintAmount <= nftsAvailable(), "GoldenNFTPresale: not enough NFTs available"); require((_pricePerToken * mintAmount) == msg.value, "GoldenNFTPresale: exact value in ETH needed"); } for (uint256 i = 0; i < mintAmount; i++) { _mintToken(_msgSender()); } payable(_wallet).transfer(msg.value); } function nftsAvailable() public view returns(uint256) { return _cap + _whitelistClaimed - totalSupply(); } function cap() public view returns(uint256) { return _cap; } function isSalePaused() public view returns(bool) { return _isSalePaused; } function pauseSale() external onlyOwner { _isSalePaused = true; } function resumeSale() external onlyOwner { _isSalePaused = false; } function whitelistAdd (address[] memory users) public onlyOwner { for (uint i = 0; i < users.length; i++) { _whitelist[users[i]] = true; } } function whitelistRemove (address[] memory users) public onlyOwner { for (uint i = 0; i < users.length; i++) { _whitelist[users[i]] = false; } } function adminMint(uint256 mintAmount) public onlyOwner { require(mintAmount > 0, "GoldenNFTPresale: buy at least 1 NFT"); require(mintAmount <= nftsAvailable(), "GoldenNFTPresale: not enough NFTs available"); for (uint256 i = 0; i < mintAmount; i++) { _mintToken(_msgSender()); } } function adminMintTo(address receiver) public onlyOwner { _mintToken(receiver); } function _mintToken(address destinationAddress) internal { uint256 newTokenID = totalSupply(); require(!_exists(newTokenID), "GoldenNFTPresale: Token already exist."); _safeMint(destinationAddress, newTokenID); } function tokenURI(uint256 tokenId) public pure override returns (string memory) { return 'ipfs://Qmf79fCzQu4svfZuxG5GBnWdGqYZXj3ggRaXhwJURw6nkE'; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pricePerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_whitelistClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"adminMintTo","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":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeSale","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":"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":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"whitelistAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"whitelistRemove","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526050600c556001600d5566b1a2bc2ec50000600e556000600f60146101000a81548160ff02191690831515021790555060006011553480156200004657600080fd5b506040518060400160405280601781526020017f476f6c64656e4e46542050726573616c6520546f6b656e0000000000000000008152506040518060400160405280600781526020017f474f4c44454e50000000000000000000000000000000000000000000000000008152508160009080519060200190620000cb929190620034f5565b508060019080519060200190620000e4929190620034f5565b50505062000107620000fb620029b460201b60201c565b620029bc60201b60201c565b6001600b819055506200011f620029b460201b60201c565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f60146101000a81548160ff02191690831515021790555060016010600073f95082e9bc09e16d93a43a2c6cf207677aafa18373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f53b490d06d1f43da86a074a47a50e9f4e23bb6e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000731e0d4a10a3d2b2efcab3bd98fa046bdf6132d67673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000735fd2d44888781053fc1d73e9d96132de812acaeb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ad8a6394df247978fa1ea1a7252493a2b242fb3b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073456d7da634d1bacfeefe20eca9de534e02f3301373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f457d7b33a3be005dd083bdee1c206098064c83b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f5d767bbe080a3c4966943950070fc9c209f7efb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000737cd26af728703800891f92300712d088212abd8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073b4505d4c35cadd746600d3a6c2fe3378055fe45073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073561bae02aee0588c971ecaa8382ba140537a93d273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073a8d0c5eb97458ca3c0faad27796f96d1cba53f4873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000732b40ad71d8ddac25d52727018b642aa236d9c35973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073704f4ada7780d3a228cbce2628fc341030c6bae173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f22c1cd3c39bbff4fb281ae51321f66c9d7983cd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073c9925776ce233ba2b23c70f04e5f5e8405b1a20273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000735fc1063dd07eccc4590a7c1db56fb6d0083e454973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007313ea818d86b1b53ada7eec6580d579fea1c32ef073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000730bda6211b7479fc2bb26406a22e4ea968e8784b973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073db768f2d0585d0b43153bf244a42b4543fa1f19a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073bf8703d3c22166d90a49c156df29592e39512de473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007348c08d9653d724301e7350b0563e519e1e2d21d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000732fa36278d762a3b7c6cd9b660c84244cb41d18f473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e0bff49377d0f66351b164a2b8cbd3a6d72926fa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073161eef2eae201864821f8a3cb9379dfd031aac7073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073650ed2bdbee35acf966a6d6364ebc79600e6809a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007323736cf143877f302740822d3803494fa35b82ee73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073048c77f46578fb2736e0ae0b0a5151907805c5f673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007380e5506814f437d0cd3f33b59802d97a38baf13a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073b6e88a9a40e04528d6229cac16105b8b3d54687373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000731689f1c198dae90c5502515a5ff5f3dbee9b702073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e28ad49154d0de74133a6a0ff4031e01babac0ce73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073fe72c32c49725990227d98a6202c84ebecbc9db873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000739f0870cf6598795c67829ed7c409796d06c007d173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ef89060245fa4b73500891a6fbb33fac60d0458a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000732d73288a762c957a4a70b456eac5cacc29bd62f073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073de6fbe680df68f215ece40b59342dadd2451df1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f930b0a0500d8f53b2e7efa4f7bcb5cc0c71067e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073a69987bb895eb110fef1063f2f0a6874f4c93f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000737dc44c48ba4085cae547f17c7b45b9b5252c504673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000734004e90a1e4931a28f4edb3feb0b74e8352454b973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007373c88a670b3817dfe02092c3824945b5b874834b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073874da3f4c00edacb153615171826f1c4898ad17a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ce61693a38163827788c258e51f609647acae14f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f54b3bdfd8e016814a58d00144d69c6a6640ef3573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073dd9942ab3b54e3f7020c33126f359dac7f8af2b773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073d6c0cfa5c2d2978327d2a9d4f1581b2c73ecdab473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073eb0600754c439a56c60a4cf1bf8cb5a10939fa6873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e3fb76ca99cdbc419a028e44acdc9c1618f8e03a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000730fff8805caffe42a48baf50a9845e250aec9bd4a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e21a248244c8e6e825fafeb5b2451908529f224073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073adeeef1a5b500fd93f0d31781cb1c20ffb7ab83f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000736c4d4e4861f7d8e11887a50cdf16b0914c9f5b7873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073c96a65d27746d00bf302a93130b8dadc0589b4d173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073c0527858398a3914cb33f04eea3d71850abd1a7873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000737845b88ebed1c3c12d9a7b81f3d258984a68400f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007333e3de87a2aca107cab26269bca8e7cc4beaac5173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073df2efb71d96655db5814403b258e479c88a0723e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007389403f641671a58cd1249472d486c3c57fcd876873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000735580b4b9cfd371cab260a6c443a6604ded6820cf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ae356afd5ae673aa6402be8904b1af56c3b0943f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073650f8a8b6e1682bbe77af99f5a31f07689f96d1873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ee34f5236fc104646d0b121144fb78f6f6c7421373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073d0b3ddff476f1bedab6213f2f525c839fe1eed7773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000739bfb1af34ae8f05ba96edaf03214fb0aaa63d73a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ca465c48f8a48c064de2ad751214bd34a21ad49f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f04cae498c5c18311746a13a7e46261dbc052afd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073532deffda336ce4f06ee026d7392c6b28425810673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073c0bc37bb9e7035ab085eb0747c7f7c5e40d8101073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f67720df37044a67f1569407018f3c31740fa74373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000730f885dc9339444b7e8706d2a31d23fec8742833373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000737e928675b995e751057aca4212426f4d6bafa09b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007365a633cdc22b03e7ad0d11af1bec9979c32a80d173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073b0cf9235283871c07f20cbb33eedcac2db98aa8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000731a2134a294f5516d730ba1def212329814b094fb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007380e5506814f437d0cd3f33b59802d97a38baf13a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000738bd2f5eaf3f0862f24c6f9514bafd7f5772411db73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000732173c7e5ce195736dffb1006d571da6146eb9e7b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000734b288f73c8f6a8048c79b2d3ce363dd6d12942cd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073b0865ed100d9eea9ee2cfa580062231fd8e6e84a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007309c160223939a19f537b3612848174d827eaf2a373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ede471bcc91e33a93c1bf3f9d09e2080fb5ef80a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f4d0a3b8b5e1156d9623d0c0f86287a16de0e9a173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000731689f1c198dae90c5502515a5ff5f3dbee9b702073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e7d32427c08addafd8ea862afa7af289dfa3020673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000738d8be5168c6bb3b6128f7b6d9e2fd27853d76e7373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000734d8f4f3eb162312235142ce92bfe46667574d1ad73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e24d9fe04af1db140db03678f5f8e887b824191273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ee34f5236fc104646d0b121144fb78f6f6c7421373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073c5c60585feefbe31d0ac07663005e083d8a8d06473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073d1b6af2bd8fe5665259c318d4761f917a474571273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f9435d468f3c9aeaaeae3cc53e502329b177319173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073bc9679c8191c61759eea6c47097d5abde653b00473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007336ebfc12fcd5ef71cd0815102ad7bc92685097ab73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f8599268d92667087e5ad6eaeee7b6a4bbf904f373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620029ae620029a2620029b460201b60201c565b62002a8260201b60201c565b62003bd8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600062002a9462002b0060201b60201c565b905062002aa78162002b0d60201b60201c565b1562002aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002ae190620037f0565b60405180910390fd5b62002afc828262002b7960201b60201c565b5050565b6000600880549050905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62002b9b82826040518060200160405280600081525062002b9f60201b60201c565b5050565b62002bb1838362002c0d60201b60201c565b62002bc6600084848462002df360201b60201c565b62002c08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002bff9062003768565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562002c80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002c7790620037ce565b60405180910390fd5b62002c918162002b0d60201b60201c565b1562002cd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002ccb906200378a565b60405180910390fd5b62002ce86000838362002fad60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462002d3a91906200383f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062002e218473ffffffffffffffffffffffffffffffffffffffff16620030f460201b62001b951760201c565b1562002fa0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262002e53620029b460201b60201c565b8786866040518563ffffffff1660e01b815260040162002e77949392919062003714565b602060405180830381600087803b15801562002e9257600080fd5b505af192505050801562002ec657506040513d601f19601f8201168201806040525081019062002ec39190620035bc565b60015b62002f4f573d806000811462002ef9576040519150601f19603f3d011682016040523d82523d6000602084013e62002efe565b606091505b5060008151141562002f47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002f3e9062003768565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062002fa5565b600190505b949350505050565b62002fc58383836200310760201b62001ba81760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562003012576200300c816200310c60201b60201c565b6200305a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462003059576200305883826200315560201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620030a757620030a181620032d260201b60201c565b620030ef565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620030ee57620030ed8282620033ae60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016200316f846200343a60201b62000fc61760201c565b6200317b91906200389c565b905060006007600084815260200190815260200160002054905081811462003261576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050620032e891906200389c565b90506000600960008481526020019081526020016000205490506000600883815481106200331b576200331a62003a3a565b5b90600052602060002001549050806008838154811062003340576200333f62003a3a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062003392576200339162003a0b565b5b6001900381819060005260206000200160009055905550505050565b6000620033c6836200343a60201b62000fc61760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620034ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620034a590620037ac565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b828054620035039062003977565b90600052602060002090601f01602090048101928262003527576000855562003573565b82601f106200354257805160ff191683800117855562003573565b8280016001018555821562003573579182015b828111156200357257825182559160200191906001019062003555565b5b50905062003582919062003586565b5090565b5b80821115620035a157600081600090555060010162003587565b5090565b600081519050620035b68162003bbe565b92915050565b600060208284031215620035d557620035d462003a69565b5b6000620035e584828501620035a5565b91505092915050565b620035f981620038d7565b82525050565b60006200360c8262003812565b6200361881856200381d565b93506200362a81856020860162003941565b620036358162003a6e565b840191505092915050565b60006200364f6032836200382e565b91506200365c8262003a7f565b604082019050919050565b600062003676601c836200382e565b9150620036838262003ace565b602082019050919050565b60006200369d602a836200382e565b9150620036aa8262003af7565b604082019050919050565b6000620036c46020836200382e565b9150620036d18262003b46565b602082019050919050565b6000620036eb6026836200382e565b9150620036f88262003b6f565b604082019050919050565b6200370e8162003937565b82525050565b60006080820190506200372b6000830187620035ee565b6200373a6020830186620035ee565b62003749604083018562003703565b81810360608301526200375d8184620035ff565b905095945050505050565b60006020820190508181036000830152620037838162003640565b9050919050565b60006020820190508181036000830152620037a58162003667565b9050919050565b60006020820190508181036000830152620037c7816200368e565b9050919050565b60006020820190508181036000830152620037e981620036b5565b9050919050565b600060208201905081810360008301526200380b81620036dc565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200384c8262003937565b9150620038598362003937565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620038915762003890620039ad565b5b828201905092915050565b6000620038a98262003937565b9150620038b68362003937565b925082821015620038cc57620038cb620039ad565b5b828203905092915050565b6000620038e48262003917565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200396157808201518184015260208101905062003944565b8381111562003971576000848401525b50505050565b600060028204905060018216806200399057607f821691505b60208210811415620039a757620039a6620039dc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f476f6c64656e4e465450726573616c653a20546f6b656e20616c72656164792060008201527f65786973742e0000000000000000000000000000000000000000000000000000602082015250565b62003bc981620038eb565b811462003bd557600080fd5b50565b6142298062003be86000396000f3fe6080604052600436106102035760003560e01c8063610757e411610118578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610721578063cfdb63ac1461075e578063df5739561461079b578063e985e9c5146107c6578063f2fde38b1461080357610203565b8063a22cb4651461067d578063b1bef03a146106a6578063b88d4fde146106cf578063c1f26123146106f857610203565b80638da5cb5b116100e75780638da5cb5b146105b757806395d89b41146105e25780639cf949431461060d578063a0712d6814610636578063a07c0e451461065257610203565b8063610757e4146104fb5780636352211e1461052657806370a0823114610563578063715018a6146105a057610203565b806318160ddd1161019b57806333e364cb1161016a57806333e364cb1461043c578063355274ea1461045357806342842e0e1461047e5780634f6ccce7146104a757806355367ba9146104e457610203565b806318160ddd146103805780631f9e4d49146103ab57806323b872dd146103d65780632f745c59146103ff57610203565b806306fdde03116101d757806306fdde03146102c6578063081812fc146102f1578063095ea7b31461032e5780630c82b9421461035757610203565b80628ca8161461020857806301ffc9a7146102335780630492f05514610270578063060cf4e81461029b575b600080fd5b34801561021457600080fd5b5061021d61082c565b60405161022a919061335f565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190612e60565b610843565b604051610267919061335f565b60405180910390f35b34801561027c57600080fd5b506102856108bd565b604051610292919061369c565b60405180910390f35b3480156102a757600080fd5b506102b06108c3565b6040516102bd919061369c565b60405180910390f35b3480156102d257600080fd5b506102db6108c9565b6040516102e8919061337a565b60405180910390f35b3480156102fd57600080fd5b5061031860048036038101906103139190612eba565b61095b565b60405161032591906132dd565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612dd7565b6109e0565b005b34801561036357600080fd5b5061037e60048036038101906103799190612e17565b610af8565b005b34801561038c57600080fd5b50610395610c09565b6040516103a2919061369c565b60405180910390f35b3480156103b757600080fd5b506103c0610c16565b6040516103cd919061369c565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612cc1565b610c1c565b005b34801561040b57600080fd5b5061042660048036038101906104219190612dd7565b610c7c565b604051610433919061369c565b60405180910390f35b34801561044857600080fd5b50610451610d21565b005b34801561045f57600080fd5b50610468610dba565b604051610475919061369c565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612cc1565b610dc4565b005b3480156104b357600080fd5b506104ce60048036038101906104c99190612eba565b610de4565b6040516104db919061369c565b60405180910390f35b3480156104f057600080fd5b506104f9610e55565b005b34801561050757600080fd5b50610510610eee565b60405161051d91906132f8565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190612eba565b610f14565b60405161055a91906132dd565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190612c54565b610fc6565b604051610597919061369c565b60405180910390f35b3480156105ac57600080fd5b506105b561107e565b005b3480156105c357600080fd5b506105cc611106565b6040516105d991906132dd565b60405180910390f35b3480156105ee57600080fd5b506105f7611130565b604051610604919061337a565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190612e17565b6111c2565b005b610650600480360381019061064b9190612eba565b6112d3565b005b34801561065e57600080fd5b506106676115f2565b604051610674919061369c565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612d97565b61161b565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190612c54565b61179c565b005b3480156106db57600080fd5b506106f660048036038101906106f19190612d14565b611824565b005b34801561070457600080fd5b5061071f600480360381019061071a9190612eba565b611886565b005b34801561072d57600080fd5b5061074860048036038101906107439190612eba565b6119c1565b604051610755919061337a565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190612c54565b6119e3565b604051610792919061335f565b60405180910390f35b3480156107a757600080fd5b506107b0611a03565b6040516107bd919061369c565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190612c81565b611a09565b6040516107fa919061335f565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190612c54565b611a9d565b005b6000600f60149054906101000a900460ff16905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b657506108b582611bad565b5b9050919050565b600d5481565b600c5481565b6060600080546108d89061391d565b80601f01602080910402602001604051908101604052809291908181526020018280546109049061391d565b80156109515780601f1061092657610100808354040283529160200191610951565b820191906000526020600020905b81548152906001019060200180831161093457829003601f168201915b5050505050905090565b600061096682611c8f565b6109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c9061355c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109eb82610f14565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a53906135bc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7b611cfb565b73ffffffffffffffffffffffffffffffffffffffff161480610aaa5750610aa981610aa4611cfb565b611a09565b5b610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae0906134dc565b60405180910390fd5b610af38383611d03565b505050565b610b00611cfb565b73ffffffffffffffffffffffffffffffffffffffff16610b1e611106565b73ffffffffffffffffffffffffffffffffffffffff1614610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b9061357c565b60405180910390fd5b60005b8151811015610c0557600060106000848481518110610b9957610b98613a56565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bfd90613980565b915050610b77565b5050565b6000600880549050905090565b600e5481565b610c2d610c27611cfb565b82611dbc565b610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c63906135dc565b60405180910390fd5b610c77838383611e9a565b505050565b6000610c8783610fc6565b8210610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf906133bc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d29611cfb565b73ffffffffffffffffffffffffffffffffffffffff16610d47611106565b73ffffffffffffffffffffffffffffffffffffffff1614610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d949061357c565b60405180910390fd5b6000600f60146101000a81548160ff021916908315150217905550565b6000600c54905090565b610ddf83838360405180602001604052806000815250611824565b505050565b6000610dee610c09565b8210610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e269061361c565b60405180910390fd5b60088281548110610e4357610e42613a56565b5b90600052602060002001549050919050565b610e5d611cfb565b73ffffffffffffffffffffffffffffffffffffffff16610e7b611106565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec89061357c565b60405180910390fd5b6001600f60146101000a81548160ff021916908315150217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb49061351c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e906134fc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611086611cfb565b73ffffffffffffffffffffffffffffffffffffffff166110a4611106565b73ffffffffffffffffffffffffffffffffffffffff16146110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f19061357c565b60405180910390fd5b61110460006120f6565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461113f9061391d565b80601f016020809104026020016040519081016040528092919081815260200182805461116b9061391d565b80156111b85780601f1061118d576101008083540402835291602001916111b8565b820191906000526020600020905b81548152906001019060200180831161119b57829003601f168201915b5050505050905090565b6111ca611cfb565b73ffffffffffffffffffffffffffffffffffffffff166111e8611106565b73ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112359061357c565b60405180910390fd5b60005b81518110156112cf5760016010600084848151811061126357611262613a56565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112c790613980565b915050611241565b5050565b6002600b541415611319576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113109061365c565b60405180910390fd5b6002600b8190555061132961082c565b15611369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611360906133fc565b60405180910390fd5b600081116113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a39061367c565b60405180910390fd5b600d548111156113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e89061339c565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114b5576000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011546114aa9190613771565b60118190555061154f565b6114bd6115f2565b8111156114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f6906134bc565b60405180910390fd5b3481600e5461150e91906137c7565b1461154e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115459061363c565b60405180910390fd5b5b60005b8181101561157d5761156a611565611cfb565b6121bc565b808061157590613980565b915050611552565b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156115e6573d6000803e3d6000fd5b506001600b8190555050565b60006115fc610c09565b601154600c5461160c9190613771565b6116169190613821565b905090565b611623611cfb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116889061347c565b60405180910390fd5b806005600061169e611cfb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661174b611cfb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611790919061335f565b60405180910390a35050565b6117a4611cfb565b73ffffffffffffffffffffffffffffffffffffffff166117c2611106565b73ffffffffffffffffffffffffffffffffffffffff1614611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f9061357c565b60405180910390fd5b611821816121bc565b50565b61183561182f611cfb565b83611dbc565b611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b906135dc565b60405180910390fd5b6118808484848461221f565b50505050565b61188e611cfb565b73ffffffffffffffffffffffffffffffffffffffff166118ac611106565b73ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f99061357c565b60405180910390fd5b60008111611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c9061367c565b60405180910390fd5b61194d6115f2565b81111561198f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611986906134bc565b60405180910390fd5b60005b818110156119bd576119aa6119a5611cfb565b6121bc565b80806119b590613980565b915050611992565b5050565b60606040518060600160405280603581526020016141bf603591399050919050565b60106020528060005260406000206000915054906101000a900460ff1681565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aa5611cfb565b73ffffffffffffffffffffffffffffffffffffffff16611ac3611106565b73ffffffffffffffffffffffffffffffffffffffff1614611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b109061357c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b809061341c565b60405180910390fd5b611b92816120f6565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c7857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c885750611c878261227b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d7683610f14565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dc782611c8f565b611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd9061349c565b60405180910390fd5b6000611e1183610f14565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e8057508373ffffffffffffffffffffffffffffffffffffffff16611e688461095b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e915750611e908185611a09565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eba82610f14565b73ffffffffffffffffffffffffffffffffffffffff1614611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f079061359c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f779061345c565b60405180910390fd5b611f8b8383836122e5565b611f96600082611d03565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fe69190613821565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203d9190613771565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006121c6610c09565b90506121d181611c8f565b15612211576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612208906135fc565b60405180910390fd5b61221b82826123f9565b5050565b61222a848484611e9a565b61223684848484612417565b612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c906133dc565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122f0838383611ba8565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123335761232e816125ae565b612372565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123715761237083826125f7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123b5576123b081612764565b6123f4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123f3576123f28282612835565b5b5b505050565b6124138282604051806020016040528060008152506128b4565b5050565b60006124388473ffffffffffffffffffffffffffffffffffffffff16611b95565b156125a1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612461611cfb565b8786866040518563ffffffff1660e01b81526004016124839493929190613313565b602060405180830381600087803b15801561249d57600080fd5b505af19250505080156124ce57506040513d601f19601f820116820180604052508101906124cb9190612e8d565b60015b612551573d80600081146124fe576040519150601f19603f3d011682016040523d82523d6000602084013e612503565b606091505b50600081511415612549576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612540906133dc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125a6565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161260484610fc6565b61260e9190613821565b90506000600760008481526020019081526020016000205490508181146126f3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127789190613821565b90506000600960008481526020019081526020016000205490506000600883815481106127a8576127a7613a56565b5b9060005260206000200154905080600883815481106127ca576127c9613a56565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061281957612818613a27565b5b6001900381819060005260206000200160009055905550505050565b600061284083610fc6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6128be838361290f565b6128cb6000848484612417565b61290a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612901906133dc565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129769061353c565b60405180910390fd5b61298881611c8f565b156129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf9061343c565b60405180910390fd5b6129d4600083836122e5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a249190613771565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612af0612aeb846136dc565b6136b7565b90508083825260208201905082856020860282011115612b1357612b12613ab9565b5b60005b85811015612b435781612b298882612b8f565b845260208401935060208301925050600181019050612b16565b5050509392505050565b6000612b60612b5b84613708565b6136b7565b905082815260208101848484011115612b7c57612b7b613abe565b5b612b878482856138db565b509392505050565b600081359050612b9e81614162565b92915050565b600082601f830112612bb957612bb8613ab4565b5b8135612bc9848260208601612add565b91505092915050565b600081359050612be181614179565b92915050565b600081359050612bf681614190565b92915050565b600081519050612c0b81614190565b92915050565b600082601f830112612c2657612c25613ab4565b5b8135612c36848260208601612b4d565b91505092915050565b600081359050612c4e816141a7565b92915050565b600060208284031215612c6a57612c69613ac8565b5b6000612c7884828501612b8f565b91505092915050565b60008060408385031215612c9857612c97613ac8565b5b6000612ca685828601612b8f565b9250506020612cb785828601612b8f565b9150509250929050565b600080600060608486031215612cda57612cd9613ac8565b5b6000612ce886828701612b8f565b9350506020612cf986828701612b8f565b9250506040612d0a86828701612c3f565b9150509250925092565b60008060008060808587031215612d2e57612d2d613ac8565b5b6000612d3c87828801612b8f565b9450506020612d4d87828801612b8f565b9350506040612d5e87828801612c3f565b925050606085013567ffffffffffffffff811115612d7f57612d7e613ac3565b5b612d8b87828801612c11565b91505092959194509250565b60008060408385031215612dae57612dad613ac8565b5b6000612dbc85828601612b8f565b9250506020612dcd85828601612bd2565b9150509250929050565b60008060408385031215612dee57612ded613ac8565b5b6000612dfc85828601612b8f565b9250506020612e0d85828601612c3f565b9150509250929050565b600060208284031215612e2d57612e2c613ac8565b5b600082013567ffffffffffffffff811115612e4b57612e4a613ac3565b5b612e5784828501612ba4565b91505092915050565b600060208284031215612e7657612e75613ac8565b5b6000612e8484828501612be7565b91505092915050565b600060208284031215612ea357612ea2613ac8565b5b6000612eb184828501612bfc565b91505092915050565b600060208284031215612ed057612ecf613ac8565b5b6000612ede84828501612c3f565b91505092915050565b612ef081613867565b82525050565b612eff81613855565b82525050565b612f0e81613879565b82525050565b6000612f1f82613739565b612f29818561374f565b9350612f398185602086016138ea565b612f4281613acd565b840191505092915050565b6000612f5882613744565b612f628185613760565b9350612f728185602086016138ea565b612f7b81613acd565b840191505092915050565b6000612f93603283613760565b9150612f9e82613ade565b604082019050919050565b6000612fb6602b83613760565b9150612fc182613b2d565b604082019050919050565b6000612fd9603283613760565b9150612fe482613b7c565b604082019050919050565b6000612ffc602083613760565b915061300782613bcb565b602082019050919050565b600061301f602683613760565b915061302a82613bf4565b604082019050919050565b6000613042601c83613760565b915061304d82613c43565b602082019050919050565b6000613065602483613760565b915061307082613c6c565b604082019050919050565b6000613088601983613760565b915061309382613cbb565b602082019050919050565b60006130ab602c83613760565b91506130b682613ce4565b604082019050919050565b60006130ce602b83613760565b91506130d982613d33565b604082019050919050565b60006130f1603883613760565b91506130fc82613d82565b604082019050919050565b6000613114602a83613760565b915061311f82613dd1565b604082019050919050565b6000613137602983613760565b915061314282613e20565b604082019050919050565b600061315a602083613760565b915061316582613e6f565b602082019050919050565b600061317d602c83613760565b915061318882613e98565b604082019050919050565b60006131a0602083613760565b91506131ab82613ee7565b602082019050919050565b60006131c3602983613760565b91506131ce82613f10565b604082019050919050565b60006131e6602183613760565b91506131f182613f5f565b604082019050919050565b6000613209603183613760565b915061321482613fae565b604082019050919050565b600061322c602683613760565b915061323782613ffd565b604082019050919050565b600061324f602c83613760565b915061325a8261404c565b604082019050919050565b6000613272602b83613760565b915061327d8261409b565b604082019050919050565b6000613295601f83613760565b91506132a0826140ea565b602082019050919050565b60006132b8602483613760565b91506132c382614113565b604082019050919050565b6132d7816138d1565b82525050565b60006020820190506132f26000830184612ef6565b92915050565b600060208201905061330d6000830184612ee7565b92915050565b60006080820190506133286000830187612ef6565b6133356020830186612ef6565b61334260408301856132ce565b81810360608301526133548184612f14565b905095945050505050565b60006020820190506133746000830184612f05565b92915050565b600060208201905081810360008301526133948184612f4d565b905092915050565b600060208201905081810360008301526133b581612f86565b9050919050565b600060208201905081810360008301526133d581612fa9565b9050919050565b600060208201905081810360008301526133f581612fcc565b9050919050565b6000602082019050818103600083015261341581612fef565b9050919050565b6000602082019050818103600083015261343581613012565b9050919050565b6000602082019050818103600083015261345581613035565b9050919050565b6000602082019050818103600083015261347581613058565b9050919050565b600060208201905081810360008301526134958161307b565b9050919050565b600060208201905081810360008301526134b58161309e565b9050919050565b600060208201905081810360008301526134d5816130c1565b9050919050565b600060208201905081810360008301526134f5816130e4565b9050919050565b6000602082019050818103600083015261351581613107565b9050919050565b600060208201905081810360008301526135358161312a565b9050919050565b600060208201905081810360008301526135558161314d565b9050919050565b6000602082019050818103600083015261357581613170565b9050919050565b6000602082019050818103600083015261359581613193565b9050919050565b600060208201905081810360008301526135b5816131b6565b9050919050565b600060208201905081810360008301526135d5816131d9565b9050919050565b600060208201905081810360008301526135f5816131fc565b9050919050565b600060208201905081810360008301526136158161321f565b9050919050565b6000602082019050818103600083015261363581613242565b9050919050565b6000602082019050818103600083015261365581613265565b9050919050565b6000602082019050818103600083015261367581613288565b9050919050565b60006020820190508181036000830152613695816132ab565b9050919050565b60006020820190506136b160008301846132ce565b92915050565b60006136c16136d2565b90506136cd828261394f565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f7576136f6613a85565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561372357613722613a85565b5b61372c82613acd565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061377c826138d1565b9150613787836138d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137bc576137bb6139c9565b5b828201905092915050565b60006137d2826138d1565b91506137dd836138d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613816576138156139c9565b5b828202905092915050565b600061382c826138d1565b9150613837836138d1565b92508282101561384a576138496139c9565b5b828203905092915050565b6000613860826138b1565b9050919050565b6000613872826138b1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139085780820151818401526020810190506138ed565b83811115613917576000848401525b50505050565b6000600282049050600182168061393557607f821691505b60208210811415613949576139486139f8565b5b50919050565b61395882613acd565b810181811067ffffffffffffffff8211171561397757613976613a85565b5b80604052505050565b600061398b826138d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139be576139bd6139c9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f476f6c64656e4e465450726573616c653a20697473206e6f7420616c6c6f776560008201527f6420746f206275792074686973206d7563680000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f476f6c64656e4e465450726573616c653a2073616c6520697320706175736564600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f476f6c64656e4e465450726573616c653a206e6f7420656e6f756768204e465460008201527f7320617661696c61626c65000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f476f6c64656e4e465450726573616c653a20546f6b656e20616c72656164792060008201527f65786973742e0000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f476f6c64656e4e465450726573616c653a2065786163742076616c756520696e60008201527f20455448206e6565646564000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f476f6c64656e4e465450726573616c653a20627579206174206c65617374203160008201527f204e465400000000000000000000000000000000000000000000000000000000602082015250565b61416b81613855565b811461417657600080fd5b50565b61418281613879565b811461418d57600080fd5b50565b61419981613885565b81146141a457600080fd5b50565b6141b0816138d1565b81146141bb57600080fd5b5056fe697066733a2f2f516d66373966437a5175347376665a7578473547426e57644771595a586a33676752615868774a555277366e6b45a26469706673582212203727423beb736e7d2c2ae1b35b999e8655d6d8a525ed6818c476a44c57b9fb1464736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102035760003560e01c8063610757e411610118578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd14610721578063cfdb63ac1461075e578063df5739561461079b578063e985e9c5146107c6578063f2fde38b1461080357610203565b8063a22cb4651461067d578063b1bef03a146106a6578063b88d4fde146106cf578063c1f26123146106f857610203565b80638da5cb5b116100e75780638da5cb5b146105b757806395d89b41146105e25780639cf949431461060d578063a0712d6814610636578063a07c0e451461065257610203565b8063610757e4146104fb5780636352211e1461052657806370a0823114610563578063715018a6146105a057610203565b806318160ddd1161019b57806333e364cb1161016a57806333e364cb1461043c578063355274ea1461045357806342842e0e1461047e5780634f6ccce7146104a757806355367ba9146104e457610203565b806318160ddd146103805780631f9e4d49146103ab57806323b872dd146103d65780632f745c59146103ff57610203565b806306fdde03116101d757806306fdde03146102c6578063081812fc146102f1578063095ea7b31461032e5780630c82b9421461035757610203565b80628ca8161461020857806301ffc9a7146102335780630492f05514610270578063060cf4e81461029b575b600080fd5b34801561021457600080fd5b5061021d61082c565b60405161022a919061335f565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190612e60565b610843565b604051610267919061335f565b60405180910390f35b34801561027c57600080fd5b506102856108bd565b604051610292919061369c565b60405180910390f35b3480156102a757600080fd5b506102b06108c3565b6040516102bd919061369c565b60405180910390f35b3480156102d257600080fd5b506102db6108c9565b6040516102e8919061337a565b60405180910390f35b3480156102fd57600080fd5b5061031860048036038101906103139190612eba565b61095b565b60405161032591906132dd565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612dd7565b6109e0565b005b34801561036357600080fd5b5061037e60048036038101906103799190612e17565b610af8565b005b34801561038c57600080fd5b50610395610c09565b6040516103a2919061369c565b60405180910390f35b3480156103b757600080fd5b506103c0610c16565b6040516103cd919061369c565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612cc1565b610c1c565b005b34801561040b57600080fd5b5061042660048036038101906104219190612dd7565b610c7c565b604051610433919061369c565b60405180910390f35b34801561044857600080fd5b50610451610d21565b005b34801561045f57600080fd5b50610468610dba565b604051610475919061369c565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190612cc1565b610dc4565b005b3480156104b357600080fd5b506104ce60048036038101906104c99190612eba565b610de4565b6040516104db919061369c565b60405180910390f35b3480156104f057600080fd5b506104f9610e55565b005b34801561050757600080fd5b50610510610eee565b60405161051d91906132f8565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190612eba565b610f14565b60405161055a91906132dd565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190612c54565b610fc6565b604051610597919061369c565b60405180910390f35b3480156105ac57600080fd5b506105b561107e565b005b3480156105c357600080fd5b506105cc611106565b6040516105d991906132dd565b60405180910390f35b3480156105ee57600080fd5b506105f7611130565b604051610604919061337a565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f9190612e17565b6111c2565b005b610650600480360381019061064b9190612eba565b6112d3565b005b34801561065e57600080fd5b506106676115f2565b604051610674919061369c565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612d97565b61161b565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190612c54565b61179c565b005b3480156106db57600080fd5b506106f660048036038101906106f19190612d14565b611824565b005b34801561070457600080fd5b5061071f600480360381019061071a9190612eba565b611886565b005b34801561072d57600080fd5b5061074860048036038101906107439190612eba565b6119c1565b604051610755919061337a565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190612c54565b6119e3565b604051610792919061335f565b60405180910390f35b3480156107a757600080fd5b506107b0611a03565b6040516107bd919061369c565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190612c81565b611a09565b6040516107fa919061335f565b60405180910390f35b34801561080f57600080fd5b5061082a60048036038101906108259190612c54565b611a9d565b005b6000600f60149054906101000a900460ff16905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b657506108b582611bad565b5b9050919050565b600d5481565b600c5481565b6060600080546108d89061391d565b80601f01602080910402602001604051908101604052809291908181526020018280546109049061391d565b80156109515780601f1061092657610100808354040283529160200191610951565b820191906000526020600020905b81548152906001019060200180831161093457829003601f168201915b5050505050905090565b600061096682611c8f565b6109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c9061355c565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109eb82610f14565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a53906135bc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7b611cfb565b73ffffffffffffffffffffffffffffffffffffffff161480610aaa5750610aa981610aa4611cfb565b611a09565b5b610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae0906134dc565b60405180910390fd5b610af38383611d03565b505050565b610b00611cfb565b73ffffffffffffffffffffffffffffffffffffffff16610b1e611106565b73ffffffffffffffffffffffffffffffffffffffff1614610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b9061357c565b60405180910390fd5b60005b8151811015610c0557600060106000848481518110610b9957610b98613a56565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bfd90613980565b915050610b77565b5050565b6000600880549050905090565b600e5481565b610c2d610c27611cfb565b82611dbc565b610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c63906135dc565b60405180910390fd5b610c77838383611e9a565b505050565b6000610c8783610fc6565b8210610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf906133bc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d29611cfb565b73ffffffffffffffffffffffffffffffffffffffff16610d47611106565b73ffffffffffffffffffffffffffffffffffffffff1614610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d949061357c565b60405180910390fd5b6000600f60146101000a81548160ff021916908315150217905550565b6000600c54905090565b610ddf83838360405180602001604052806000815250611824565b505050565b6000610dee610c09565b8210610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e269061361c565b60405180910390fd5b60088281548110610e4357610e42613a56565b5b90600052602060002001549050919050565b610e5d611cfb565b73ffffffffffffffffffffffffffffffffffffffff16610e7b611106565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec89061357c565b60405180910390fd5b6001600f60146101000a81548160ff021916908315150217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb49061351c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e906134fc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611086611cfb565b73ffffffffffffffffffffffffffffffffffffffff166110a4611106565b73ffffffffffffffffffffffffffffffffffffffff16146110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f19061357c565b60405180910390fd5b61110460006120f6565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461113f9061391d565b80601f016020809104026020016040519081016040528092919081815260200182805461116b9061391d565b80156111b85780601f1061118d576101008083540402835291602001916111b8565b820191906000526020600020905b81548152906001019060200180831161119b57829003601f168201915b5050505050905090565b6111ca611cfb565b73ffffffffffffffffffffffffffffffffffffffff166111e8611106565b73ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112359061357c565b60405180910390fd5b60005b81518110156112cf5760016010600084848151811061126357611262613a56565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112c790613980565b915050611241565b5050565b6002600b541415611319576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113109061365c565b60405180910390fd5b6002600b8190555061132961082c565b15611369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611360906133fc565b60405180910390fd5b600081116113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a39061367c565b60405180910390fd5b600d548111156113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e89061339c565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114b5576000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011546114aa9190613771565b60118190555061154f565b6114bd6115f2565b8111156114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f6906134bc565b60405180910390fd5b3481600e5461150e91906137c7565b1461154e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115459061363c565b60405180910390fd5b5b60005b8181101561157d5761156a611565611cfb565b6121bc565b808061157590613980565b915050611552565b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156115e6573d6000803e3d6000fd5b506001600b8190555050565b60006115fc610c09565b601154600c5461160c9190613771565b6116169190613821565b905090565b611623611cfb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116889061347c565b60405180910390fd5b806005600061169e611cfb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661174b611cfb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611790919061335f565b60405180910390a35050565b6117a4611cfb565b73ffffffffffffffffffffffffffffffffffffffff166117c2611106565b73ffffffffffffffffffffffffffffffffffffffff1614611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f9061357c565b60405180910390fd5b611821816121bc565b50565b61183561182f611cfb565b83611dbc565b611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b906135dc565b60405180910390fd5b6118808484848461221f565b50505050565b61188e611cfb565b73ffffffffffffffffffffffffffffffffffffffff166118ac611106565b73ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f99061357c565b60405180910390fd5b60008111611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c9061367c565b60405180910390fd5b61194d6115f2565b81111561198f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611986906134bc565b60405180910390fd5b60005b818110156119bd576119aa6119a5611cfb565b6121bc565b80806119b590613980565b915050611992565b5050565b60606040518060600160405280603581526020016141bf603591399050919050565b60106020528060005260406000206000915054906101000a900460ff1681565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aa5611cfb565b73ffffffffffffffffffffffffffffffffffffffff16611ac3611106565b73ffffffffffffffffffffffffffffffffffffffff1614611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b109061357c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b809061341c565b60405180910390fd5b611b92816120f6565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c7857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c885750611c878261227b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d7683610f14565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dc782611c8f565b611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd9061349c565b60405180910390fd5b6000611e1183610f14565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e8057508373ffffffffffffffffffffffffffffffffffffffff16611e688461095b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e915750611e908185611a09565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eba82610f14565b73ffffffffffffffffffffffffffffffffffffffff1614611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f079061359c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f779061345c565b60405180910390fd5b611f8b8383836122e5565b611f96600082611d03565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fe69190613821565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203d9190613771565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006121c6610c09565b90506121d181611c8f565b15612211576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612208906135fc565b60405180910390fd5b61221b82826123f9565b5050565b61222a848484611e9a565b61223684848484612417565b612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c906133dc565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6122f0838383611ba8565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123335761232e816125ae565b612372565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123715761237083826125f7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123b5576123b081612764565b6123f4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123f3576123f28282612835565b5b5b505050565b6124138282604051806020016040528060008152506128b4565b5050565b60006124388473ffffffffffffffffffffffffffffffffffffffff16611b95565b156125a1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612461611cfb565b8786866040518563ffffffff1660e01b81526004016124839493929190613313565b602060405180830381600087803b15801561249d57600080fd5b505af19250505080156124ce57506040513d601f19601f820116820180604052508101906124cb9190612e8d565b60015b612551573d80600081146124fe576040519150601f19603f3d011682016040523d82523d6000602084013e612503565b606091505b50600081511415612549576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612540906133dc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125a6565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161260484610fc6565b61260e9190613821565b90506000600760008481526020019081526020016000205490508181146126f3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127789190613821565b90506000600960008481526020019081526020016000205490506000600883815481106127a8576127a7613a56565b5b9060005260206000200154905080600883815481106127ca576127c9613a56565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061281957612818613a27565b5b6001900381819060005260206000200160009055905550505050565b600061284083610fc6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6128be838361290f565b6128cb6000848484612417565b61290a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612901906133dc565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561297f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129769061353c565b60405180910390fd5b61298881611c8f565b156129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf9061343c565b60405180910390fd5b6129d4600083836122e5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a249190613771565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612af0612aeb846136dc565b6136b7565b90508083825260208201905082856020860282011115612b1357612b12613ab9565b5b60005b85811015612b435781612b298882612b8f565b845260208401935060208301925050600181019050612b16565b5050509392505050565b6000612b60612b5b84613708565b6136b7565b905082815260208101848484011115612b7c57612b7b613abe565b5b612b878482856138db565b509392505050565b600081359050612b9e81614162565b92915050565b600082601f830112612bb957612bb8613ab4565b5b8135612bc9848260208601612add565b91505092915050565b600081359050612be181614179565b92915050565b600081359050612bf681614190565b92915050565b600081519050612c0b81614190565b92915050565b600082601f830112612c2657612c25613ab4565b5b8135612c36848260208601612b4d565b91505092915050565b600081359050612c4e816141a7565b92915050565b600060208284031215612c6a57612c69613ac8565b5b6000612c7884828501612b8f565b91505092915050565b60008060408385031215612c9857612c97613ac8565b5b6000612ca685828601612b8f565b9250506020612cb785828601612b8f565b9150509250929050565b600080600060608486031215612cda57612cd9613ac8565b5b6000612ce886828701612b8f565b9350506020612cf986828701612b8f565b9250506040612d0a86828701612c3f565b9150509250925092565b60008060008060808587031215612d2e57612d2d613ac8565b5b6000612d3c87828801612b8f565b9450506020612d4d87828801612b8f565b9350506040612d5e87828801612c3f565b925050606085013567ffffffffffffffff811115612d7f57612d7e613ac3565b5b612d8b87828801612c11565b91505092959194509250565b60008060408385031215612dae57612dad613ac8565b5b6000612dbc85828601612b8f565b9250506020612dcd85828601612bd2565b9150509250929050565b60008060408385031215612dee57612ded613ac8565b5b6000612dfc85828601612b8f565b9250506020612e0d85828601612c3f565b9150509250929050565b600060208284031215612e2d57612e2c613ac8565b5b600082013567ffffffffffffffff811115612e4b57612e4a613ac3565b5b612e5784828501612ba4565b91505092915050565b600060208284031215612e7657612e75613ac8565b5b6000612e8484828501612be7565b91505092915050565b600060208284031215612ea357612ea2613ac8565b5b6000612eb184828501612bfc565b91505092915050565b600060208284031215612ed057612ecf613ac8565b5b6000612ede84828501612c3f565b91505092915050565b612ef081613867565b82525050565b612eff81613855565b82525050565b612f0e81613879565b82525050565b6000612f1f82613739565b612f29818561374f565b9350612f398185602086016138ea565b612f4281613acd565b840191505092915050565b6000612f5882613744565b612f628185613760565b9350612f728185602086016138ea565b612f7b81613acd565b840191505092915050565b6000612f93603283613760565b9150612f9e82613ade565b604082019050919050565b6000612fb6602b83613760565b9150612fc182613b2d565b604082019050919050565b6000612fd9603283613760565b9150612fe482613b7c565b604082019050919050565b6000612ffc602083613760565b915061300782613bcb565b602082019050919050565b600061301f602683613760565b915061302a82613bf4565b604082019050919050565b6000613042601c83613760565b915061304d82613c43565b602082019050919050565b6000613065602483613760565b915061307082613c6c565b604082019050919050565b6000613088601983613760565b915061309382613cbb565b602082019050919050565b60006130ab602c83613760565b91506130b682613ce4565b604082019050919050565b60006130ce602b83613760565b91506130d982613d33565b604082019050919050565b60006130f1603883613760565b91506130fc82613d82565b604082019050919050565b6000613114602a83613760565b915061311f82613dd1565b604082019050919050565b6000613137602983613760565b915061314282613e20565b604082019050919050565b600061315a602083613760565b915061316582613e6f565b602082019050919050565b600061317d602c83613760565b915061318882613e98565b604082019050919050565b60006131a0602083613760565b91506131ab82613ee7565b602082019050919050565b60006131c3602983613760565b91506131ce82613f10565b604082019050919050565b60006131e6602183613760565b91506131f182613f5f565b604082019050919050565b6000613209603183613760565b915061321482613fae565b604082019050919050565b600061322c602683613760565b915061323782613ffd565b604082019050919050565b600061324f602c83613760565b915061325a8261404c565b604082019050919050565b6000613272602b83613760565b915061327d8261409b565b604082019050919050565b6000613295601f83613760565b91506132a0826140ea565b602082019050919050565b60006132b8602483613760565b91506132c382614113565b604082019050919050565b6132d7816138d1565b82525050565b60006020820190506132f26000830184612ef6565b92915050565b600060208201905061330d6000830184612ee7565b92915050565b60006080820190506133286000830187612ef6565b6133356020830186612ef6565b61334260408301856132ce565b81810360608301526133548184612f14565b905095945050505050565b60006020820190506133746000830184612f05565b92915050565b600060208201905081810360008301526133948184612f4d565b905092915050565b600060208201905081810360008301526133b581612f86565b9050919050565b600060208201905081810360008301526133d581612fa9565b9050919050565b600060208201905081810360008301526133f581612fcc565b9050919050565b6000602082019050818103600083015261341581612fef565b9050919050565b6000602082019050818103600083015261343581613012565b9050919050565b6000602082019050818103600083015261345581613035565b9050919050565b6000602082019050818103600083015261347581613058565b9050919050565b600060208201905081810360008301526134958161307b565b9050919050565b600060208201905081810360008301526134b58161309e565b9050919050565b600060208201905081810360008301526134d5816130c1565b9050919050565b600060208201905081810360008301526134f5816130e4565b9050919050565b6000602082019050818103600083015261351581613107565b9050919050565b600060208201905081810360008301526135358161312a565b9050919050565b600060208201905081810360008301526135558161314d565b9050919050565b6000602082019050818103600083015261357581613170565b9050919050565b6000602082019050818103600083015261359581613193565b9050919050565b600060208201905081810360008301526135b5816131b6565b9050919050565b600060208201905081810360008301526135d5816131d9565b9050919050565b600060208201905081810360008301526135f5816131fc565b9050919050565b600060208201905081810360008301526136158161321f565b9050919050565b6000602082019050818103600083015261363581613242565b9050919050565b6000602082019050818103600083015261365581613265565b9050919050565b6000602082019050818103600083015261367581613288565b9050919050565b60006020820190508181036000830152613695816132ab565b9050919050565b60006020820190506136b160008301846132ce565b92915050565b60006136c16136d2565b90506136cd828261394f565b919050565b6000604051905090565b600067ffffffffffffffff8211156136f7576136f6613a85565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561372357613722613a85565b5b61372c82613acd565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061377c826138d1565b9150613787836138d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137bc576137bb6139c9565b5b828201905092915050565b60006137d2826138d1565b91506137dd836138d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613816576138156139c9565b5b828202905092915050565b600061382c826138d1565b9150613837836138d1565b92508282101561384a576138496139c9565b5b828203905092915050565b6000613860826138b1565b9050919050565b6000613872826138b1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139085780820151818401526020810190506138ed565b83811115613917576000848401525b50505050565b6000600282049050600182168061393557607f821691505b60208210811415613949576139486139f8565b5b50919050565b61395882613acd565b810181811067ffffffffffffffff8211171561397757613976613a85565b5b80604052505050565b600061398b826138d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139be576139bd6139c9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f476f6c64656e4e465450726573616c653a20697473206e6f7420616c6c6f776560008201527f6420746f206275792074686973206d7563680000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f476f6c64656e4e465450726573616c653a2073616c6520697320706175736564600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f476f6c64656e4e465450726573616c653a206e6f7420656e6f756768204e465460008201527f7320617661696c61626c65000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f476f6c64656e4e465450726573616c653a20546f6b656e20616c72656164792060008201527f65786973742e0000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f476f6c64656e4e465450726573616c653a2065786163742076616c756520696e60008201527f20455448206e6565646564000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f476f6c64656e4e465450726573616c653a20627579206174206c65617374203160008201527f204e465400000000000000000000000000000000000000000000000000000000602082015250565b61416b81613855565b811461417657600080fd5b50565b61418281613879565b811461418d57600080fd5b50565b61419981613885565b81146141a457600080fd5b50565b6141b0816138d1565b81146141bb57600080fd5b5056fe697066733a2f2f516d66373966437a5175347376665a7578473547426e57644771595a586a33676752615868774a555277366e6b45a26469706673582212203727423beb736e7d2c2ae1b35b999e8655d6d8a525ed6818c476a44c57b9fb1464736f6c63430008070033
Deployed Bytecode Sourcemap
40841:10010:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49343:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34693:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40953:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40922:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22906:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24465:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23988:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49802:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35333:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40992:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25355:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35001:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49529:81;;;;;;;;;;;;;:::i;:::-;;49261:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25765:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35523:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49442:79;;;;;;;;;;;;;:::i;:::-;;41039:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22600:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22330:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20369:94;;;;;;;;;;;;;:::i;:::-;;19718:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23075:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49618:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48247:876;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49133:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24758:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50332:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26021:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49990:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50687:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41121:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41170:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25124:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20618:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49343:89;49387:4;49411:13;;;;;;;;;;;49404:20;;49343:89;:::o;34693:224::-;34795:4;34834:35;34819:50;;;:11;:50;;;;:90;;;;34873:36;34897:11;34873:23;:36::i;:::-;34819:90;34812:97;;34693:224;;;:::o;40953:32::-;;;;:::o;40922:24::-;;;;:::o;22906:100::-;22960:13;22993:5;22986:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22906:100;:::o;24465:221::-;24541:7;24569:16;24577:7;24569;:16::i;:::-;24561:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24654:15;:24;24670:7;24654:24;;;;;;;;;;;;;;;;;;;;;24647:31;;24465:221;;;:::o;23988:411::-;24069:13;24085:23;24100:7;24085:14;:23::i;:::-;24069:39;;24133:5;24127:11;;:2;:11;;;;24119:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24227:5;24211:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24236:37;24253:5;24260:12;:10;:12::i;:::-;24236:16;:37::i;:::-;24211:62;24189:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24370:21;24379:2;24383:7;24370:8;:21::i;:::-;24058:341;23988:411;;:::o;49802:180::-;19949:12;:10;:12::i;:::-;19938:23;;:7;:5;:7::i;:::-;:23;;;19930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49885:6:::1;49880:95;49901:5;:12;49897:1;:16;49880:95;;;49958:5;49935:10;:20;49946:5;49952:1;49946:8;;;;;;;;:::i;:::-;;;;;;;;49935:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;49915:3;;;;;:::i;:::-;;;;49880:95;;;;49802:180:::0;:::o;35333:113::-;35394:7;35421:10;:17;;;;35414:24;;35333:113;:::o;40992:40::-;;;;:::o;25355:339::-;25550:41;25569:12;:10;:12::i;:::-;25583:7;25550:18;:41::i;:::-;25542:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25658:28;25668:4;25674:2;25678:7;25658:9;:28::i;:::-;25355:339;;;:::o;35001:256::-;35098:7;35134:23;35151:5;35134:16;:23::i;:::-;35126:5;:31;35118:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35223:12;:19;35236:5;35223:19;;;;;;;;;;;;;;;:26;35243:5;35223:26;;;;;;;;;;;;35216:33;;35001:256;;;;:::o;49529:81::-;19949:12;:10;:12::i;:::-;19938:23;;:7;:5;:7::i;:::-;:23;;;19930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49597:5:::1;49581:13;;:21;;;;;;;;;;;;;;;;;;49529:81::o:0;49261:74::-;49296:7;49323:4;;49316:11;;49261:74;:::o;25765:185::-;25903:39;25920:4;25926:2;25930:7;25903:39;;;;;;;;;;;;:16;:39::i;:::-;25765:185;;;:::o;35523:233::-;35598:7;35634:30;:28;:30::i;:::-;35626:5;:38;35618:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35731:10;35742:5;35731:17;;;;;;;;:::i;:::-;;;;;;;;;;35724:24;;35523:233;;;:::o;49442:79::-;19949:12;:10;:12::i;:::-;19938:23;;:7;:5;:7::i;:::-;:23;;;19930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49509:4:::1;49493:13;;:20;;;;;;;;;;;;;;;;;;49442:79::o:0;41039:30::-;;;;;;;;;;;;;:::o;22600:239::-;22672:7;22692:13;22708:7;:16;22716:7;22708:16;;;;;;;;;;;;;;;;;;;;;22692:32;;22760:1;22743:19;;:5;:19;;;;22735:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22826:5;22819:12;;;22600:239;;;:::o;22330:208::-;22402:7;22447:1;22430:19;;:5;:19;;;;22422:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22514:9;:16;22524:5;22514:16;;;;;;;;;;;;;;;;22507:23;;22330:208;;;:::o;20369:94::-;19949:12;:10;:12::i;:::-;19938:23;;:7;:5;:7::i;:::-;:23;;;19930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20434:21:::1;20452:1;20434:9;:21::i;:::-;20369:94::o:0;19718:87::-;19764:7;19791:6;;;;;;;;;;;19784:13;;19718:87;:::o;23075:104::-;23131:13;23164:7;23157:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23075:104;:::o;49618:176::-;19949:12;:10;:12::i;:::-;19938:23;;:7;:5;:7::i;:::-;:23;;;19930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49698:6:::1;49693:94;49714:5;:12;49710:1;:16;49693:94;;;49771:4;49748:10;:20;49759:5;49765:1;49759:8;;;;;;;;:::i;:::-;;;;;;;;49748:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;49728:3;;;;;:::i;:::-;;;;49693:94;;;;49618:176:::0;:::o;48247:876::-;16152:1;16748:7;;:19;;16740:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16152:1;16881:7;:18;;;;48329:14:::1;:12;:14::i;:::-;48328:15;48320:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;48412:1;48399:10;:14;48391:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;48487:13;;48473:10;:27;;48465:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;48597:10;:22;48608:10;48597:22;;;;;;;;;;;;;;;;;;;;;;;;;48594:371;;;48661:5;48636:10;:22;48647:10;48636:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;48721:1;48701:17;;:21;;;;:::i;:::-;48681:17;:41;;;;48594:371;;;48777:15;:13;:15::i;:::-;48763:10;:29;;48755:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;48896:9;48881:10;48864:14;;:27;;;;:::i;:::-;48863:42;48855:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;48594:371;48982:9;48977:92;49001:10;48997:1;:14;48977:92;;;49033:24;49044:12;:10;:12::i;:::-;49033:10;:24::i;:::-;49013:3;;;;;:::i;:::-;;;;48977:92;;;;49087:7;;;;;;;;;;;49079:25;;:36;49105:9;49079:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;16108:1:::0;17060:7;:22;;;;48247:876;:::o;49133:120::-;49178:7;49232:13;:11;:13::i;:::-;49212:17;;49205:4;;:24;;;;:::i;:::-;:40;;;;:::i;:::-;49198:47;;49133:120;:::o;24758:295::-;24873:12;:10;:12::i;:::-;24861:24;;:8;:24;;;;24853:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24973:8;24928:18;:32;24947:12;:10;:12::i;:::-;24928:32;;;;;;;;;;;;;;;:42;24961:8;24928:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25026:8;24997:48;;25012:12;:10;:12::i;:::-;24997:48;;;25036:8;24997:48;;;;;;:::i;:::-;;;;;;;;24758:295;;:::o;50332:95::-;19949:12;:10;:12::i;:::-;19938:23;;:7;:5;:7::i;:::-;:23;;;19930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50399:20:::1;50410:8;50399:10;:20::i;:::-;50332:95:::0;:::o;26021:328::-;26196:41;26215:12;:10;:12::i;:::-;26229:7;26196:18;:41::i;:::-;26188:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26302:39;26316:4;26322:2;26326:7;26335:5;26302:13;:39::i;:::-;26021:328;;;;:::o;49990:336::-;19949:12;:10;:12::i;:::-;19938:23;;:7;:5;:7::i;:::-;:23;;;19930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50078:1:::1;50065:10;:14;50057:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;50153:15;:13;:15::i;:::-;50139:10;:29;;50131:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;50232:9;50227:92;50251:10;50247:1;:14;50227:92;;;50283:24;50294:12;:10;:12::i;:::-;50283:10;:24::i;:::-;50263:3;;;;;:::i;:::-;;;;50227:92;;;;49990:336:::0;:::o;50687:161::-;50752:13;50778:62;;;;;;;;;;;;;;;;;;;50687:161;;;:::o;41121:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;41170:36::-;;;;:::o;25124:164::-;25221:4;25245:18;:25;25264:5;25245:25;;;;;;;;;;;;;;;:35;25271:8;25245:35;;;;;;;;;;;;;;;;;;;;;;;;;25238:42;;25124:164;;;;:::o;20618:192::-;19949:12;:10;:12::i;:::-;19938:23;;:7;:5;:7::i;:::-;:23;;;19930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20727:1:::1;20707:22;;:8;:22;;;;20699:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20783:19;20793:8;20783:9;:19::i;:::-;20618:192:::0;:::o;7690:387::-;7750:4;7958:12;8025:7;8013:20;8005:28;;8068:1;8061:4;:8;8054:15;;;7690:387;;;:::o;33951:126::-;;;;:::o;21973:293::-;22075:4;22123:25;22108:40;;;:11;:40;;;;:101;;;;22176:33;22161:48;;;:11;:48;;;;22108:101;:150;;;;22222:36;22246:11;22222:23;:36::i;:::-;22108:150;22092:166;;21973:293;;;:::o;27859:127::-;27924:4;27976:1;27948:30;;:7;:16;27956:7;27948:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27941:37;;27859:127;;;:::o;15054:98::-;15107:7;15134:10;15127:17;;15054:98;:::o;31841:174::-;31943:2;31916:15;:24;31932:7;31916:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31999:7;31995:2;31961:46;;31970:23;31985:7;31970:14;:23::i;:::-;31961:46;;;;;;;;;;;;31841:174;;:::o;28153:348::-;28246:4;28271:16;28279:7;28271;:16::i;:::-;28263:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28347:13;28363:23;28378:7;28363:14;:23::i;:::-;28347:39;;28416:5;28405:16;;:7;:16;;;:51;;;;28449:7;28425:31;;:20;28437:7;28425:11;:20::i;:::-;:31;;;28405:51;:87;;;;28460:32;28477:5;28484:7;28460:16;:32::i;:::-;28405:87;28397:96;;;28153:348;;;;:::o;31145:578::-;31304:4;31277:31;;:23;31292:7;31277:14;:23::i;:::-;:31;;;31269:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31387:1;31373:16;;:2;:16;;;;31365:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31443:39;31464:4;31470:2;31474:7;31443:20;:39::i;:::-;31547:29;31564:1;31568:7;31547:8;:29::i;:::-;31608:1;31589:9;:15;31599:4;31589:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31637:1;31620:9;:13;31630:2;31620:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31668:2;31649:7;:16;31657:7;31649:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31707:7;31703:2;31688:27;;31697:4;31688:27;;;;;;;;;;;;31145:578;;;:::o;20818:173::-;20874:16;20893:6;;;;;;;;;;;20874:25;;20919:8;20910:6;;:17;;;;;;;;;;;;;;;;;;20974:8;20943:40;;20964:8;20943:40;;;;;;;;;;;;20863:128;20818:173;:::o;50435:244::-;50503:18;50524:13;:11;:13::i;:::-;50503:34;;50557:19;50565:10;50557:7;:19::i;:::-;50556:20;50548:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50630:41;50640:18;50660:10;50630:9;:41::i;:::-;50492:187;50435:244;:::o;27231:315::-;27388:28;27398:4;27404:2;27408:7;27388:9;:28::i;:::-;27435:48;27458:4;27464:2;27468:7;27477:5;27435:22;:48::i;:::-;27427:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27231:315;;;;:::o;19151:157::-;19236:4;19275:25;19260:40;;;:11;:40;;;;19253:47;;19151:157;;;:::o;36369:589::-;36513:45;36540:4;36546:2;36550:7;36513:26;:45::i;:::-;36591:1;36575:18;;:4;:18;;;36571:187;;;36610:40;36642:7;36610:31;:40::i;:::-;36571:187;;;36680:2;36672:10;;:4;:10;;;36668:90;;36699:47;36732:4;36738:7;36699:32;:47::i;:::-;36668:90;36571:187;36786:1;36772:16;;:2;:16;;;36768:183;;;36805:45;36842:7;36805:36;:45::i;:::-;36768:183;;;36878:4;36872:10;;:2;:10;;;36868:83;;36899:40;36927:2;36931:7;36899:27;:40::i;:::-;36868:83;36768:183;36369:589;;;:::o;28843:110::-;28919:26;28929:2;28933:7;28919:26;;;;;;;;;;;;:9;:26::i;:::-;28843:110;;:::o;32580:799::-;32735:4;32756:15;:2;:13;;;:15::i;:::-;32752:620;;;32808:2;32792:36;;;32829:12;:10;:12::i;:::-;32843:4;32849:7;32858:5;32792:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32788:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33051:1;33034:6;:13;:18;33030:272;;;33077:60;;;;;;;;;;:::i;:::-;;;;;;;;33030:272;33252:6;33246:13;33237:6;33233:2;33229:15;33222:38;32788:529;32925:41;;;32915:51;;;:6;:51;;;;32908:58;;;;;32752:620;33356:4;33349:11;;32580:799;;;;;;;:::o;37681:164::-;37785:10;:17;;;;37758:15;:24;37774:7;37758:24;;;;;;;;;;;:44;;;;37813:10;37829:7;37813:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37681:164;:::o;38472:988::-;38738:22;38788:1;38763:22;38780:4;38763:16;:22::i;:::-;:26;;;;:::i;:::-;38738:51;;38800:18;38821:17;:26;38839:7;38821:26;;;;;;;;;;;;38800:47;;38968:14;38954:10;:28;38950:328;;38999:19;39021:12;:18;39034:4;39021:18;;;;;;;;;;;;;;;:34;39040:14;39021:34;;;;;;;;;;;;38999:56;;39105:11;39072:12;:18;39085:4;39072:18;;;;;;;;;;;;;;;:30;39091:10;39072:30;;;;;;;;;;;:44;;;;39222:10;39189:17;:30;39207:11;39189:30;;;;;;;;;;;:43;;;;38984:294;38950:328;39374:17;:26;39392:7;39374:26;;;;;;;;;;;39367:33;;;39418:12;:18;39431:4;39418:18;;;;;;;;;;;;;;;:34;39437:14;39418:34;;;;;;;;;;;39411:41;;;38553:907;;38472:988;;:::o;39755:1079::-;40008:22;40053:1;40033:10;:17;;;;:21;;;;:::i;:::-;40008:46;;40065:18;40086:15;:24;40102:7;40086:24;;;;;;;;;;;;40065:45;;40437:19;40459:10;40470:14;40459:26;;;;;;;;:::i;:::-;;;;;;;;;;40437:48;;40523:11;40498:10;40509;40498:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40634:10;40603:15;:28;40619:11;40603:28;;;;;;;;;;;:41;;;;40775:15;:24;40791:7;40775:24;;;;;;;;;;;40768:31;;;40810:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39826:1008;;;39755:1079;:::o;37259:221::-;37344:14;37361:20;37378:2;37361:16;:20::i;:::-;37344:37;;37419:7;37392:12;:16;37405:2;37392:16;;;;;;;;;;;;;;;:24;37409:6;37392:24;;;;;;;;;;;:34;;;;37466:6;37437:17;:26;37455:7;37437:26;;;;;;;;;;;:35;;;;37333:147;37259:221;;:::o;29180:321::-;29310:18;29316:2;29320:7;29310:5;:18::i;:::-;29361:54;29392:1;29396:2;29400:7;29409:5;29361:22;:54::i;:::-;29339:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29180:321;;;:::o;29837:382::-;29931:1;29917:16;;:2;:16;;;;29909:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29990:16;29998:7;29990;:16::i;:::-;29989:17;29981:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30052:45;30081:1;30085:2;30089:7;30052:20;:45::i;:::-;30127:1;30110:9;:13;30120:2;30110:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30158:2;30139:7;:16;30147:7;30139:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30203:7;30199:2;30178:33;;30195:1;30178:33;;;;;;;;;;;;29837:382;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:139::-;1214:5;1252:6;1239:20;1230:29;;1268:33;1295:5;1268:33;:::i;:::-;1168:139;;;;:::o;1330:370::-;1401:5;1450:3;1443:4;1435:6;1431:17;1427:27;1417:122;;1458:79;;:::i;:::-;1417:122;1575:6;1562:20;1600:94;1690:3;1682:6;1675:4;1667:6;1663:17;1600:94;:::i;:::-;1591:103;;1407:293;1330:370;;;;:::o;1706:133::-;1749:5;1787:6;1774:20;1765:29;;1803:30;1827:5;1803:30;:::i;:::-;1706:133;;;;:::o;1845:137::-;1890:5;1928:6;1915:20;1906:29;;1944:32;1970:5;1944:32;:::i;:::-;1845:137;;;;:::o;1988:141::-;2044:5;2075:6;2069:13;2060:22;;2091:32;2117:5;2091:32;:::i;:::-;1988:141;;;;:::o;2148:338::-;2203:5;2252:3;2245:4;2237:6;2233:17;2229:27;2219:122;;2260:79;;:::i;:::-;2219:122;2377:6;2364:20;2402:78;2476:3;2468:6;2461:4;2453:6;2449:17;2402:78;:::i;:::-;2393:87;;2209:277;2148:338;;;;:::o;2492:139::-;2538:5;2576:6;2563:20;2554:29;;2592:33;2619:5;2592:33;:::i;:::-;2492:139;;;;:::o;2637:329::-;2696:6;2745:2;2733:9;2724:7;2720:23;2716:32;2713:119;;;2751:79;;:::i;:::-;2713:119;2871:1;2896:53;2941:7;2932:6;2921:9;2917:22;2896:53;:::i;:::-;2886:63;;2842:117;2637:329;;;;:::o;2972:474::-;3040:6;3048;3097:2;3085:9;3076:7;3072:23;3068:32;3065:119;;;3103:79;;:::i;:::-;3065:119;3223:1;3248:53;3293:7;3284:6;3273:9;3269:22;3248:53;:::i;:::-;3238:63;;3194:117;3350:2;3376:53;3421:7;3412:6;3401:9;3397:22;3376:53;:::i;:::-;3366:63;;3321:118;2972:474;;;;;:::o;3452:619::-;3529:6;3537;3545;3594:2;3582:9;3573:7;3569:23;3565:32;3562:119;;;3600:79;;:::i;:::-;3562:119;3720:1;3745:53;3790:7;3781:6;3770:9;3766:22;3745:53;:::i;:::-;3735:63;;3691:117;3847:2;3873:53;3918:7;3909:6;3898:9;3894:22;3873:53;:::i;:::-;3863:63;;3818:118;3975:2;4001:53;4046:7;4037:6;4026:9;4022:22;4001:53;:::i;:::-;3991:63;;3946:118;3452:619;;;;;:::o;4077:943::-;4172:6;4180;4188;4196;4245:3;4233:9;4224:7;4220:23;4216:33;4213:120;;;4252:79;;:::i;:::-;4213:120;4372:1;4397:53;4442:7;4433:6;4422:9;4418:22;4397:53;:::i;:::-;4387:63;;4343:117;4499:2;4525:53;4570:7;4561:6;4550:9;4546:22;4525:53;:::i;:::-;4515:63;;4470:118;4627:2;4653:53;4698:7;4689:6;4678:9;4674:22;4653:53;:::i;:::-;4643:63;;4598:118;4783:2;4772:9;4768:18;4755:32;4814:18;4806:6;4803:30;4800:117;;;4836:79;;:::i;:::-;4800:117;4941:62;4995:7;4986:6;4975:9;4971:22;4941:62;:::i;:::-;4931:72;;4726:287;4077:943;;;;;;;:::o;5026:468::-;5091:6;5099;5148:2;5136:9;5127:7;5123:23;5119:32;5116:119;;;5154:79;;:::i;:::-;5116:119;5274:1;5299:53;5344:7;5335:6;5324:9;5320:22;5299:53;:::i;:::-;5289:63;;5245:117;5401:2;5427:50;5469:7;5460:6;5449:9;5445:22;5427:50;:::i;:::-;5417:60;;5372:115;5026:468;;;;;:::o;5500:474::-;5568:6;5576;5625:2;5613:9;5604:7;5600:23;5596:32;5593:119;;;5631:79;;:::i;:::-;5593:119;5751:1;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5722:117;5878:2;5904:53;5949:7;5940:6;5929:9;5925:22;5904:53;:::i;:::-;5894:63;;5849:118;5500:474;;;;;:::o;5980:539::-;6064:6;6113:2;6101:9;6092:7;6088:23;6084:32;6081:119;;;6119:79;;:::i;:::-;6081:119;6267:1;6256:9;6252:17;6239:31;6297:18;6289:6;6286:30;6283:117;;;6319:79;;:::i;:::-;6283:117;6424:78;6494:7;6485:6;6474:9;6470:22;6424:78;:::i;:::-;6414:88;;6210:302;5980:539;;;;:::o;6525:327::-;6583:6;6632:2;6620:9;6611:7;6607:23;6603:32;6600:119;;;6638:79;;:::i;:::-;6600:119;6758:1;6783:52;6827:7;6818:6;6807:9;6803:22;6783:52;:::i;:::-;6773:62;;6729:116;6525:327;;;;:::o;6858:349::-;6927:6;6976:2;6964:9;6955:7;6951:23;6947:32;6944:119;;;6982:79;;:::i;:::-;6944:119;7102:1;7127:63;7182:7;7173:6;7162:9;7158:22;7127:63;:::i;:::-;7117:73;;7073:127;6858:349;;;;:::o;7213:329::-;7272:6;7321:2;7309:9;7300:7;7296:23;7292:32;7289:119;;;7327:79;;:::i;:::-;7289:119;7447:1;7472:53;7517:7;7508:6;7497:9;7493:22;7472:53;:::i;:::-;7462:63;;7418:117;7213:329;;;;:::o;7548:142::-;7651:32;7677:5;7651:32;:::i;:::-;7646:3;7639:45;7548:142;;:::o;7696:118::-;7783:24;7801:5;7783:24;:::i;:::-;7778:3;7771:37;7696:118;;:::o;7820:109::-;7901:21;7916:5;7901:21;:::i;:::-;7896:3;7889:34;7820:109;;:::o;7935:360::-;8021:3;8049:38;8081:5;8049:38;:::i;:::-;8103:70;8166:6;8161:3;8103:70;:::i;:::-;8096:77;;8182:52;8227:6;8222:3;8215:4;8208:5;8204:16;8182:52;:::i;:::-;8259:29;8281:6;8259:29;:::i;:::-;8254:3;8250:39;8243:46;;8025:270;7935:360;;;;:::o;8301:364::-;8389:3;8417:39;8450:5;8417:39;:::i;:::-;8472:71;8536:6;8531:3;8472:71;:::i;:::-;8465:78;;8552:52;8597:6;8592:3;8585:4;8578:5;8574:16;8552:52;:::i;:::-;8629:29;8651:6;8629:29;:::i;:::-;8624:3;8620:39;8613:46;;8393:272;8301:364;;;;:::o;8671:366::-;8813:3;8834:67;8898:2;8893:3;8834:67;:::i;:::-;8827:74;;8910:93;8999:3;8910:93;:::i;:::-;9028:2;9023:3;9019:12;9012:19;;8671:366;;;:::o;9043:::-;9185:3;9206:67;9270:2;9265:3;9206:67;:::i;:::-;9199:74;;9282:93;9371:3;9282:93;:::i;:::-;9400:2;9395:3;9391:12;9384:19;;9043:366;;;:::o;9415:::-;9557:3;9578:67;9642:2;9637:3;9578:67;:::i;:::-;9571:74;;9654:93;9743:3;9654:93;:::i;:::-;9772:2;9767:3;9763:12;9756:19;;9415:366;;;:::o;9787:::-;9929:3;9950:67;10014:2;10009:3;9950:67;:::i;:::-;9943:74;;10026:93;10115:3;10026:93;:::i;:::-;10144:2;10139:3;10135:12;10128:19;;9787:366;;;:::o;10159:::-;10301:3;10322:67;10386:2;10381:3;10322:67;:::i;:::-;10315:74;;10398:93;10487:3;10398:93;:::i;:::-;10516:2;10511:3;10507:12;10500:19;;10159:366;;;:::o;10531:::-;10673:3;10694:67;10758:2;10753:3;10694:67;:::i;:::-;10687:74;;10770:93;10859:3;10770:93;:::i;:::-;10888:2;10883:3;10879:12;10872:19;;10531:366;;;:::o;10903:::-;11045:3;11066:67;11130:2;11125:3;11066:67;:::i;:::-;11059:74;;11142:93;11231:3;11142:93;:::i;:::-;11260:2;11255:3;11251:12;11244:19;;10903:366;;;:::o;11275:::-;11417:3;11438:67;11502:2;11497:3;11438:67;:::i;:::-;11431:74;;11514:93;11603:3;11514:93;:::i;:::-;11632:2;11627:3;11623:12;11616:19;;11275:366;;;:::o;11647:::-;11789:3;11810:67;11874:2;11869:3;11810:67;:::i;:::-;11803:74;;11886:93;11975:3;11886:93;:::i;:::-;12004:2;11999:3;11995:12;11988:19;;11647:366;;;:::o;12019:::-;12161:3;12182:67;12246:2;12241:3;12182:67;:::i;:::-;12175:74;;12258:93;12347:3;12258:93;:::i;:::-;12376:2;12371:3;12367:12;12360:19;;12019:366;;;:::o;12391:::-;12533:3;12554:67;12618:2;12613:3;12554:67;:::i;:::-;12547:74;;12630:93;12719:3;12630:93;:::i;:::-;12748:2;12743:3;12739:12;12732:19;;12391:366;;;:::o;12763:::-;12905:3;12926:67;12990:2;12985:3;12926:67;:::i;:::-;12919:74;;13002:93;13091:3;13002:93;:::i;:::-;13120:2;13115:3;13111:12;13104:19;;12763:366;;;:::o;13135:::-;13277:3;13298:67;13362:2;13357:3;13298:67;:::i;:::-;13291:74;;13374:93;13463:3;13374:93;:::i;:::-;13492:2;13487:3;13483:12;13476:19;;13135:366;;;:::o;13507:::-;13649:3;13670:67;13734:2;13729:3;13670:67;:::i;:::-;13663:74;;13746:93;13835:3;13746:93;:::i;:::-;13864:2;13859:3;13855:12;13848:19;;13507:366;;;:::o;13879:::-;14021:3;14042:67;14106:2;14101:3;14042:67;:::i;:::-;14035:74;;14118:93;14207:3;14118:93;:::i;:::-;14236:2;14231:3;14227:12;14220:19;;13879:366;;;:::o;14251:::-;14393:3;14414:67;14478:2;14473:3;14414:67;:::i;:::-;14407:74;;14490:93;14579:3;14490:93;:::i;:::-;14608:2;14603:3;14599:12;14592:19;;14251:366;;;:::o;14623:::-;14765:3;14786:67;14850:2;14845:3;14786:67;:::i;:::-;14779:74;;14862:93;14951:3;14862:93;:::i;:::-;14980:2;14975:3;14971:12;14964:19;;14623:366;;;:::o;14995:::-;15137:3;15158:67;15222:2;15217:3;15158:67;:::i;:::-;15151:74;;15234:93;15323:3;15234:93;:::i;:::-;15352:2;15347:3;15343:12;15336:19;;14995:366;;;:::o;15367:::-;15509:3;15530:67;15594:2;15589:3;15530:67;:::i;:::-;15523:74;;15606:93;15695:3;15606:93;:::i;:::-;15724:2;15719:3;15715:12;15708:19;;15367:366;;;:::o;15739:::-;15881:3;15902:67;15966:2;15961:3;15902:67;:::i;:::-;15895:74;;15978:93;16067:3;15978:93;:::i;:::-;16096:2;16091:3;16087:12;16080:19;;15739:366;;;:::o;16111:::-;16253:3;16274:67;16338:2;16333:3;16274:67;:::i;:::-;16267:74;;16350:93;16439:3;16350:93;:::i;:::-;16468:2;16463:3;16459:12;16452:19;;16111:366;;;:::o;16483:::-;16625:3;16646:67;16710:2;16705:3;16646:67;:::i;:::-;16639:74;;16722:93;16811:3;16722:93;:::i;:::-;16840:2;16835:3;16831:12;16824:19;;16483:366;;;:::o;16855:::-;16997:3;17018:67;17082:2;17077:3;17018:67;:::i;:::-;17011:74;;17094:93;17183:3;17094:93;:::i;:::-;17212:2;17207:3;17203:12;17196:19;;16855:366;;;:::o;17227:::-;17369:3;17390:67;17454:2;17449:3;17390:67;:::i;:::-;17383:74;;17466:93;17555:3;17466:93;:::i;:::-;17584:2;17579:3;17575:12;17568:19;;17227:366;;;:::o;17599:118::-;17686:24;17704:5;17686:24;:::i;:::-;17681:3;17674:37;17599:118;;:::o;17723:222::-;17816:4;17854:2;17843:9;17839:18;17831:26;;17867:71;17935:1;17924:9;17920:17;17911:6;17867:71;:::i;:::-;17723:222;;;;:::o;17951:254::-;18060:4;18098:2;18087:9;18083:18;18075:26;;18111:87;18195:1;18184:9;18180:17;18171:6;18111:87;:::i;:::-;17951:254;;;;:::o;18211:640::-;18406:4;18444:3;18433:9;18429:19;18421:27;;18458:71;18526:1;18515:9;18511:17;18502:6;18458:71;:::i;:::-;18539:72;18607:2;18596:9;18592:18;18583:6;18539:72;:::i;:::-;18621;18689:2;18678:9;18674:18;18665:6;18621:72;:::i;:::-;18740:9;18734:4;18730:20;18725:2;18714:9;18710:18;18703:48;18768:76;18839:4;18830:6;18768:76;:::i;:::-;18760:84;;18211:640;;;;;;;:::o;18857:210::-;18944:4;18982:2;18971:9;18967:18;18959:26;;18995:65;19057:1;19046:9;19042:17;19033:6;18995:65;:::i;:::-;18857:210;;;;:::o;19073:313::-;19186:4;19224:2;19213:9;19209:18;19201:26;;19273:9;19267:4;19263:20;19259:1;19248:9;19244:17;19237:47;19301:78;19374:4;19365:6;19301:78;:::i;:::-;19293:86;;19073:313;;;;:::o;19392:419::-;19558:4;19596:2;19585:9;19581:18;19573:26;;19645:9;19639:4;19635:20;19631:1;19620:9;19616:17;19609:47;19673:131;19799:4;19673:131;:::i;:::-;19665:139;;19392:419;;;:::o;19817:::-;19983:4;20021:2;20010:9;20006:18;19998:26;;20070:9;20064:4;20060:20;20056:1;20045:9;20041:17;20034:47;20098:131;20224:4;20098:131;:::i;:::-;20090:139;;19817:419;;;:::o;20242:::-;20408:4;20446:2;20435:9;20431:18;20423:26;;20495:9;20489:4;20485:20;20481:1;20470:9;20466:17;20459:47;20523:131;20649:4;20523:131;:::i;:::-;20515:139;;20242:419;;;:::o;20667:::-;20833:4;20871:2;20860:9;20856:18;20848:26;;20920:9;20914:4;20910:20;20906:1;20895:9;20891:17;20884:47;20948:131;21074:4;20948:131;:::i;:::-;20940:139;;20667:419;;;:::o;21092:::-;21258:4;21296:2;21285:9;21281:18;21273:26;;21345:9;21339:4;21335:20;21331:1;21320:9;21316:17;21309:47;21373:131;21499:4;21373:131;:::i;:::-;21365:139;;21092:419;;;:::o;21517:::-;21683:4;21721:2;21710:9;21706:18;21698:26;;21770:9;21764:4;21760:20;21756:1;21745:9;21741:17;21734:47;21798:131;21924:4;21798:131;:::i;:::-;21790:139;;21517:419;;;:::o;21942:::-;22108:4;22146:2;22135:9;22131:18;22123:26;;22195:9;22189:4;22185:20;22181:1;22170:9;22166:17;22159:47;22223:131;22349:4;22223:131;:::i;:::-;22215:139;;21942:419;;;:::o;22367:::-;22533:4;22571:2;22560:9;22556:18;22548:26;;22620:9;22614:4;22610:20;22606:1;22595:9;22591:17;22584:47;22648:131;22774:4;22648:131;:::i;:::-;22640:139;;22367:419;;;:::o;22792:::-;22958:4;22996:2;22985:9;22981:18;22973:26;;23045:9;23039:4;23035:20;23031:1;23020:9;23016:17;23009:47;23073:131;23199:4;23073:131;:::i;:::-;23065:139;;22792:419;;;:::o;23217:::-;23383:4;23421:2;23410:9;23406:18;23398:26;;23470:9;23464:4;23460:20;23456:1;23445:9;23441:17;23434:47;23498:131;23624:4;23498:131;:::i;:::-;23490:139;;23217:419;;;:::o;23642:::-;23808:4;23846:2;23835:9;23831:18;23823:26;;23895:9;23889:4;23885:20;23881:1;23870:9;23866:17;23859:47;23923:131;24049:4;23923:131;:::i;:::-;23915:139;;23642:419;;;:::o;24067:::-;24233:4;24271:2;24260:9;24256:18;24248:26;;24320:9;24314:4;24310:20;24306:1;24295:9;24291:17;24284:47;24348:131;24474:4;24348:131;:::i;:::-;24340:139;;24067:419;;;:::o;24492:::-;24658:4;24696:2;24685:9;24681:18;24673:26;;24745:9;24739:4;24735:20;24731:1;24720:9;24716:17;24709:47;24773:131;24899:4;24773:131;:::i;:::-;24765:139;;24492:419;;;:::o;24917:::-;25083:4;25121:2;25110:9;25106:18;25098:26;;25170:9;25164:4;25160:20;25156:1;25145:9;25141:17;25134:47;25198:131;25324:4;25198:131;:::i;:::-;25190:139;;24917:419;;;:::o;25342:::-;25508:4;25546:2;25535:9;25531:18;25523:26;;25595:9;25589:4;25585:20;25581:1;25570:9;25566:17;25559:47;25623:131;25749:4;25623:131;:::i;:::-;25615:139;;25342:419;;;:::o;25767:::-;25933:4;25971:2;25960:9;25956:18;25948:26;;26020:9;26014:4;26010:20;26006:1;25995:9;25991:17;25984:47;26048:131;26174:4;26048:131;:::i;:::-;26040:139;;25767:419;;;:::o;26192:::-;26358:4;26396:2;26385:9;26381:18;26373:26;;26445:9;26439:4;26435:20;26431:1;26420:9;26416:17;26409:47;26473:131;26599:4;26473:131;:::i;:::-;26465:139;;26192:419;;;:::o;26617:::-;26783:4;26821:2;26810:9;26806:18;26798:26;;26870:9;26864:4;26860:20;26856:1;26845:9;26841:17;26834:47;26898:131;27024:4;26898:131;:::i;:::-;26890:139;;26617:419;;;:::o;27042:::-;27208:4;27246:2;27235:9;27231:18;27223:26;;27295:9;27289:4;27285:20;27281:1;27270:9;27266:17;27259:47;27323:131;27449:4;27323:131;:::i;:::-;27315:139;;27042:419;;;:::o;27467:::-;27633:4;27671:2;27660:9;27656:18;27648:26;;27720:9;27714:4;27710:20;27706:1;27695:9;27691:17;27684:47;27748:131;27874:4;27748:131;:::i;:::-;27740:139;;27467:419;;;:::o;27892:::-;28058:4;28096:2;28085:9;28081:18;28073:26;;28145:9;28139:4;28135:20;28131:1;28120:9;28116:17;28109:47;28173:131;28299:4;28173:131;:::i;:::-;28165:139;;27892:419;;;:::o;28317:::-;28483:4;28521:2;28510:9;28506:18;28498:26;;28570:9;28564:4;28560:20;28556:1;28545:9;28541:17;28534:47;28598:131;28724:4;28598:131;:::i;:::-;28590:139;;28317:419;;;:::o;28742:::-;28908:4;28946:2;28935:9;28931:18;28923:26;;28995:9;28989:4;28985:20;28981:1;28970:9;28966:17;28959:47;29023:131;29149:4;29023:131;:::i;:::-;29015:139;;28742:419;;;:::o;29167:::-;29333:4;29371:2;29360:9;29356:18;29348:26;;29420:9;29414:4;29410:20;29406:1;29395:9;29391:17;29384:47;29448:131;29574:4;29448:131;:::i;:::-;29440:139;;29167:419;;;:::o;29592:222::-;29685:4;29723:2;29712:9;29708:18;29700:26;;29736:71;29804:1;29793:9;29789:17;29780:6;29736:71;:::i;:::-;29592:222;;;;:::o;29820:129::-;29854:6;29881:20;;:::i;:::-;29871:30;;29910:33;29938:4;29930:6;29910:33;:::i;:::-;29820:129;;;:::o;29955:75::-;29988:6;30021:2;30015:9;30005:19;;29955:75;:::o;30036:311::-;30113:4;30203:18;30195:6;30192:30;30189:56;;;30225:18;;:::i;:::-;30189:56;30275:4;30267:6;30263:17;30255:25;;30335:4;30329;30325:15;30317:23;;30036:311;;;:::o;30353:307::-;30414:4;30504:18;30496:6;30493:30;30490:56;;;30526:18;;:::i;:::-;30490:56;30564:29;30586:6;30564:29;:::i;:::-;30556:37;;30648:4;30642;30638:15;30630:23;;30353:307;;;:::o;30666:98::-;30717:6;30751:5;30745:12;30735:22;;30666:98;;;:::o;30770:99::-;30822:6;30856:5;30850:12;30840:22;;30770:99;;;:::o;30875:168::-;30958:11;30992:6;30987:3;30980:19;31032:4;31027:3;31023:14;31008:29;;30875:168;;;;:::o;31049:169::-;31133:11;31167:6;31162:3;31155:19;31207:4;31202:3;31198:14;31183:29;;31049:169;;;;:::o;31224:305::-;31264:3;31283:20;31301:1;31283:20;:::i;:::-;31278:25;;31317:20;31335:1;31317:20;:::i;:::-;31312:25;;31471:1;31403:66;31399:74;31396:1;31393:81;31390:107;;;31477:18;;:::i;:::-;31390:107;31521:1;31518;31514:9;31507:16;;31224:305;;;;:::o;31535:348::-;31575:7;31598:20;31616:1;31598:20;:::i;:::-;31593:25;;31632:20;31650:1;31632:20;:::i;:::-;31627:25;;31820:1;31752:66;31748:74;31745:1;31742:81;31737:1;31730:9;31723:17;31719:105;31716:131;;;31827:18;;:::i;:::-;31716:131;31875:1;31872;31868:9;31857:20;;31535:348;;;;:::o;31889:191::-;31929:4;31949:20;31967:1;31949:20;:::i;:::-;31944:25;;31983:20;32001:1;31983:20;:::i;:::-;31978:25;;32022:1;32019;32016:8;32013:34;;;32027:18;;:::i;:::-;32013:34;32072:1;32069;32065:9;32057:17;;31889:191;;;;:::o;32086:96::-;32123:7;32152:24;32170:5;32152:24;:::i;:::-;32141:35;;32086:96;;;:::o;32188:104::-;32233:7;32262:24;32280:5;32262:24;:::i;:::-;32251:35;;32188:104;;;:::o;32298:90::-;32332:7;32375:5;32368:13;32361:21;32350:32;;32298:90;;;:::o;32394:149::-;32430:7;32470:66;32463:5;32459:78;32448:89;;32394:149;;;:::o;32549:126::-;32586:7;32626:42;32619:5;32615:54;32604:65;;32549:126;;;:::o;32681:77::-;32718:7;32747:5;32736:16;;32681:77;;;:::o;32764:154::-;32848:6;32843:3;32838;32825:30;32910:1;32901:6;32896:3;32892:16;32885:27;32764:154;;;:::o;32924:307::-;32992:1;33002:113;33016:6;33013:1;33010:13;33002:113;;;33101:1;33096:3;33092:11;33086:18;33082:1;33077:3;33073:11;33066:39;33038:2;33035:1;33031:10;33026:15;;33002:113;;;33133:6;33130:1;33127:13;33124:101;;;33213:1;33204:6;33199:3;33195:16;33188:27;33124:101;32973:258;32924:307;;;:::o;33237:320::-;33281:6;33318:1;33312:4;33308:12;33298:22;;33365:1;33359:4;33355:12;33386:18;33376:81;;33442:4;33434:6;33430:17;33420:27;;33376:81;33504:2;33496:6;33493:14;33473:18;33470:38;33467:84;;;33523:18;;:::i;:::-;33467:84;33288:269;33237:320;;;:::o;33563:281::-;33646:27;33668:4;33646:27;:::i;:::-;33638:6;33634:40;33776:6;33764:10;33761:22;33740:18;33728:10;33725:34;33722:62;33719:88;;;33787:18;;:::i;:::-;33719:88;33827:10;33823:2;33816:22;33606:238;33563:281;;:::o;33850:233::-;33889:3;33912:24;33930:5;33912:24;:::i;:::-;33903:33;;33958:66;33951:5;33948:77;33945:103;;;34028:18;;:::i;:::-;33945:103;34075:1;34068:5;34064:13;34057:20;;33850:233;;;:::o;34089:180::-;34137:77;34134:1;34127:88;34234:4;34231:1;34224:15;34258:4;34255:1;34248:15;34275:180;34323:77;34320:1;34313:88;34420:4;34417:1;34410:15;34444:4;34441:1;34434:15;34461:180;34509:77;34506:1;34499:88;34606:4;34603:1;34596:15;34630:4;34627:1;34620:15;34647:180;34695:77;34692:1;34685:88;34792:4;34789:1;34782:15;34816:4;34813:1;34806:15;34833:180;34881:77;34878:1;34871:88;34978:4;34975:1;34968:15;35002:4;34999:1;34992:15;35019:117;35128:1;35125;35118:12;35142:117;35251:1;35248;35241:12;35265:117;35374:1;35371;35364:12;35388:117;35497:1;35494;35487:12;35511:117;35620:1;35617;35610:12;35634:102;35675:6;35726:2;35722:7;35717:2;35710:5;35706:14;35702:28;35692:38;;35634:102;;;:::o;35742:237::-;35882:34;35878:1;35870:6;35866:14;35859:58;35951:20;35946:2;35938:6;35934:15;35927:45;35742:237;:::o;35985:230::-;36125:34;36121:1;36113:6;36109:14;36102:58;36194:13;36189:2;36181:6;36177:15;36170:38;35985:230;:::o;36221:237::-;36361:34;36357:1;36349:6;36345:14;36338:58;36430:20;36425:2;36417:6;36413:15;36406:45;36221:237;:::o;36464:182::-;36604:34;36600:1;36592:6;36588:14;36581:58;36464:182;:::o;36652:225::-;36792:34;36788:1;36780:6;36776:14;36769:58;36861:8;36856:2;36848:6;36844:15;36837:33;36652:225;:::o;36883:178::-;37023:30;37019:1;37011:6;37007:14;37000:54;36883:178;:::o;37067:223::-;37207:34;37203:1;37195:6;37191:14;37184:58;37276:6;37271:2;37263:6;37259:15;37252:31;37067:223;:::o;37296:175::-;37436:27;37432:1;37424:6;37420:14;37413:51;37296:175;:::o;37477:231::-;37617:34;37613:1;37605:6;37601:14;37594:58;37686:14;37681:2;37673:6;37669:15;37662:39;37477:231;:::o;37714:230::-;37854:34;37850:1;37842:6;37838:14;37831:58;37923:13;37918:2;37910:6;37906:15;37899:38;37714:230;:::o;37950:243::-;38090:34;38086:1;38078:6;38074:14;38067:58;38159:26;38154:2;38146:6;38142:15;38135:51;37950:243;:::o;38199:229::-;38339:34;38335:1;38327:6;38323:14;38316:58;38408:12;38403:2;38395:6;38391:15;38384:37;38199:229;:::o;38434:228::-;38574:34;38570:1;38562:6;38558:14;38551:58;38643:11;38638:2;38630:6;38626:15;38619:36;38434:228;:::o;38668:182::-;38808:34;38804:1;38796:6;38792:14;38785:58;38668:182;:::o;38856:231::-;38996:34;38992:1;38984:6;38980:14;38973:58;39065:14;39060:2;39052:6;39048:15;39041:39;38856:231;:::o;39093:182::-;39233:34;39229:1;39221:6;39217:14;39210:58;39093:182;:::o;39281:228::-;39421:34;39417:1;39409:6;39405:14;39398:58;39490:11;39485:2;39477:6;39473:15;39466:36;39281:228;:::o;39515:220::-;39655:34;39651:1;39643:6;39639:14;39632:58;39724:3;39719:2;39711:6;39707:15;39700:28;39515:220;:::o;39741:236::-;39881:34;39877:1;39869:6;39865:14;39858:58;39950:19;39945:2;39937:6;39933:15;39926:44;39741:236;:::o;39983:225::-;40123:34;40119:1;40111:6;40107:14;40100:58;40192:8;40187:2;40179:6;40175:15;40168:33;39983:225;:::o;40214:231::-;40354:34;40350:1;40342:6;40338:14;40331:58;40423:14;40418:2;40410:6;40406:15;40399:39;40214:231;:::o;40451:230::-;40591:34;40587:1;40579:6;40575:14;40568:58;40660:13;40655:2;40647:6;40643:15;40636:38;40451:230;:::o;40687:181::-;40827:33;40823:1;40815:6;40811:14;40804:57;40687:181;:::o;40874:223::-;41014:34;41010:1;41002:6;40998:14;40991:58;41083:6;41078:2;41070:6;41066:15;41059:31;40874:223;:::o;41103:122::-;41176:24;41194:5;41176:24;:::i;:::-;41169:5;41166:35;41156:63;;41215:1;41212;41205:12;41156:63;41103:122;:::o;41231:116::-;41301:21;41316:5;41301:21;:::i;:::-;41294:5;41291:32;41281:60;;41337:1;41334;41327:12;41281:60;41231:116;:::o;41353:120::-;41425:23;41442:5;41425:23;:::i;:::-;41418:5;41415:34;41405:62;;41463:1;41460;41453:12;41405:62;41353:120;:::o;41479:122::-;41552:24;41570:5;41552:24;:::i;:::-;41545:5;41542:35;41532:63;;41591:1;41588;41581:12;41532:63;41479:122;:::o
Swarm Source
ipfs://3727423beb736e7d2c2ae1b35b999e8655d6d8a525ed6818c476a44c57b9fb14
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.