Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Phish / Hack
Overview
Max Total Supply
2,678 SCRT
Holders
1,016
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 SCRTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
notasecretproject
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-16 */ /** `-.`'.-' `-. .-'. `-. -./\.- .-' -. /_|\ .- `-. `/____\' .-'. `-. -./.-""-.\.- ' `-. /< (()) >\ .-' - .`/__`-..-'__\' .- ,...`-./___|____|___\.-'.,. ,-' ,` . . ', `-, ,-' ________________ `-, ,'/____|_____|_____\ / /__|_____|_____|___\ / /|_____|_____|_____|_\ ' /____|_____|_____|_____\ .' /__|_____|_____|_____|___\ ,' /|_____|_____|_____|_____|_\ ,,---''--...___...--'''--.. /../____|_____|_____|_____|_____\ ..--```--...___...--``---,, '../__|_____|_____|_____|_____|___\ \ ) '.:/|_____|_____|_____|_____|_____|_\ ( / )\ / ) ,':./____|_____|_____|_____|_____|_____\ ( \ /( / / ( ( /:../__|_____|_____|_____|_____|_____|___\ ) ) \ \ | | \ \ /.../|_____|_____|_____|_____|_____|_____|_\ / / | | .-.\ \ \ \ '..:/____|_____|_____|_____|_____|_____|_____\ / / / /.-. (= )\ `._.' | \:./ _ _ ___ ____ ____ _ _ _ _ _ _ _ ___\ | `._.' /( =) \ (_) ) \./ |\/| |__) |___ |___ |___ _X_ _X_ \/ _|_ \ ( (_) / \ `----' """""""""""""""""""""""""""""""""""""""""""""""" `----' / ███╗ ██╗ ██████╗ ████████╗ █████╗ ███████╗███████╗ ██████╗██████╗ ███████╗████████╗ ██████╗ ██████╗ ██████╗ ██╗███████╗ ██████╗████████╗ ████╗ ██║██╔═══██╗╚══██╔══╝ ██╔══██╗ ██╔════╝██╔════╝██╔════╝██╔══██╗██╔════╝╚══██╔══╝ ██╔══██╗██╔══██╗██╔═══██╗ ██║██╔════╝██╔════╝╚══██╔══╝ ██╔██╗ ██║██║ ██║ ██║ ███████║ ███████╗█████╗ ██║ ██████╔╝█████╗ ██║ ██████╔╝██████╔╝██║ ██║ ██║█████╗ ██║ ██║ ██║╚██╗██║██║ ██║ ██║ ██╔══██║ ╚════██║██╔══╝ ██║ ██╔══██╗██╔══╝ ██║ ██╔═══╝ ██╔══██╗██║ ██║██ ██║██╔══╝ ██║ ██║ ██║ ╚████║╚██████╔╝ ██║ ██║ ██║ ███████║███████╗╚██████╗██║ ██║███████╗ ██║ ██║ ██║ ██║╚██████╔╝╚█████╔╝███████╗╚██████╗ ██║ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚════╝ ╚══════╝ ╚═════╝ ╚═╝ * * Hello world, * * Nothing was intended to be obscured from you, you simply did not follow the clues. * Journal 3 was left behind, allowing me to delve deep into your thoughts. * * -Bill * * * Founded By: @xxxxxx * Developed By: @banteg & @0xcurio * Optimization assistance credits: @0xca0a */ // File: Address.sol pragma solidity ^0.8.6; library Address { function isContract(address account) internal view returns (bool) { uint size; assembly { size := extcodesize(account) } return size > 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: ERC721.sol pragma solidity ^0.8.7; abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; // Mapping from token ID to owner address address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; 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 (uint) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ) ++count; } return count; } /** * @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 {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 tokenId < _owners.length && _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); _owners.push(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); _owners[tokenId] = address(0); 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); _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 {} } // File: ERC721Enumerable.sol pragma solidity ^0.8.7; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account but rips out the core of the gas-wasting processing that comes from OpenZeppelin. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { /** * @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-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _owners.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < _owners.length, "ERC721Enumerable: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) { require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); uint count; for(uint i; i < _owners.length; i++){ if(owner == _owners[i]){ if(count == index) return i; else count++; } } revert("ERC721Enumerable: owner index out of bounds"); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } // File: not so secret project.sol pragma solidity ^0.8.7; interface IWasteland { function getScavengeRate(uint256 tokenId) external view returns (uint256); } contract notasecretproject is ERC721Enumerable, Ownable { string public baseURI; address public proxyRegistryAddress; address public wastelandAddress; address public SecretAdd; bytes32 public whitelistMerkleRoot; uint256 public MAX_SUPPLY; uint256 public constant MAX_PER_TX = 11; uint256 public constant RESERVES = 5; uint256 public constant priceInWei = 0.05 ether; mapping(address => bool) public projectProxy; mapping(address => uint) public addressToMinted; constructor( string memory _baseURI, address _proxyRegistryAddress, address _SecretAdd ) ERC721("notasecretproject", "SCRT") { baseURI = _baseURI; proxyRegistryAddress = _proxyRegistryAddress; SecretAdd = _SecretAdd; } function setBaseURI(string memory _baseURI) public onlyOwner { baseURI = _baseURI; } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Token does not exist."); return string(abi.encodePacked(baseURI, Strings.toString(_tokenId))); } function setProxyRegistryAddress(address _proxyRegistryAddress) external onlyOwner { proxyRegistryAddress = _proxyRegistryAddress; } function setWastelandAddress(address _wastelandAddress) external onlyOwner { wastelandAddress = _wastelandAddress; } function flipProxyState(address proxyAddress) public onlyOwner { projectProxy[proxyAddress] = !projectProxy[proxyAddress]; } function collectReserves() external onlyOwner { require(_owners.length == 0, 'Reserves already taken.'); for(uint256 i; i < RESERVES; i++) _mint(_msgSender(), i); } function setWhitelistMerkleRoot(bytes32 _whitelistMerkleRoot) external onlyOwner { whitelistMerkleRoot = _whitelistMerkleRoot; } function togglePublicSale(uint256 _MAX_SUPPLY) external onlyOwner { delete whitelistMerkleRoot; MAX_SUPPLY = _MAX_SUPPLY; } function _leaf(string memory allowance, string memory payload) internal pure returns (bytes32) { return keccak256(abi.encodePacked(payload, allowance)); } function _verify(bytes32 leaf, bytes32[] memory proof) internal view returns (bool) { return MerkleProof.verify(proof, whitelistMerkleRoot, leaf); } function getAllowance(string memory allowance, bytes32[] calldata proof) public view returns (string memory) { string memory payload = string(abi.encodePacked(_msgSender())); require(_verify(_leaf(allowance, payload), proof), "Invalid Merkle Tree proof supplied."); return allowance; } function whitelistMint(uint256 count, uint256 allowance, bytes32[] calldata proof) public payable { string memory payload = string(abi.encodePacked(_msgSender())); require(_verify(_leaf(Strings.toString(allowance), payload), proof), "Invalid Merkle Tree proof supplied."); require(addressToMinted[_msgSender()] + count <= allowance, "Exceeds whitelist supply"); require(count * priceInWei == msg.value, "Invalid funds provided."); addressToMinted[_msgSender()] += count; uint256 totalSupply = _owners.length; for(uint i; i < count; i++) { _mint(_msgSender(), totalSupply + i); } } function publicMint(uint256 count) public payable { uint256 totalSupply = _owners.length; require(totalSupply + count < 10000, "Excedes max supply."); require(count < MAX_PER_TX, "Exceeds max per transaction."); require(count * priceInWei == msg.value, "Invalid funds provided."); for(uint i; i < count; i++) { _mint(_msgSender(), totalSupply + i); } } function getScavengeRate(uint256 tokenId) public view returns (uint256) { require(wastelandAddress != address(0x0), "Wasteland not explored yet!"); return IWasteland(wastelandAddress).getScavengeRate(tokenId); } function burn(uint256 tokenId) public { require(_isApprovedOrOwner(_msgSender(), tokenId), "Not approved to burn."); _burn(tokenId); } function withdraw() public { (bool success, ) = SecretAdd.call{value: address(this).balance}(""); require(success, "Failed to send to scrt."); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) return new uint256[](0); uint256[] memory tokensId = new uint256[](tokenCount); for (uint256 i; i < tokenCount; i++) { tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function batchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) public { for (uint256 i = 0; i < _tokenIds.length; i++) { transferFrom(_from, _to, _tokenIds[i]); } } function batchSafeTransferFrom(address _from, address _to, uint256[] memory _tokenIds, bytes memory data_) public { for (uint256 i = 0; i < _tokenIds.length; i++) { safeTransferFrom(_from, _to, _tokenIds[i], data_); } } function isOwnerOf(address account, uint256[] calldata _tokenIds) external view returns (bool){ for(uint256 i; i < _tokenIds.length; ++i ){ if(_owners[_tokenIds[i]] != account) return false; } return true; } function isApprovedForAll(address _owner, address operator) public view override returns (bool) { OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(_owner)) == operator || projectProxy[operator]) return true; return super.isApprovedForAll(_owner, operator); } function _mint(address to, uint256 tokenId) internal virtual override { _owners.push(to); emit Transfer(address(0), to, tokenId); } } contract OwnableDelegateProxy { } contract OpenSeaProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"},{"internalType":"address","name":"_SecretAdd","type":"address"}],"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":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SecretAdd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"flipProxyState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"allowance","type":"string"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"getAllowance","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"tokenId","type":"uint256"}],"name":"getScavengeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"isOwnerOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"projectProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wastelandAddress","type":"address"}],"name":"setWastelandAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","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":"_MAX_SUPPLY","type":"uint256"}],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","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":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wastelandAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200598e3803806200598e8339818101604052810190620000379190620003ae565b6040518060400160405280601181526020017f6e6f746173656372657470726f6a6563740000000000000000000000000000008152506040518060400160405280600481526020017f53435254000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000269565b508060019080519060200190620000d492919062000269565b505050620000f7620000eb6200019b60201b60201c565b620001a360201b60201c565b82600690805190602001906200010f92919062000269565b5081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620005fb565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200027790620004f2565b90600052602060002090601f0160209004810192826200029b5760008555620002e7565b82601f10620002b657805160ff1916838001178555620002e7565b82800160010185558215620002e7579182015b82811115620002e6578251825591602001919060010190620002c9565b5b509050620002f69190620002fa565b5090565b5b8082111562000315576000816000905550600101620002fb565b5090565b6000620003306200032a8462000452565b62000429565b9050828152602081018484840111156200034f576200034e620005c1565b5b6200035c848285620004bc565b509392505050565b6000815190506200037581620005e1565b92915050565b600082601f830112620003935762000392620005bc565b5b8151620003a584826020860162000319565b91505092915050565b600080600060608486031215620003ca57620003c9620005cb565b5b600084015167ffffffffffffffff811115620003eb57620003ea620005c6565b5b620003f9868287016200037b565b93505060206200040c8682870162000364565b92505060406200041f8682870162000364565b9150509250925092565b60006200043562000448565b905062000443828262000528565b919050565b6000604051905090565b600067ffffffffffffffff82111562000470576200046f6200058d565b5b6200047b82620005d0565b9050602081019050919050565b600062000495826200049c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620004dc578082015181840152602081019050620004bf565b83811115620004ec576000848401525b50505050565b600060028204905060018216806200050b57607f821691505b602082108114156200052257620005216200055e565b5b50919050565b6200053382620005d0565b810181811067ffffffffffffffff821117156200055557620005546200058d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005ec8162000488565b8114620005f857600080fd5b50565b615383806200060b6000396000f3fe6080604052600436106102885760003560e01c80636352211e1161015a578063b88d4fde116100c1578063e985e9c51161007a578063e985e9c5146109e8578063eac6365514610a25578063f2fde38b14610a50578063f3993d1114610a79578063f43a22dc14610aa2578063f73c814b14610acd57610288565b8063b88d4fde146108e9578063bd32fb6614610912578063c4be5b591461093b578063c87b56dd14610957578063cd7c032614610994578063d26ea6c0146109bf57610288565b80638cf7be7e116101135780638cf7be7e146107d95780638da5cb5b1461080257806395d89b411461082d5780639ec00c9514610858578063a22cb46514610895578063aa98e0c6146108be57610288565b80636352211e146106b557806366fddfa9146106f25780636c0360eb1461072f57806370a082311461075a578063715018a61461079757806385013dad146107ae57610288565b80632f745c59116101fe578063438b6300116101b7578063438b63001461056f5780634d44660c146105ac5780634f6ccce7146105e957806355f804b3146106265780635a4fee301461064f5780635bab26e21461067857610288565b80632f745c591461047357806332cb6b0c146104b05780633c8da588146104db5780633ccfd60b1461050657806342842e0e1461051d57806342966c681461054657610288565b8063095ea7b311610250578063095ea7b3146103745780631328afd01461039d57806316220340146103da57806318160ddd1461040357806323b872dd1461042e5780632db115441461045757610288565b806301ffc9a71461028d578063029877b6146102ca57806306fdde03146102e1578063081812fc1461030c5780630922f9c514610349575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613aca565b610af6565b6040516102c191906143b0565b60405180910390f35b3480156102d657600080fd5b506102df610b70565b005b3480156102ed57600080fd5b506102f6610c67565b60405161030391906143e6565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613c16565b610cf9565b6040516103409190614327565b60405180910390f35b34801561035557600080fd5b5061035e610d7e565b60405161036b9190614728565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190613a5d565b610d83565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190613c16565b610e9b565b6040516103d19190614728565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc919061376c565b610fe0565b005b34801561040f57600080fd5b506104186110a0565b6040516104259190614728565b60405180910390f35b34801561043a57600080fd5b50610455600480360381019061045091906138e7565b6110ad565b005b610471600480360381019061046c9190613c16565b61110d565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613a5d565b61123c565b6040516104a79190614728565b60405180910390f35b3480156104bc57600080fd5b506104c5611381565b6040516104d29190614728565b60405180910390f35b3480156104e757600080fd5b506104f0611387565b6040516104fd9190614728565b60405180910390f35b34801561051257600080fd5b5061051b611392565b005b34801561052957600080fd5b50610544600480360381019061053f91906138e7565b611463565b005b34801561055257600080fd5b5061056d60048036038101906105689190613c16565b611483565b005b34801561057b57600080fd5b506105966004803603810190610591919061376c565b6114df565b6040516105a3919061438e565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce91906139bd565b6115e9565b6040516105e091906143b0565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613c16565b6116aa565b60405161061d9190614728565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190613b51565b6116fb565b005b34801561065b57600080fd5b5061067660048036038101906106719190613848565b611791565b005b34801561068457600080fd5b5061069f600480360381019061069a919061376c565b6117dd565b6040516106ac91906143b0565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613c16565b6117fd565b6040516106e99190614327565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613b9a565b6118ba565b60405161072691906143e6565b60405180910390f35b34801561073b57600080fd5b50610744611985565b60405161075191906143e6565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c919061376c565b611a13565b60405161078e9190614728565b60405180910390f35b3480156107a357600080fd5b506107ac611b2f565b005b3480156107ba57600080fd5b506107c3611bb7565b6040516107d09190614327565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190613c16565b611bdd565b005b34801561080e57600080fd5b50610817611c69565b6040516108249190614327565b60405180910390f35b34801561083957600080fd5b50610842611c93565b60405161084f91906143e6565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a919061376c565b611d25565b60405161088c9190614728565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b79190613a1d565b611d3d565b005b3480156108ca57600080fd5b506108d3611ebe565b6040516108e091906143cb565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b919061393a565b611ec4565b005b34801561091e57600080fd5b5061093960048036038101906109349190613a9d565b611f26565b005b61095560048036038101906109509190613c70565b611fac565b005b34801561096357600080fd5b5061097e60048036038101906109799190613c16565b612204565b60405161098b91906143e6565b60405180910390f35b3480156109a057600080fd5b506109a9612280565b6040516109b69190614327565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e1919061376c565b6122a6565b005b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613799565b612366565b604051610a1c91906143b0565b60405180910390f35b348015610a3157600080fd5b50610a3a6124bc565b604051610a479190614327565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a72919061376c565b6124e2565b005b348015610a8557600080fd5b50610aa06004803603810190610a9b91906137d9565b6125da565b005b348015610aae57600080fd5b50610ab7612624565b604051610ac49190614728565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef919061376c565b612629565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b695750610b688261274c565b5b9050919050565b610b7861282e565b73ffffffffffffffffffffffffffffffffffffffff16610b96611c69565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390614628565b60405180910390fd5b600060028054905014610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b906146a8565b60405180910390fd5b60005b6005811015610c6457610c51610c4b61282e565b82612836565b8080610c5c90614adc565b915050610c37565b50565b606060008054610c7690614a79565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca290614a79565b8015610cef5780601f10610cc457610100808354040283529160200191610cef565b820191906000526020600020905b815481529060010190602001808311610cd257829003601f168201915b5050505050905090565b6000610d04826128f9565b610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a906145e8565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600581565b6000610d8e826117fd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df690614688565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e1e61282e565b73ffffffffffffffffffffffffffffffffffffffff161480610e4d5750610e4c81610e4761282e565b612366565b5b610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390614548565b60405180910390fd5b610e968383612981565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614608565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631328afd0836040518263ffffffff1660e01b8152600401610f899190614728565b60206040518083038186803b158015610fa157600080fd5b505afa158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd99190613c43565b9050919050565b610fe861282e565b73ffffffffffffffffffffffffffffffffffffffff16611006611c69565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390614628565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600280549050905090565b6110be6110b861282e565b82612a3a565b6110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f4906146c8565b60405180910390fd5b611108838383612b18565b505050565b6000600280549050905061271082826111269190614892565b10611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614448565b60405180910390fd5b600b82106111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a0906146e8565b60405180910390fd5b3466b1a2bc2ec50000836111bd9190614919565b146111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f4906145a8565b60405180910390fd5b60005b828110156112375761122461121361282e565b828461121f9190614892565b612836565b808061122f90614adc565b915050611200565b505050565b600061124783611a13565b8210611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90614468565b60405180910390fd5b6000805b60028054905081101561133f57600281815481106112ad576112ac614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561132c578382141561131d57809250505061137b565b818061132890614adc565b9250505b808061133790614adc565b91505061128c565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290614468565b60405180910390fd5b92915050565b600b5481565b66b1a2bc2ec5000081565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516113da90614312565b60006040518083038185875af1925050503d8060008114611417576040519150601f19603f3d011682016040523d82523d6000602084013e61141c565b606091505b5050905080611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614408565b60405180910390fd5b50565b61147e83838360405180602001604052806000815250611ec4565b505050565b61149461148e61282e565b82612a3a565b6114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90614668565b60405180910390fd5b6114dc81612cd1565b50565b606060006114ec83611a13565b9050600081141561154957600067ffffffffffffffff81111561151257611511614c40565b5b6040519080825280602002602001820160405280156115405781602001602082028036833780820191505090505b509150506115e4565b60008167ffffffffffffffff81111561156557611564614c40565b5b6040519080825280602002602001820160405280156115935781602001602082028036833780820191505090505b50905060005b828110156115dd576115ab858261123c565b8282815181106115be576115bd614c11565b5b60200260200101818152505080806115d590614adc565b915050611599565b5080925050505b919050565b6000805b8383905081101561169d578473ffffffffffffffffffffffffffffffffffffffff16600285858481811061162457611623614c11565b5b905060200201358154811061163c5761163b614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168c5760009150506116a3565b8061169690614adc565b90506115ed565b50600190505b9392505050565b600060028054905082106116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90614708565b60405180910390fd5b819050919050565b61170361282e565b73ffffffffffffffffffffffffffffffffffffffff16611721611c69565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90614628565b60405180910390fd5b806006908051906020019061178d9291906133f7565b5050565b60005b82518110156117d6576117c385858584815181106117b5576117b4614c11565b5b602002602001015185611ec4565b80806117ce90614adc565b915050611794565b5050505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000806002838154811061181457611813614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890614588565b60405180910390fd5b80915050919050565b606060006118c661282e565b6040516020016118d69190614283565b604051602081830303815290604052905061193b6118f48683612db3565b858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612de6565b61197a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197190614428565b60405180910390fd5b849150509392505050565b6006805461199290614a79565b80601f01602080910402602001604051908101604052809291908181526020018280546119be90614a79565b8015611a0b5780601f106119e057610100808354040283529160200191611a0b565b820191906000526020600020905b8154815290600101906020018083116119ee57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7b90614568565b60405180910390fd5b6000805b600280549050811015611b255760028181548110611aa957611aa8614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b145781611b1190614adc565b91505b80611b1e90614adc565b9050611a88565b5080915050919050565b611b3761282e565b73ffffffffffffffffffffffffffffffffffffffff16611b55611c69565b73ffffffffffffffffffffffffffffffffffffffff1614611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290614628565b60405180910390fd5b611bb56000612dfd565b565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611be561282e565b73ffffffffffffffffffffffffffffffffffffffff16611c03611c69565b73ffffffffffffffffffffffffffffffffffffffff1614611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5090614628565b60405180910390fd5b600a6000905580600b8190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611ca290614a79565b80601f0160208091040260200160405190810160405280929190818152602001828054611cce90614a79565b8015611d1b5780601f10611cf057610100808354040283529160200191611d1b565b820191906000526020600020905b815481529060010190602001808311611cfe57829003601f168201915b5050505050905090565b600d6020528060005260406000206000915090505481565b611d4561282e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90614508565b60405180910390fd5b8060046000611dc061282e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e6d61282e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611eb291906143b0565b60405180910390a35050565b600a5481565b611ed5611ecf61282e565b83612a3a565b611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b906146c8565b60405180910390fd5b611f2084848484612ec3565b50505050565b611f2e61282e565b73ffffffffffffffffffffffffffffffffffffffff16611f4c611c69565b73ffffffffffffffffffffffffffffffffffffffff1614611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614628565b60405180910390fd5b80600a8190555050565b6000611fb661282e565b604051602001611fc69190614283565b6040516020818303038152906040529050612033611fec611fe686612f1f565b83612db3565b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612de6565b612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990614428565b60405180910390fd5b8385600d600061208061282e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120c59190614892565b1115612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd906144c8565b60405180910390fd5b3466b1a2bc2ec500008661211a9190614919565b1461215a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612151906145a8565b60405180910390fd5b84600d600061216761282e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b09190614892565b925050819055506000600280549050905060005b868110156121fb576121e86121d761282e565b82846121e39190614892565b612836565b80806121f390614adc565b9150506121c4565b50505050505050565b606061220f826128f9565b61224e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612245906145c8565b60405180910390fd5b600661225983612f1f565b60405160200161226a9291906142ee565b6040516020818303038152906040529050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122ae61282e565b73ffffffffffffffffffffffffffffffffffffffff166122cc611c69565b73ffffffffffffffffffffffffffffffffffffffff1614612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990614628565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016123de9190614327565b60206040518083038186803b1580156123f657600080fd5b505afa15801561240a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242e9190613b24565b73ffffffffffffffffffffffffffffffffffffffff1614806124995750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124a85760019150506124b6565b6124b28484613080565b9150505b92915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124ea61282e565b73ffffffffffffffffffffffffffffffffffffffff16612508611c69565b73ffffffffffffffffffffffffffffffffffffffff161461255e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255590614628565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c5906144a8565b60405180910390fd5b6125d781612dfd565b50565b60005b815181101561261e5761260b84848484815181106125fe576125fd614c11565b5b60200260200101516110ad565b808061261690614adc565b9150506125dd565b50505050565b600b81565b61263161282e565b73ffffffffffffffffffffffffffffffffffffffff1661264f611c69565b73ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c90614628565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061281757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612827575061282682613114565b5b9050919050565b600033905090565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006002805490508210801561297a5750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061293657612935614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129f4836117fd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a45826128f9565b612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b90614528565b60405180910390fd5b6000612a8f836117fd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612afe57508373ffffffffffffffffffffffffffffffffffffffff16612ae684610cf9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b0f5750612b0e8185612366565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b38826117fd565b73ffffffffffffffffffffffffffffffffffffffff1614612b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8590614648565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf5906144e8565b60405180910390fd5b612c0983838361317e565b612c14600082612981565b8160028281548110612c2957612c28614c11565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612cdc826117fd565b9050612cea8160008461317e565b612cf5600083612981565b600060028381548110612d0b57612d0a614c11565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008183604051602001612dc89291906142ca565b60405160208183030381529060405280519060200120905092915050565b6000612df582600a5485613183565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ece848484612b18565b612eda8484848461319a565b612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1090614488565b60405180910390fd5b50505050565b60606000821415612f67576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061307b565b600082905060005b60008214612f99578080612f8290614adc565b915050600a82612f9291906148e8565b9150612f6f565b60008167ffffffffffffffff811115612fb557612fb4614c40565b5b6040519080825280601f01601f191660200182016040528015612fe75781602001600182028036833780820191505090505b5090505b60008514613074576001826130009190614973565b9150600a8561300f9190614b53565b603061301b9190614892565b60f81b81838151811061303157613030614c11565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561306d91906148e8565b9450612feb565b8093505050505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6000826131908584613331565b1490509392505050565b60006131bb8473ffffffffffffffffffffffffffffffffffffffff166133e4565b15613324578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131e461282e565b8786866040518563ffffffff1660e01b81526004016132069493929190614342565b602060405180830381600087803b15801561322057600080fd5b505af192505050801561325157506040513d601f19601f8201168201806040525081019061324e9190613af7565b60015b6132d4573d8060008114613281576040519150601f19603f3d011682016040523d82523d6000602084013e613286565b606091505b506000815114156132cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c390614488565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613329565b600190505b949350505050565b60008082905060005b84518110156133d957600085828151811061335857613357614c11565b5b6020026020010151905080831161339957828160405160200161337c92919061429e565b6040516020818303038152906040528051906020012092506133c5565b80836040516020016133ac92919061429e565b6040516020818303038152906040528051906020012092505b5080806133d190614adc565b91505061333a565b508091505092915050565b600080823b905060008111915050919050565b82805461340390614a79565b90600052602060002090601f016020900481019282613425576000855561346c565b82601f1061343e57805160ff191683800117855561346c565b8280016001018555821561346c579182015b8281111561346b578251825591602001919060010190613450565b5b509050613479919061347d565b5090565b5b8082111561349657600081600090555060010161347e565b5090565b60006134ad6134a884614768565b614743565b905080838252602082019050828560208602820111156134d0576134cf614c79565b5b60005b8581101561350057816134e68882613742565b8452602084019350602083019250506001810190506134d3565b5050509392505050565b600061351d61351884614794565b614743565b90508281526020810184848401111561353957613538614c7e565b5b613544848285614a37565b509392505050565b600061355f61355a846147c5565b614743565b90508281526020810184848401111561357b5761357a614c7e565b5b613586848285614a37565b509392505050565b60008135905061359d816152c3565b92915050565b60008083601f8401126135b9576135b8614c74565b5b8235905067ffffffffffffffff8111156135d6576135d5614c6f565b5b6020830191508360208202830111156135f2576135f1614c79565b5b9250929050565b60008083601f84011261360f5761360e614c74565b5b8235905067ffffffffffffffff81111561362c5761362b614c6f565b5b60208301915083602082028301111561364857613647614c79565b5b9250929050565b600082601f83011261366457613663614c74565b5b813561367484826020860161349a565b91505092915050565b60008135905061368c816152da565b92915050565b6000813590506136a1816152f1565b92915050565b6000813590506136b681615308565b92915050565b6000815190506136cb81615308565b92915050565b600082601f8301126136e6576136e5614c74565b5b81356136f684826020860161350a565b91505092915050565b60008151905061370e8161531f565b92915050565b600082601f83011261372957613728614c74565b5b813561373984826020860161354c565b91505092915050565b60008135905061375181615336565b92915050565b60008151905061376681615336565b92915050565b60006020828403121561378257613781614c88565b5b60006137908482850161358e565b91505092915050565b600080604083850312156137b0576137af614c88565b5b60006137be8582860161358e565b92505060206137cf8582860161358e565b9150509250929050565b6000806000606084860312156137f2576137f1614c88565b5b60006138008682870161358e565b93505060206138118682870161358e565b925050604084013567ffffffffffffffff81111561383257613831614c83565b5b61383e8682870161364f565b9150509250925092565b6000806000806080858703121561386257613861614c88565b5b60006138708782880161358e565b94505060206138818782880161358e565b935050604085013567ffffffffffffffff8111156138a2576138a1614c83565b5b6138ae8782880161364f565b925050606085013567ffffffffffffffff8111156138cf576138ce614c83565b5b6138db878288016136d1565b91505092959194509250565b600080600060608486031215613900576138ff614c88565b5b600061390e8682870161358e565b935050602061391f8682870161358e565b925050604061393086828701613742565b9150509250925092565b6000806000806080858703121561395457613953614c88565b5b60006139628782880161358e565b94505060206139738782880161358e565b935050604061398487828801613742565b925050606085013567ffffffffffffffff8111156139a5576139a4614c83565b5b6139b1878288016136d1565b91505092959194509250565b6000806000604084860312156139d6576139d5614c88565b5b60006139e48682870161358e565b935050602084013567ffffffffffffffff811115613a0557613a04614c83565b5b613a11868287016135f9565b92509250509250925092565b60008060408385031215613a3457613a33614c88565b5b6000613a428582860161358e565b9250506020613a538582860161367d565b9150509250929050565b60008060408385031215613a7457613a73614c88565b5b6000613a828582860161358e565b9250506020613a9385828601613742565b9150509250929050565b600060208284031215613ab357613ab2614c88565b5b6000613ac184828501613692565b91505092915050565b600060208284031215613ae057613adf614c88565b5b6000613aee848285016136a7565b91505092915050565b600060208284031215613b0d57613b0c614c88565b5b6000613b1b848285016136bc565b91505092915050565b600060208284031215613b3a57613b39614c88565b5b6000613b48848285016136ff565b91505092915050565b600060208284031215613b6757613b66614c88565b5b600082013567ffffffffffffffff811115613b8557613b84614c83565b5b613b9184828501613714565b91505092915050565b600080600060408486031215613bb357613bb2614c88565b5b600084013567ffffffffffffffff811115613bd157613bd0614c83565b5b613bdd86828701613714565b935050602084013567ffffffffffffffff811115613bfe57613bfd614c83565b5b613c0a868287016135a3565b92509250509250925092565b600060208284031215613c2c57613c2b614c88565b5b6000613c3a84828501613742565b91505092915050565b600060208284031215613c5957613c58614c88565b5b6000613c6784828501613757565b91505092915050565b60008060008060608587031215613c8a57613c89614c88565b5b6000613c9887828801613742565b9450506020613ca987828801613742565b935050604085013567ffffffffffffffff811115613cca57613cc9614c83565b5b613cd6878288016135a3565b925092505092959194509250565b6000613cf08383614265565b60208301905092915050565b613d05816149a7565b82525050565b613d1c613d17826149a7565b614b25565b82525050565b6000613d2d8261481b565b613d378185614849565b9350613d42836147f6565b8060005b83811015613d73578151613d5a8882613ce4565b9750613d658361483c565b925050600181019050613d46565b5085935050505092915050565b613d89816149b9565b82525050565b613d98816149c5565b82525050565b613daf613daa826149c5565b614b37565b82525050565b6000613dc082614826565b613dca818561485a565b9350613dda818560208601614a46565b613de381614c8d565b840191505092915050565b6000613df982614831565b613e038185614876565b9350613e13818560208601614a46565b613e1c81614c8d565b840191505092915050565b6000613e3282614831565b613e3c8185614887565b9350613e4c818560208601614a46565b80840191505092915050565b60008154613e6581614a79565b613e6f8186614887565b94506001821660008114613e8a5760018114613e9b57613ece565b60ff19831686528186019350613ece565b613ea485614806565b60005b83811015613ec657815481890152600182019150602081019050613ea7565b838801955050505b50505092915050565b6000613ee4601783614876565b9150613eef82614cab565b602082019050919050565b6000613f07602383614876565b9150613f1282614cd4565b604082019050919050565b6000613f2a601383614876565b9150613f3582614d23565b602082019050919050565b6000613f4d602b83614876565b9150613f5882614d4c565b604082019050919050565b6000613f70603283614876565b9150613f7b82614d9b565b604082019050919050565b6000613f93602683614876565b9150613f9e82614dea565b604082019050919050565b6000613fb6601883614876565b9150613fc182614e39565b602082019050919050565b6000613fd9602483614876565b9150613fe482614e62565b604082019050919050565b6000613ffc601983614876565b915061400782614eb1565b602082019050919050565b600061401f602c83614876565b915061402a82614eda565b604082019050919050565b6000614042603883614876565b915061404d82614f29565b604082019050919050565b6000614065602a83614876565b915061407082614f78565b604082019050919050565b6000614088602983614876565b915061409382614fc7565b604082019050919050565b60006140ab601783614876565b91506140b682615016565b602082019050919050565b60006140ce601583614876565b91506140d98261503f565b602082019050919050565b60006140f1602c83614876565b91506140fc82615068565b604082019050919050565b6000614114601b83614876565b915061411f826150b7565b602082019050919050565b6000614137602083614876565b9150614142826150e0565b602082019050919050565b600061415a602983614876565b915061416582615109565b604082019050919050565b600061417d601583614876565b915061418882615158565b602082019050919050565b60006141a0602183614876565b91506141ab82615181565b604082019050919050565b60006141c3601783614876565b91506141ce826151d0565b602082019050919050565b60006141e660008361486b565b91506141f1826151f9565b600082019050919050565b6000614209603183614876565b9150614214826151fc565b604082019050919050565b600061422c601c83614876565b91506142378261524b565b602082019050919050565b600061424f602c83614876565b915061425a82615274565b604082019050919050565b61426e81614a2d565b82525050565b61427d81614a2d565b82525050565b600061428f8284613d0b565b60148201915081905092915050565b60006142aa8285613d9e565b6020820191506142ba8284613d9e565b6020820191508190509392505050565b60006142d68285613e27565b91506142e28284613e27565b91508190509392505050565b60006142fa8285613e58565b91506143068284613e27565b91508190509392505050565b600061431d826141d9565b9150819050919050565b600060208201905061433c6000830184613cfc565b92915050565b60006080820190506143576000830187613cfc565b6143646020830186613cfc565b6143716040830185614274565b81810360608301526143838184613db5565b905095945050505050565b600060208201905081810360008301526143a88184613d22565b905092915050565b60006020820190506143c56000830184613d80565b92915050565b60006020820190506143e06000830184613d8f565b92915050565b600060208201905081810360008301526144008184613dee565b905092915050565b6000602082019050818103600083015261442181613ed7565b9050919050565b6000602082019050818103600083015261444181613efa565b9050919050565b6000602082019050818103600083015261446181613f1d565b9050919050565b6000602082019050818103600083015261448181613f40565b9050919050565b600060208201905081810360008301526144a181613f63565b9050919050565b600060208201905081810360008301526144c181613f86565b9050919050565b600060208201905081810360008301526144e181613fa9565b9050919050565b6000602082019050818103600083015261450181613fcc565b9050919050565b6000602082019050818103600083015261452181613fef565b9050919050565b6000602082019050818103600083015261454181614012565b9050919050565b6000602082019050818103600083015261456181614035565b9050919050565b6000602082019050818103600083015261458181614058565b9050919050565b600060208201905081810360008301526145a18161407b565b9050919050565b600060208201905081810360008301526145c18161409e565b9050919050565b600060208201905081810360008301526145e1816140c1565b9050919050565b60006020820190508181036000830152614601816140e4565b9050919050565b6000602082019050818103600083015261462181614107565b9050919050565b600060208201905081810360008301526146418161412a565b9050919050565b600060208201905081810360008301526146618161414d565b9050919050565b6000602082019050818103600083015261468181614170565b9050919050565b600060208201905081810360008301526146a181614193565b9050919050565b600060208201905081810360008301526146c1816141b6565b9050919050565b600060208201905081810360008301526146e1816141fc565b9050919050565b600060208201905081810360008301526147018161421f565b9050919050565b6000602082019050818103600083015261472181614242565b9050919050565b600060208201905061473d6000830184614274565b92915050565b600061474d61475e565b90506147598282614aab565b919050565b6000604051905090565b600067ffffffffffffffff82111561478357614782614c40565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147af576147ae614c40565b5b6147b882614c8d565b9050602081019050919050565b600067ffffffffffffffff8211156147e0576147df614c40565b5b6147e982614c8d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061489d82614a2d565b91506148a883614a2d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148dd576148dc614b84565b5b828201905092915050565b60006148f382614a2d565b91506148fe83614a2d565b92508261490e5761490d614bb3565b5b828204905092915050565b600061492482614a2d565b915061492f83614a2d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561496857614967614b84565b5b828202905092915050565b600061497e82614a2d565b915061498983614a2d565b92508282101561499c5761499b614b84565b5b828203905092915050565b60006149b282614a0d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614a06826149a7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a64578082015181840152602081019050614a49565b83811115614a73576000848401525b50505050565b60006002820490506001821680614a9157607f821691505b60208210811415614aa557614aa4614be2565b5b50919050565b614ab482614c8d565b810181811067ffffffffffffffff82111715614ad357614ad2614c40565b5b80604052505050565b6000614ae782614a2d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b1a57614b19614b84565b5b600182019050919050565b6000614b3082614b41565b9050919050565b6000819050919050565b6000614b4c82614c9e565b9050919050565b6000614b5e82614a2d565b9150614b6983614a2d565b925082614b7957614b78614bb3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4661696c656420746f2073656e6420746f20736372742e000000000000000000600082015250565b7f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863656564732077686974656c69737420737570706c790000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f76696465642e000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f57617374656c616e64206e6f74206578706c6f72656420796574210000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420617070726f76656420746f206275726e2e0000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f526573657276657320616c72656164792074616b656e2e000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45786365656473206d617820706572207472616e73616374696f6e2e00000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6152cc816149a7565b81146152d757600080fd5b50565b6152e3816149b9565b81146152ee57600080fd5b50565b6152fa816149c5565b811461530557600080fd5b50565b615311816149cf565b811461531c57600080fd5b50565b615328816149fb565b811461533357600080fd5b50565b61533f81614a2d565b811461534a57600080fd5b5056fea26469706673582212207b30d27c8e84a278b33cfcce48ca55c6d2f0879efc3905106a94825215b501b364736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000659724a5293127789660734d64c18254e7dbd180000000000000000000000000659724a5293127789660734d64c18254e7dbd180000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a5037424d50374e3956664d5755545135744258706b5555425969566d344576725770615874344d754437462f00000000000000000000
Deployed Bytecode
0x6080604052600436106102885760003560e01c80636352211e1161015a578063b88d4fde116100c1578063e985e9c51161007a578063e985e9c5146109e8578063eac6365514610a25578063f2fde38b14610a50578063f3993d1114610a79578063f43a22dc14610aa2578063f73c814b14610acd57610288565b8063b88d4fde146108e9578063bd32fb6614610912578063c4be5b591461093b578063c87b56dd14610957578063cd7c032614610994578063d26ea6c0146109bf57610288565b80638cf7be7e116101135780638cf7be7e146107d95780638da5cb5b1461080257806395d89b411461082d5780639ec00c9514610858578063a22cb46514610895578063aa98e0c6146108be57610288565b80636352211e146106b557806366fddfa9146106f25780636c0360eb1461072f57806370a082311461075a578063715018a61461079757806385013dad146107ae57610288565b80632f745c59116101fe578063438b6300116101b7578063438b63001461056f5780634d44660c146105ac5780634f6ccce7146105e957806355f804b3146106265780635a4fee301461064f5780635bab26e21461067857610288565b80632f745c591461047357806332cb6b0c146104b05780633c8da588146104db5780633ccfd60b1461050657806342842e0e1461051d57806342966c681461054657610288565b8063095ea7b311610250578063095ea7b3146103745780631328afd01461039d57806316220340146103da57806318160ddd1461040357806323b872dd1461042e5780632db115441461045757610288565b806301ffc9a71461028d578063029877b6146102ca57806306fdde03146102e1578063081812fc1461030c5780630922f9c514610349575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613aca565b610af6565b6040516102c191906143b0565b60405180910390f35b3480156102d657600080fd5b506102df610b70565b005b3480156102ed57600080fd5b506102f6610c67565b60405161030391906143e6565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190613c16565b610cf9565b6040516103409190614327565b60405180910390f35b34801561035557600080fd5b5061035e610d7e565b60405161036b9190614728565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190613a5d565b610d83565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190613c16565b610e9b565b6040516103d19190614728565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc919061376c565b610fe0565b005b34801561040f57600080fd5b506104186110a0565b6040516104259190614728565b60405180910390f35b34801561043a57600080fd5b50610455600480360381019061045091906138e7565b6110ad565b005b610471600480360381019061046c9190613c16565b61110d565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613a5d565b61123c565b6040516104a79190614728565b60405180910390f35b3480156104bc57600080fd5b506104c5611381565b6040516104d29190614728565b60405180910390f35b3480156104e757600080fd5b506104f0611387565b6040516104fd9190614728565b60405180910390f35b34801561051257600080fd5b5061051b611392565b005b34801561052957600080fd5b50610544600480360381019061053f91906138e7565b611463565b005b34801561055257600080fd5b5061056d60048036038101906105689190613c16565b611483565b005b34801561057b57600080fd5b506105966004803603810190610591919061376c565b6114df565b6040516105a3919061438e565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce91906139bd565b6115e9565b6040516105e091906143b0565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613c16565b6116aa565b60405161061d9190614728565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190613b51565b6116fb565b005b34801561065b57600080fd5b5061067660048036038101906106719190613848565b611791565b005b34801561068457600080fd5b5061069f600480360381019061069a919061376c565b6117dd565b6040516106ac91906143b0565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613c16565b6117fd565b6040516106e99190614327565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613b9a565b6118ba565b60405161072691906143e6565b60405180910390f35b34801561073b57600080fd5b50610744611985565b60405161075191906143e6565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c919061376c565b611a13565b60405161078e9190614728565b60405180910390f35b3480156107a357600080fd5b506107ac611b2f565b005b3480156107ba57600080fd5b506107c3611bb7565b6040516107d09190614327565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190613c16565b611bdd565b005b34801561080e57600080fd5b50610817611c69565b6040516108249190614327565b60405180910390f35b34801561083957600080fd5b50610842611c93565b60405161084f91906143e6565b60405180910390f35b34801561086457600080fd5b5061087f600480360381019061087a919061376c565b611d25565b60405161088c9190614728565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b79190613a1d565b611d3d565b005b3480156108ca57600080fd5b506108d3611ebe565b6040516108e091906143cb565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b919061393a565b611ec4565b005b34801561091e57600080fd5b5061093960048036038101906109349190613a9d565b611f26565b005b61095560048036038101906109509190613c70565b611fac565b005b34801561096357600080fd5b5061097e60048036038101906109799190613c16565b612204565b60405161098b91906143e6565b60405180910390f35b3480156109a057600080fd5b506109a9612280565b6040516109b69190614327565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e1919061376c565b6122a6565b005b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613799565b612366565b604051610a1c91906143b0565b60405180910390f35b348015610a3157600080fd5b50610a3a6124bc565b604051610a479190614327565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a72919061376c565b6124e2565b005b348015610a8557600080fd5b50610aa06004803603810190610a9b91906137d9565b6125da565b005b348015610aae57600080fd5b50610ab7612624565b604051610ac49190614728565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef919061376c565b612629565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b695750610b688261274c565b5b9050919050565b610b7861282e565b73ffffffffffffffffffffffffffffffffffffffff16610b96611c69565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390614628565b60405180910390fd5b600060028054905014610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b906146a8565b60405180910390fd5b60005b6005811015610c6457610c51610c4b61282e565b82612836565b8080610c5c90614adc565b915050610c37565b50565b606060008054610c7690614a79565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca290614a79565b8015610cef5780601f10610cc457610100808354040283529160200191610cef565b820191906000526020600020905b815481529060010190602001808311610cd257829003601f168201915b5050505050905090565b6000610d04826128f9565b610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a906145e8565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600581565b6000610d8e826117fd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df690614688565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e1e61282e565b73ffffffffffffffffffffffffffffffffffffffff161480610e4d5750610e4c81610e4761282e565b612366565b5b610e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8390614548565b60405180910390fd5b610e968383612981565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614608565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631328afd0836040518263ffffffff1660e01b8152600401610f899190614728565b60206040518083038186803b158015610fa157600080fd5b505afa158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd99190613c43565b9050919050565b610fe861282e565b73ffffffffffffffffffffffffffffffffffffffff16611006611c69565b73ffffffffffffffffffffffffffffffffffffffff161461105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105390614628565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600280549050905090565b6110be6110b861282e565b82612a3a565b6110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f4906146c8565b60405180910390fd5b611108838383612b18565b505050565b6000600280549050905061271082826111269190614892565b10611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614448565b60405180910390fd5b600b82106111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a0906146e8565b60405180910390fd5b3466b1a2bc2ec50000836111bd9190614919565b146111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f4906145a8565b60405180910390fd5b60005b828110156112375761122461121361282e565b828461121f9190614892565b612836565b808061122f90614adc565b915050611200565b505050565b600061124783611a13565b8210611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90614468565b60405180910390fd5b6000805b60028054905081101561133f57600281815481106112ad576112ac614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561132c578382141561131d57809250505061137b565b818061132890614adc565b9250505b808061133790614adc565b91505061128c565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290614468565b60405180910390fd5b92915050565b600b5481565b66b1a2bc2ec5000081565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516113da90614312565b60006040518083038185875af1925050503d8060008114611417576040519150601f19603f3d011682016040523d82523d6000602084013e61141c565b606091505b5050905080611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614408565b60405180910390fd5b50565b61147e83838360405180602001604052806000815250611ec4565b505050565b61149461148e61282e565b82612a3a565b6114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90614668565b60405180910390fd5b6114dc81612cd1565b50565b606060006114ec83611a13565b9050600081141561154957600067ffffffffffffffff81111561151257611511614c40565b5b6040519080825280602002602001820160405280156115405781602001602082028036833780820191505090505b509150506115e4565b60008167ffffffffffffffff81111561156557611564614c40565b5b6040519080825280602002602001820160405280156115935781602001602082028036833780820191505090505b50905060005b828110156115dd576115ab858261123c565b8282815181106115be576115bd614c11565b5b60200260200101818152505080806115d590614adc565b915050611599565b5080925050505b919050565b6000805b8383905081101561169d578473ffffffffffffffffffffffffffffffffffffffff16600285858481811061162457611623614c11565b5b905060200201358154811061163c5761163b614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168c5760009150506116a3565b8061169690614adc565b90506115ed565b50600190505b9392505050565b600060028054905082106116f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ea90614708565b60405180910390fd5b819050919050565b61170361282e565b73ffffffffffffffffffffffffffffffffffffffff16611721611c69565b73ffffffffffffffffffffffffffffffffffffffff1614611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90614628565b60405180910390fd5b806006908051906020019061178d9291906133f7565b5050565b60005b82518110156117d6576117c385858584815181106117b5576117b4614c11565b5b602002602001015185611ec4565b80806117ce90614adc565b915050611794565b5050505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000806002838154811061181457611813614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890614588565b60405180910390fd5b80915050919050565b606060006118c661282e565b6040516020016118d69190614283565b604051602081830303815290604052905061193b6118f48683612db3565b858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612de6565b61197a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197190614428565b60405180910390fd5b849150509392505050565b6006805461199290614a79565b80601f01602080910402602001604051908101604052809291908181526020018280546119be90614a79565b8015611a0b5780601f106119e057610100808354040283529160200191611a0b565b820191906000526020600020905b8154815290600101906020018083116119ee57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7b90614568565b60405180910390fd5b6000805b600280549050811015611b255760028181548110611aa957611aa8614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b145781611b1190614adc565b91505b80611b1e90614adc565b9050611a88565b5080915050919050565b611b3761282e565b73ffffffffffffffffffffffffffffffffffffffff16611b55611c69565b73ffffffffffffffffffffffffffffffffffffffff1614611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290614628565b60405180910390fd5b611bb56000612dfd565b565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611be561282e565b73ffffffffffffffffffffffffffffffffffffffff16611c03611c69565b73ffffffffffffffffffffffffffffffffffffffff1614611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5090614628565b60405180910390fd5b600a6000905580600b8190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611ca290614a79565b80601f0160208091040260200160405190810160405280929190818152602001828054611cce90614a79565b8015611d1b5780601f10611cf057610100808354040283529160200191611d1b565b820191906000526020600020905b815481529060010190602001808311611cfe57829003601f168201915b5050505050905090565b600d6020528060005260406000206000915090505481565b611d4561282e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90614508565b60405180910390fd5b8060046000611dc061282e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e6d61282e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611eb291906143b0565b60405180910390a35050565b600a5481565b611ed5611ecf61282e565b83612a3a565b611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b906146c8565b60405180910390fd5b611f2084848484612ec3565b50505050565b611f2e61282e565b73ffffffffffffffffffffffffffffffffffffffff16611f4c611c69565b73ffffffffffffffffffffffffffffffffffffffff1614611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614628565b60405180910390fd5b80600a8190555050565b6000611fb661282e565b604051602001611fc69190614283565b6040516020818303038152906040529050612033611fec611fe686612f1f565b83612db3565b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612de6565b612072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206990614428565b60405180910390fd5b8385600d600061208061282e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120c59190614892565b1115612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd906144c8565b60405180910390fd5b3466b1a2bc2ec500008661211a9190614919565b1461215a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612151906145a8565b60405180910390fd5b84600d600061216761282e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b09190614892565b925050819055506000600280549050905060005b868110156121fb576121e86121d761282e565b82846121e39190614892565b612836565b80806121f390614adc565b9150506121c4565b50505050505050565b606061220f826128f9565b61224e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612245906145c8565b60405180910390fd5b600661225983612f1f565b60405160200161226a9291906142ee565b6040516020818303038152906040529050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122ae61282e565b73ffffffffffffffffffffffffffffffffffffffff166122cc611c69565b73ffffffffffffffffffffffffffffffffffffffff1614612322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231990614628565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016123de9190614327565b60206040518083038186803b1580156123f657600080fd5b505afa15801561240a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242e9190613b24565b73ffffffffffffffffffffffffffffffffffffffff1614806124995750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156124a85760019150506124b6565b6124b28484613080565b9150505b92915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124ea61282e565b73ffffffffffffffffffffffffffffffffffffffff16612508611c69565b73ffffffffffffffffffffffffffffffffffffffff161461255e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255590614628565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c5906144a8565b60405180910390fd5b6125d781612dfd565b50565b60005b815181101561261e5761260b84848484815181106125fe576125fd614c11565b5b60200260200101516110ad565b808061261690614adc565b9150506125dd565b50505050565b600b81565b61263161282e565b73ffffffffffffffffffffffffffffffffffffffff1661264f611c69565b73ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c90614628565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061281757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612827575061282682613114565b5b9050919050565b600033905090565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006002805490508210801561297a5750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061293657612935614c11565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166129f4836117fd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612a45826128f9565b612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b90614528565b60405180910390fd5b6000612a8f836117fd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612afe57508373ffffffffffffffffffffffffffffffffffffffff16612ae684610cf9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612b0f5750612b0e8185612366565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612b38826117fd565b73ffffffffffffffffffffffffffffffffffffffff1614612b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8590614648565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf5906144e8565b60405180910390fd5b612c0983838361317e565b612c14600082612981565b8160028281548110612c2957612c28614c11565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612cdc826117fd565b9050612cea8160008461317e565b612cf5600083612981565b600060028381548110612d0b57612d0a614c11565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008183604051602001612dc89291906142ca565b60405160208183030381529060405280519060200120905092915050565b6000612df582600a5485613183565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ece848484612b18565b612eda8484848461319a565b612f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1090614488565b60405180910390fd5b50505050565b60606000821415612f67576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061307b565b600082905060005b60008214612f99578080612f8290614adc565b915050600a82612f9291906148e8565b9150612f6f565b60008167ffffffffffffffff811115612fb557612fb4614c40565b5b6040519080825280601f01601f191660200182016040528015612fe75781602001600182028036833780820191505090505b5090505b60008514613074576001826130009190614973565b9150600a8561300f9190614b53565b603061301b9190614892565b60f81b81838151811061303157613030614c11565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561306d91906148e8565b9450612feb565b8093505050505b919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6000826131908584613331565b1490509392505050565b60006131bb8473ffffffffffffffffffffffffffffffffffffffff166133e4565b15613324578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131e461282e565b8786866040518563ffffffff1660e01b81526004016132069493929190614342565b602060405180830381600087803b15801561322057600080fd5b505af192505050801561325157506040513d601f19601f8201168201806040525081019061324e9190613af7565b60015b6132d4573d8060008114613281576040519150601f19603f3d011682016040523d82523d6000602084013e613286565b606091505b506000815114156132cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c390614488565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613329565b600190505b949350505050565b60008082905060005b84518110156133d957600085828151811061335857613357614c11565b5b6020026020010151905080831161339957828160405160200161337c92919061429e565b6040516020818303038152906040528051906020012092506133c5565b80836040516020016133ac92919061429e565b6040516020818303038152906040528051906020012092505b5080806133d190614adc565b91505061333a565b508091505092915050565b600080823b905060008111915050919050565b82805461340390614a79565b90600052602060002090601f016020900481019282613425576000855561346c565b82601f1061343e57805160ff191683800117855561346c565b8280016001018555821561346c579182015b8281111561346b578251825591602001919060010190613450565b5b509050613479919061347d565b5090565b5b8082111561349657600081600090555060010161347e565b5090565b60006134ad6134a884614768565b614743565b905080838252602082019050828560208602820111156134d0576134cf614c79565b5b60005b8581101561350057816134e68882613742565b8452602084019350602083019250506001810190506134d3565b5050509392505050565b600061351d61351884614794565b614743565b90508281526020810184848401111561353957613538614c7e565b5b613544848285614a37565b509392505050565b600061355f61355a846147c5565b614743565b90508281526020810184848401111561357b5761357a614c7e565b5b613586848285614a37565b509392505050565b60008135905061359d816152c3565b92915050565b60008083601f8401126135b9576135b8614c74565b5b8235905067ffffffffffffffff8111156135d6576135d5614c6f565b5b6020830191508360208202830111156135f2576135f1614c79565b5b9250929050565b60008083601f84011261360f5761360e614c74565b5b8235905067ffffffffffffffff81111561362c5761362b614c6f565b5b60208301915083602082028301111561364857613647614c79565b5b9250929050565b600082601f83011261366457613663614c74565b5b813561367484826020860161349a565b91505092915050565b60008135905061368c816152da565b92915050565b6000813590506136a1816152f1565b92915050565b6000813590506136b681615308565b92915050565b6000815190506136cb81615308565b92915050565b600082601f8301126136e6576136e5614c74565b5b81356136f684826020860161350a565b91505092915050565b60008151905061370e8161531f565b92915050565b600082601f83011261372957613728614c74565b5b813561373984826020860161354c565b91505092915050565b60008135905061375181615336565b92915050565b60008151905061376681615336565b92915050565b60006020828403121561378257613781614c88565b5b60006137908482850161358e565b91505092915050565b600080604083850312156137b0576137af614c88565b5b60006137be8582860161358e565b92505060206137cf8582860161358e565b9150509250929050565b6000806000606084860312156137f2576137f1614c88565b5b60006138008682870161358e565b93505060206138118682870161358e565b925050604084013567ffffffffffffffff81111561383257613831614c83565b5b61383e8682870161364f565b9150509250925092565b6000806000806080858703121561386257613861614c88565b5b60006138708782880161358e565b94505060206138818782880161358e565b935050604085013567ffffffffffffffff8111156138a2576138a1614c83565b5b6138ae8782880161364f565b925050606085013567ffffffffffffffff8111156138cf576138ce614c83565b5b6138db878288016136d1565b91505092959194509250565b600080600060608486031215613900576138ff614c88565b5b600061390e8682870161358e565b935050602061391f8682870161358e565b925050604061393086828701613742565b9150509250925092565b6000806000806080858703121561395457613953614c88565b5b60006139628782880161358e565b94505060206139738782880161358e565b935050604061398487828801613742565b925050606085013567ffffffffffffffff8111156139a5576139a4614c83565b5b6139b1878288016136d1565b91505092959194509250565b6000806000604084860312156139d6576139d5614c88565b5b60006139e48682870161358e565b935050602084013567ffffffffffffffff811115613a0557613a04614c83565b5b613a11868287016135f9565b92509250509250925092565b60008060408385031215613a3457613a33614c88565b5b6000613a428582860161358e565b9250506020613a538582860161367d565b9150509250929050565b60008060408385031215613a7457613a73614c88565b5b6000613a828582860161358e565b9250506020613a9385828601613742565b9150509250929050565b600060208284031215613ab357613ab2614c88565b5b6000613ac184828501613692565b91505092915050565b600060208284031215613ae057613adf614c88565b5b6000613aee848285016136a7565b91505092915050565b600060208284031215613b0d57613b0c614c88565b5b6000613b1b848285016136bc565b91505092915050565b600060208284031215613b3a57613b39614c88565b5b6000613b48848285016136ff565b91505092915050565b600060208284031215613b6757613b66614c88565b5b600082013567ffffffffffffffff811115613b8557613b84614c83565b5b613b9184828501613714565b91505092915050565b600080600060408486031215613bb357613bb2614c88565b5b600084013567ffffffffffffffff811115613bd157613bd0614c83565b5b613bdd86828701613714565b935050602084013567ffffffffffffffff811115613bfe57613bfd614c83565b5b613c0a868287016135a3565b92509250509250925092565b600060208284031215613c2c57613c2b614c88565b5b6000613c3a84828501613742565b91505092915050565b600060208284031215613c5957613c58614c88565b5b6000613c6784828501613757565b91505092915050565b60008060008060608587031215613c8a57613c89614c88565b5b6000613c9887828801613742565b9450506020613ca987828801613742565b935050604085013567ffffffffffffffff811115613cca57613cc9614c83565b5b613cd6878288016135a3565b925092505092959194509250565b6000613cf08383614265565b60208301905092915050565b613d05816149a7565b82525050565b613d1c613d17826149a7565b614b25565b82525050565b6000613d2d8261481b565b613d378185614849565b9350613d42836147f6565b8060005b83811015613d73578151613d5a8882613ce4565b9750613d658361483c565b925050600181019050613d46565b5085935050505092915050565b613d89816149b9565b82525050565b613d98816149c5565b82525050565b613daf613daa826149c5565b614b37565b82525050565b6000613dc082614826565b613dca818561485a565b9350613dda818560208601614a46565b613de381614c8d565b840191505092915050565b6000613df982614831565b613e038185614876565b9350613e13818560208601614a46565b613e1c81614c8d565b840191505092915050565b6000613e3282614831565b613e3c8185614887565b9350613e4c818560208601614a46565b80840191505092915050565b60008154613e6581614a79565b613e6f8186614887565b94506001821660008114613e8a5760018114613e9b57613ece565b60ff19831686528186019350613ece565b613ea485614806565b60005b83811015613ec657815481890152600182019150602081019050613ea7565b838801955050505b50505092915050565b6000613ee4601783614876565b9150613eef82614cab565b602082019050919050565b6000613f07602383614876565b9150613f1282614cd4565b604082019050919050565b6000613f2a601383614876565b9150613f3582614d23565b602082019050919050565b6000613f4d602b83614876565b9150613f5882614d4c565b604082019050919050565b6000613f70603283614876565b9150613f7b82614d9b565b604082019050919050565b6000613f93602683614876565b9150613f9e82614dea565b604082019050919050565b6000613fb6601883614876565b9150613fc182614e39565b602082019050919050565b6000613fd9602483614876565b9150613fe482614e62565b604082019050919050565b6000613ffc601983614876565b915061400782614eb1565b602082019050919050565b600061401f602c83614876565b915061402a82614eda565b604082019050919050565b6000614042603883614876565b915061404d82614f29565b604082019050919050565b6000614065602a83614876565b915061407082614f78565b604082019050919050565b6000614088602983614876565b915061409382614fc7565b604082019050919050565b60006140ab601783614876565b91506140b682615016565b602082019050919050565b60006140ce601583614876565b91506140d98261503f565b602082019050919050565b60006140f1602c83614876565b91506140fc82615068565b604082019050919050565b6000614114601b83614876565b915061411f826150b7565b602082019050919050565b6000614137602083614876565b9150614142826150e0565b602082019050919050565b600061415a602983614876565b915061416582615109565b604082019050919050565b600061417d601583614876565b915061418882615158565b602082019050919050565b60006141a0602183614876565b91506141ab82615181565b604082019050919050565b60006141c3601783614876565b91506141ce826151d0565b602082019050919050565b60006141e660008361486b565b91506141f1826151f9565b600082019050919050565b6000614209603183614876565b9150614214826151fc565b604082019050919050565b600061422c601c83614876565b91506142378261524b565b602082019050919050565b600061424f602c83614876565b915061425a82615274565b604082019050919050565b61426e81614a2d565b82525050565b61427d81614a2d565b82525050565b600061428f8284613d0b565b60148201915081905092915050565b60006142aa8285613d9e565b6020820191506142ba8284613d9e565b6020820191508190509392505050565b60006142d68285613e27565b91506142e28284613e27565b91508190509392505050565b60006142fa8285613e58565b91506143068284613e27565b91508190509392505050565b600061431d826141d9565b9150819050919050565b600060208201905061433c6000830184613cfc565b92915050565b60006080820190506143576000830187613cfc565b6143646020830186613cfc565b6143716040830185614274565b81810360608301526143838184613db5565b905095945050505050565b600060208201905081810360008301526143a88184613d22565b905092915050565b60006020820190506143c56000830184613d80565b92915050565b60006020820190506143e06000830184613d8f565b92915050565b600060208201905081810360008301526144008184613dee565b905092915050565b6000602082019050818103600083015261442181613ed7565b9050919050565b6000602082019050818103600083015261444181613efa565b9050919050565b6000602082019050818103600083015261446181613f1d565b9050919050565b6000602082019050818103600083015261448181613f40565b9050919050565b600060208201905081810360008301526144a181613f63565b9050919050565b600060208201905081810360008301526144c181613f86565b9050919050565b600060208201905081810360008301526144e181613fa9565b9050919050565b6000602082019050818103600083015261450181613fcc565b9050919050565b6000602082019050818103600083015261452181613fef565b9050919050565b6000602082019050818103600083015261454181614012565b9050919050565b6000602082019050818103600083015261456181614035565b9050919050565b6000602082019050818103600083015261458181614058565b9050919050565b600060208201905081810360008301526145a18161407b565b9050919050565b600060208201905081810360008301526145c18161409e565b9050919050565b600060208201905081810360008301526145e1816140c1565b9050919050565b60006020820190508181036000830152614601816140e4565b9050919050565b6000602082019050818103600083015261462181614107565b9050919050565b600060208201905081810360008301526146418161412a565b9050919050565b600060208201905081810360008301526146618161414d565b9050919050565b6000602082019050818103600083015261468181614170565b9050919050565b600060208201905081810360008301526146a181614193565b9050919050565b600060208201905081810360008301526146c1816141b6565b9050919050565b600060208201905081810360008301526146e1816141fc565b9050919050565b600060208201905081810360008301526147018161421f565b9050919050565b6000602082019050818103600083015261472181614242565b9050919050565b600060208201905061473d6000830184614274565b92915050565b600061474d61475e565b90506147598282614aab565b919050565b6000604051905090565b600067ffffffffffffffff82111561478357614782614c40565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147af576147ae614c40565b5b6147b882614c8d565b9050602081019050919050565b600067ffffffffffffffff8211156147e0576147df614c40565b5b6147e982614c8d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061489d82614a2d565b91506148a883614a2d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148dd576148dc614b84565b5b828201905092915050565b60006148f382614a2d565b91506148fe83614a2d565b92508261490e5761490d614bb3565b5b828204905092915050565b600061492482614a2d565b915061492f83614a2d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561496857614967614b84565b5b828202905092915050565b600061497e82614a2d565b915061498983614a2d565b92508282101561499c5761499b614b84565b5b828203905092915050565b60006149b282614a0d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614a06826149a7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a64578082015181840152602081019050614a49565b83811115614a73576000848401525b50505050565b60006002820490506001821680614a9157607f821691505b60208210811415614aa557614aa4614be2565b5b50919050565b614ab482614c8d565b810181811067ffffffffffffffff82111715614ad357614ad2614c40565b5b80604052505050565b6000614ae782614a2d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b1a57614b19614b84565b5b600182019050919050565b6000614b3082614b41565b9050919050565b6000819050919050565b6000614b4c82614c9e565b9050919050565b6000614b5e82614a2d565b9150614b6983614a2d565b925082614b7957614b78614bb3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4661696c656420746f2073656e6420746f20736372742e000000000000000000600082015250565b7f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f457863656564732077686974656c69737420737570706c790000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f76696465642e000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f57617374656c616e64206e6f74206578706c6f72656420796574210000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420617070726f76656420746f206275726e2e0000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f526573657276657320616c72656164792074616b656e2e000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45786365656473206d617820706572207472616e73616374696f6e2e00000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6152cc816149a7565b81146152d757600080fd5b50565b6152e3816149b9565b81146152ee57600080fd5b50565b6152fa816149c5565b811461530557600080fd5b50565b615311816149cf565b811461531c57600080fd5b50565b615328816149fb565b811461533357600080fd5b50565b61533f81614a2d565b811461534a57600080fd5b5056fea26469706673582212207b30d27c8e84a278b33cfcce48ca55c6d2f0879efc3905106a94825215b501b364736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000659724a5293127789660734d64c18254e7dbd180000000000000000000000000659724a5293127789660734d64c18254e7dbd180000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a5037424d50374e3956664d5755545135744258706b5555425969566d344576725770615874344d754437462f00000000000000000000
-----Decoded View---------------
Arg [0] : _baseURI (string): ipfs://QmZP7BMP7N9VfMWUTQ5tBXpkUUBYiVm4EvrWpaXt4MuD7F/
Arg [1] : _proxyRegistryAddress (address): 0x0659724a5293127789660734d64c18254e7dbd18
Arg [2] : _SecretAdd (address): 0x0659724a5293127789660734d64c18254e7dbd18
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000659724a5293127789660734d64c18254e7dbd18
Arg [2] : 0000000000000000000000000659724a5293127789660734d64c18254e7dbd18
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [4] : 697066733a2f2f516d5a5037424d50374e3956664d5755545135744258706b55
Arg [5] : 55425969566d344576725770615874344d754437462f00000000000000000000
Deployed Bytecode Sourcemap
37416:6336:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31267:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39161:200;;;;;;;;;;;;;:::i;:::-;;19845:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20657:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37839:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20180:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41469:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38877:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31567:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21716:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41026:431;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32043:490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37733:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37897:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41877:168;;;;;;;;;;;;;:::i;:::-;;22163:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41711:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42053:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42952:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31754:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38379:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42689:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37966:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19452:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40019:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37479:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18998:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34251:103;;;;;;;;;;;;;:::i;:::-;;37582:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39519:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33600:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20014:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38017:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21037:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37679:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22419:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39369:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40344:674;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38485:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37527:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38723:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43231:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37633:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34509:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42461:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37780:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39015:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31267:224;31369:4;31408:35;31393:50;;;:11;:50;;;;:90;;;;31447:36;31471:11;31447:23;:36::i;:::-;31393:90;31386:97;;31267:224;;;:::o;39161:200::-;33831:12;:10;:12::i;:::-;33820:23;;:7;:5;:7::i;:::-;:23;;;33812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39244:1:::1;39226:7;:14;;;;:19;39218:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39288:9;39284:69;37889:1;39299;:12;39284:69;;;39331:22;39337:12;:10;:12::i;:::-;39351:1;39331:5;:22::i;:::-;39313:3;;;;;:::i;:::-;;;;39284:69;;;;39161:200::o:0;19845:100::-;19899:13;19932:5;19925:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19845:100;:::o;20657:308::-;20778:7;20825:16;20833:7;20825;:16::i;:::-;20803:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20933:15;:24;20949:7;20933:24;;;;;;;;;;;;;;;;;;;;;20926:31;;20657:308;;;:::o;37839:51::-;37889:1;37839:51;:::o;20180:411::-;20261:13;20277:23;20292:7;20277:14;:23::i;:::-;20261:39;;20325:5;20319:11;;:2;:11;;;;20311:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20419:5;20403:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;20428:37;20445:5;20452:12;:10;:12::i;:::-;20428:16;:37::i;:::-;20403:62;20381:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;20562:21;20571:2;20575:7;20562:8;:21::i;:::-;20250:341;20180:411;;:::o;41469:234::-;41532:7;41588:3;41560:32;;:16;;;;;;;;;;;:32;;;;41552:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41653:16;;;;;;;;;;;41642:44;;;41687:7;41642:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41635:60;;41469:234;;;:::o;38877:130::-;33831:12;:10;:12::i;:::-;33820:23;;:7;:5;:7::i;:::-;:23;;;33812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38982:17:::1;38963:16;;:36;;;;;;;;;;;;;;;;;;38877:130:::0;:::o;31567:110::-;31628:7;31655;:14;;;;31648:21;;31567:110;:::o;21716:376::-;21925:41;21944:12;:10;:12::i;:::-;21958:7;21925:18;:41::i;:::-;21903:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22056:28;22066:4;22072:2;22076:7;22056:9;:28::i;:::-;21716:376;;;:::o;41026:431::-;41087:19;41109:7;:14;;;;41087:36;;41164:5;41156;41142:11;:19;;;;:::i;:::-;:27;41134:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;37830:2;41212:5;:18;41204:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;41304:9;37947:10;41282:5;:18;;;;:::i;:::-;:31;41274:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41362:6;41358:92;41374:5;41370:1;:9;41358:92;;;41402:36;41408:12;:10;:12::i;:::-;41436:1;41422:11;:15;;;;:::i;:::-;41402:5;:36::i;:::-;41381:3;;;;;:::i;:::-;;;;41358:92;;;;41076:381;41026:431;:::o;32043:490::-;32140:15;32184:16;32194:5;32184:9;:16::i;:::-;32176:5;:24;32168:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32261:10;32286:6;32282:178;32298:7;:14;;;;32294:1;:18;32282:178;;;32345:7;32353:1;32345:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32336:19;;:5;:19;;;32333:116;;;32387:5;32378;:14;32375:58;;;32401:1;32394:8;;;;;;32375:58;32426:7;;;;;:::i;:::-;;;;32333:116;32314:3;;;;;:::i;:::-;;;;32282:178;;;;32472:53;;;;;;;;;;:::i;:::-;;;;;;;;32043:490;;;;;:::o;37733:38::-;;;;:::o;37897:60::-;37947:10;37897:60;:::o;41877:168::-;41917:12;41935:9;;;;;;;;;;;:14;;41957:21;41935:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41916:67;;;42002:7;41994:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41905:140;41877:168::o;22163:185::-;22301:39;22318:4;22324:2;22328:7;22301:39;;;;;;;;;;;;:16;:39::i;:::-;22163:185;;;:::o;41711:158::-;41769:41;41788:12;:10;:12::i;:::-;41802:7;41769:18;:41::i;:::-;41761:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41847:14;41853:7;41847:5;:14::i;:::-;41711:158;:::o;42053:400::-;42113:16;42142:18;42163:17;42173:6;42163:9;:17::i;:::-;42142:38;;42209:1;42195:10;:15;42191:44;;;42233:1;42219:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42212:23;;;;;42191:44;42248:25;42290:10;42276:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42248:53;;42317:9;42312:108;42332:10;42328:1;:14;42312:108;;;42378:30;42398:6;42406:1;42378:19;:30::i;:::-;42364:8;42373:1;42364:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;42344:3;;;;;:::i;:::-;;;;42312:108;;;;42437:8;42430:15;;;;42053:400;;;;:::o;42952:271::-;43041:4;43061:9;43057:135;43076:9;;:16;;43072:1;:20;43057:135;;;43142:7;43117:32;;:7;43125:9;;43135:1;43125:12;;;;;;;:::i;:::-;;;;;;;;43117:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;43114:66;;43175:5;43168:12;;;;;43114:66;43094:3;;;;:::i;:::-;;;43057:135;;;;43211:4;43204:11;;42952:271;;;;;;:::o;31754:205::-;31829:7;31865;:14;;;;31857:5;:22;31849:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;31946:5;31939:12;;31754:205;;;:::o;38379:98::-;33831:12;:10;:12::i;:::-;33820:23;;:7;:5;:7::i;:::-;:23;;;33812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38461:8:::1;38451:7;:18;;;;;;;;;;;;:::i;:::-;;38379:98:::0;:::o;42689:255::-;42819:9;42814:123;42838:9;:16;42834:1;:20;42814:123;;;42876:49;42893:5;42900:3;42905:9;42915:1;42905:12;;;;;;;;:::i;:::-;;;;;;;;42919:5;42876:16;:49::i;:::-;42856:3;;;;;:::i;:::-;;;;42814:123;;;;42689:255;;;;:::o;37966:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;19452:326::-;19569:7;19594:13;19610:7;19618;19610:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19594:32;;19676:1;19659:19;;:5;:19;;;;19637:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;19765:5;19758:12;;;19452:326;;;:::o;40019:317::-;40113:13;40139:21;40187:12;:10;:12::i;:::-;40170:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;40139:62;;40220:41;40228:25;40234:9;40245:7;40228:5;:25::i;:::-;40255:5;;40220:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:41::i;:::-;40212:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40319:9;40312:16;;;40019:317;;;;;:::o;37479:35::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18998:392::-;19120:4;19168:1;19151:19;;:5;:19;;;;19143:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19230:10;19256:6;19251:109;19268:7;:14;;;;19264:1;:18;19251:109;;;19315:7;19323:1;19315:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19306:19;;:5;:19;;;19302:46;;;19341:7;;;;:::i;:::-;;;19302:46;19284:3;;;;:::i;:::-;;;19251:109;;;;19377:5;19370:12;;;18998:392;;;:::o;34251:103::-;33831:12;:10;:12::i;:::-;33820:23;;:7;:5;:7::i;:::-;:23;;;33812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34316:30:::1;34343:1;34316:18;:30::i;:::-;34251:103::o:0;37582:44::-;;;;;;;;;;;;;:::o;39519:146::-;33831:12;:10;:12::i;:::-;33820:23;;:7;:5;:7::i;:::-;:23;;;33812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39603:19:::1;39596:26;;;39646:11;39633:10;:24;;;;39519:146:::0;:::o;33600:87::-;33646:7;33673:6;;;;;;;;;;;33666:13;;33600:87;:::o;20014:104::-;20070:13;20103:7;20096:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20014:104;:::o;38017:47::-;;;;;;;;;;;;;;;;;:::o;21037:327::-;21184:12;:10;:12::i;:::-;21172:24;;:8;:24;;;;21164:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21284:8;21239:18;:32;21258:12;:10;:12::i;:::-;21239:32;;;;;;;;;;;;;;;:42;21272:8;21239:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21337:8;21308:48;;21323:12;:10;:12::i;:::-;21308:48;;;21347:8;21308:48;;;;;;:::i;:::-;;;;;;;;21037:327;;:::o;37679:47::-;;;;:::o;22419:365::-;22608:41;22627:12;:10;:12::i;:::-;22641:7;22608:18;:41::i;:::-;22586:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22737:39;22751:4;22757:2;22761:7;22770:5;22737:13;:39::i;:::-;22419:365;;;;:::o;39369:142::-;33831:12;:10;:12::i;:::-;33820:23;;:7;:5;:7::i;:::-;:23;;;33812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39483:20:::1;39461:19;:42;;;;39369:142:::0;:::o;40344:674::-;40453:21;40501:12;:10;:12::i;:::-;40484:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;40453:62;;40534:59;40542:43;40548:27;40565:9;40548:16;:27::i;:::-;40577:7;40542:5;:43::i;:::-;40587:5;;40534:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:59::i;:::-;40526:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;40693:9;40684:5;40652:15;:29;40668:12;:10;:12::i;:::-;40652:29;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:50;;40644:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40773:9;37947:10;40751:5;:18;;;;:::i;:::-;:31;40743:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40856:5;40823:15;:29;40839:12;:10;:12::i;:::-;40823:29;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;40872:19;40894:7;:14;;;;40872:36;;40923:6;40919:92;40935:5;40931:1;:9;40919:92;;;40963:36;40969:12;:10;:12::i;:::-;40997:1;40983:11;:15;;;;:::i;:::-;40963:5;:36::i;:::-;40942:3;;;;;:::i;:::-;;;;40919:92;;;;40442:576;;40344:674;;;;:::o;38485:230::-;38551:13;38585:17;38593:8;38585:7;:17::i;:::-;38577:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;38670:7;38679:26;38696:8;38679:16;:26::i;:::-;38653:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38639:68;;38485:230;;;:::o;37527:48::-;;;;;;;;;;;;;:::o;38723:146::-;33831:12;:10;:12::i;:::-;33820:23;;:7;:5;:7::i;:::-;:23;;;33812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38840:21:::1;38817:20;;:44;;;;;;;;;;;;;;;;;;38723:146:::0;:::o;43231:356::-;43321:4;43338:34;43396:20;;;;;;;;;;;43338:79;;43474:8;43432:50;;43440:13;:21;;;43462:6;43440:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43432:50;;;:76;;;;43486:12;:22;43499:8;43486:22;;;;;;;;;;;;;;;;;;;;;;;;;43432:76;43428:93;;;43517:4;43510:11;;;;;43428:93;43539:40;43562:6;43570:8;43539:22;:40::i;:::-;43532:47;;;43231:356;;;;;:::o;37633:37::-;;;;;;;;;;;;;:::o;34509:201::-;33831:12;:10;:12::i;:::-;33820:23;;:7;:5;:7::i;:::-;:23;;;33812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34618:1:::1;34598:22;;:8;:22;;;;34590:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34674:28;34693:8;34674:18;:28::i;:::-;34509:201:::0;:::o;42461:220::-;42567:9;42562:112;42586:9;:16;42582:1;:20;42562:112;;;42624:38;42637:5;42644:3;42649:9;42659:1;42649:12;;;;;;;;:::i;:::-;;;;;;;;42624;:38::i;:::-;42604:3;;;;;:::i;:::-;;;;42562:112;;;;42461:220;;;:::o;37780:52::-;37830:2;37780:52;:::o;39015:138::-;33831:12;:10;:12::i;:::-;33820:23;;:7;:5;:7::i;:::-;:23;;;33812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39119:12:::1;:26;39132:12;39119:26;;;;;;;;;;;;;;;;;;;;;;;;;39118:27;39089:12;:26;39102:12;39089:26;;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;;;;39015:138:::0;:::o;18579:355::-;18726:4;18783:25;18768:40;;;:11;:40;;;;:105;;;;18840:33;18825:48;;;:11;:48;;;;18768:105;:158;;;;18890:36;18914:11;18890:23;:36::i;:::-;18768:158;18748:178;;18579:355;;;:::o;17568:98::-;17621:7;17648:10;17641:17;;17568:98;:::o;43595:154::-;43676:7;43689:2;43676:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43733:7;43729:2;43708:33;;43725:1;43708:33;;;;;;;;;;;;43595:154;;:::o;24331:155::-;24396:4;24430:7;:14;;;;24420:7;:24;:58;;;;;24476:1;24448:30;;:7;24456;24448:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;24420:58;24413:65;;24331:155;;;:::o;28356:174::-;28458:2;28431:15;:24;28447:7;28431:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28514:7;28510:2;28476:46;;28485:23;28500:7;28485:14;:23::i;:::-;28476:46;;;;;;;;;;;;28356:174;;:::o;24653:452::-;24782:4;24826:16;24834:7;24826;:16::i;:::-;24804:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;24925:13;24941:23;24956:7;24941:14;:23::i;:::-;24925:39;;24994:5;24983:16;;:7;:16;;;:64;;;;25040:7;25016:31;;:20;25028:7;25016:11;:20::i;:::-;:31;;;24983:64;:113;;;;25064:32;25081:5;25088:7;25064:16;:32::i;:::-;24983:113;24975:122;;;24653:452;;;;:::o;27685:553::-;27858:4;27831:31;;:23;27846:7;27831:14;:23::i;:::-;:31;;;27809:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;27964:1;27950:16;;:2;:16;;;;27942:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28020:39;28041:4;28047:2;28051:7;28020:20;:39::i;:::-;28124:29;28141:1;28145:7;28124:8;:29::i;:::-;28183:2;28164:7;28172;28164:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28222:7;28218:2;28203:27;;28212:4;28203:27;;;;;;;;;;;;27685:553;;;:::o;27016:332::-;27076:13;27092:23;27107:7;27092:14;:23::i;:::-;27076:39;;27128:48;27149:5;27164:1;27168:7;27128:20;:48::i;:::-;27217:29;27234:1;27238:7;27217:8;:29::i;:::-;27284:1;27257:7;27265;27257:16;;;;;;;;:::i;:::-;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27332:7;27328:1;27304:36;;27313:5;27304:36;;;;;;;;;;;;27065:283;27016:332;:::o;39673:168::-;39759:7;39813;39822:9;39796:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39786:47;;;;;;39779:54;;39673:168;;;;:::o;39849:162::-;39927:4;39951:52;39970:5;39977:19;;39998:4;39951:18;:52::i;:::-;39944:59;;39849:162;;;;:::o;34870:191::-;34944:16;34963:6;;;;;;;;;;;34944:25;;34989:8;34980:6;;:17;;;;;;;;;;;;;;;;;;35044:8;35013:40;;35034:8;35013:40;;;;;;;;;;;;34933:128;34870:191;:::o;23666:352::-;23823:28;23833:4;23839:2;23843:7;23823:9;:28::i;:::-;23884:48;23907:4;23913:2;23917:7;23926:5;23884:22;:48::i;:::-;23862:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;23666:352;;;;:::o;5405:723::-;5461:13;5691:1;5682:5;:10;5678:53;;;5709:10;;;;;;;;;;;;;;;;;;;;;5678:53;5741:12;5756:5;5741:20;;5772:14;5797:78;5812:1;5804:4;:9;5797:78;;5830:8;;;;;:::i;:::-;;;;5861:2;5853:10;;;;;:::i;:::-;;;5797:78;;;5885:19;5917:6;5907:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5885:39;;5935:154;5951:1;5942:5;:10;5935:154;;5979:1;5969:11;;;;;:::i;:::-;;;6046:2;6038:5;:10;;;;:::i;:::-;6025:2;:24;;;;:::i;:::-;6012:39;;5995:6;6002;5995:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6075:2;6066:11;;;;;:::i;:::-;;;5935:154;;;6113:6;6099:21;;;;;5405:723;;;;:::o;21435:214::-;21577:4;21606:18;:25;21625:5;21606:25;;;;;;;;;;;;;;;:35;21632:8;21606:35;;;;;;;;;;;;;;;;;;;;;;;;;21599:42;;21435:214;;;;:::o;9977:157::-;10062:4;10101:25;10086:40;;;:11;:40;;;;10079:47;;9977:157;;;:::o;30647:126::-;;;;:::o;35976:190::-;36101:4;36154;36125:25;36138:5;36145:4;36125:12;:25::i;:::-;:33;36118:40;;35976:190;;;;;:::o;29095:980::-;29250:4;29271:15;:2;:13;;;:15::i;:::-;29267:801;;;29340:2;29324:36;;;29383:12;:10;:12::i;:::-;29418:4;29445:7;29475:5;29324:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29303:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29699:1;29682:6;:13;:18;29678:320;;;29725:108;;;;;;;;;;:::i;:::-;;;;;;;;29678:320;29948:6;29942:13;29933:6;29929:2;29925:15;29918:38;29303:710;29573:41;;;29563:51;;;:6;:51;;;;29556:58;;;;;29267:801;30052:4;30045:11;;29095:980;;;;;;;:::o;36528:701::-;36611:7;36631:20;36654:4;36631:27;;36674:9;36669:523;36693:5;:12;36689:1;:16;36669:523;;;36727:20;36750:5;36756:1;36750:8;;;;;;;;:::i;:::-;;;;;;;;36727:31;;36793:12;36777;:28;36773:408;;36947:12;36961;36930:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36920:55;;;;;;36905:70;;36773:408;;;37137:12;37151;37120:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37110:55;;;;;;37095:70;;36773:408;36712:480;36707:3;;;;;:::i;:::-;;;;36669:523;;;;37209:12;37202:19;;;36528:701;;;;:::o;4842:193::-;4902:4;4919:9;4983:7;4971:20;4963:28;;5026:1;5019:4;:8;5012:15;;;4842:193;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:::-;2412:8;2422:6;2472:3;2465:4;2457:6;2453:17;2449:27;2439:122;;2480:79;;:::i;:::-;2439:122;2593:6;2580:20;2570:30;;2623:18;2615:6;2612:30;2609:117;;;2645:79;;:::i;:::-;2609:117;2759:4;2751:6;2747:17;2735:29;;2813:3;2805:4;2797:6;2793:17;2783:8;2779:32;2776:41;2773:128;;;2820:79;;:::i;:::-;2773:128;2339:568;;;;;:::o;2930:370::-;3001:5;3050:3;3043:4;3035:6;3031:17;3027:27;3017:122;;3058:79;;:::i;:::-;3017:122;3175:6;3162:20;3200:94;3290:3;3282:6;3275:4;3267:6;3263:17;3200:94;:::i;:::-;3191:103;;3007:293;2930:370;;;;:::o;3306:133::-;3349:5;3387:6;3374:20;3365:29;;3403:30;3427:5;3403:30;:::i;:::-;3306:133;;;;:::o;3445:139::-;3491:5;3529:6;3516:20;3507:29;;3545:33;3572:5;3545:33;:::i;:::-;3445:139;;;;:::o;3590:137::-;3635:5;3673:6;3660:20;3651:29;;3689:32;3715:5;3689:32;:::i;:::-;3590:137;;;;:::o;3733:141::-;3789:5;3820:6;3814:13;3805:22;;3836:32;3862:5;3836:32;:::i;:::-;3733:141;;;;:::o;3893:338::-;3948:5;3997:3;3990:4;3982:6;3978:17;3974:27;3964:122;;4005:79;;:::i;:::-;3964:122;4122:6;4109:20;4147:78;4221:3;4213:6;4206:4;4198:6;4194:17;4147:78;:::i;:::-;4138:87;;3954:277;3893:338;;;;:::o;4237:201::-;4323:5;4354:6;4348:13;4339:22;;4370:62;4426:5;4370:62;:::i;:::-;4237:201;;;;:::o;4458:340::-;4514:5;4563:3;4556:4;4548:6;4544:17;4540:27;4530:122;;4571:79;;:::i;:::-;4530:122;4688:6;4675:20;4713:79;4788:3;4780:6;4773:4;4765:6;4761:17;4713:79;:::i;:::-;4704:88;;4520:278;4458:340;;;;:::o;4804:139::-;4850:5;4888:6;4875:20;4866:29;;4904:33;4931:5;4904:33;:::i;:::-;4804:139;;;;:::o;4949:143::-;5006:5;5037:6;5031:13;5022:22;;5053:33;5080:5;5053:33;:::i;:::-;4949:143;;;;:::o;5098:329::-;5157:6;5206:2;5194:9;5185:7;5181:23;5177:32;5174:119;;;5212:79;;:::i;:::-;5174:119;5332:1;5357:53;5402:7;5393:6;5382:9;5378:22;5357:53;:::i;:::-;5347:63;;5303:117;5098:329;;;;:::o;5433:474::-;5501:6;5509;5558:2;5546:9;5537:7;5533:23;5529:32;5526:119;;;5564:79;;:::i;:::-;5526:119;5684:1;5709:53;5754:7;5745:6;5734:9;5730:22;5709:53;:::i;:::-;5699:63;;5655:117;5811:2;5837:53;5882:7;5873:6;5862:9;5858:22;5837:53;:::i;:::-;5827:63;;5782:118;5433:474;;;;;:::o;5913:829::-;6015:6;6023;6031;6080:2;6068:9;6059:7;6055:23;6051:32;6048:119;;;6086:79;;:::i;:::-;6048:119;6206:1;6231:53;6276:7;6267:6;6256:9;6252:22;6231:53;:::i;:::-;6221:63;;6177:117;6333:2;6359:53;6404:7;6395:6;6384:9;6380:22;6359:53;:::i;:::-;6349:63;;6304:118;6489:2;6478:9;6474:18;6461:32;6520:18;6512:6;6509:30;6506:117;;;6542:79;;:::i;:::-;6506:117;6647:78;6717:7;6708:6;6697:9;6693:22;6647:78;:::i;:::-;6637:88;;6432:303;5913:829;;;;;:::o;6748:1153::-;6868:6;6876;6884;6892;6941:3;6929:9;6920:7;6916:23;6912:33;6909:120;;;6948:79;;:::i;:::-;6909:120;7068:1;7093:53;7138:7;7129:6;7118:9;7114:22;7093:53;:::i;:::-;7083:63;;7039:117;7195:2;7221:53;7266:7;7257:6;7246:9;7242:22;7221:53;:::i;:::-;7211:63;;7166:118;7351:2;7340:9;7336:18;7323:32;7382:18;7374:6;7371:30;7368:117;;;7404:79;;:::i;:::-;7368:117;7509:78;7579:7;7570:6;7559:9;7555:22;7509:78;:::i;:::-;7499:88;;7294:303;7664:2;7653:9;7649:18;7636:32;7695:18;7687:6;7684:30;7681:117;;;7717:79;;:::i;:::-;7681:117;7822:62;7876:7;7867:6;7856:9;7852:22;7822:62;:::i;:::-;7812:72;;7607:287;6748:1153;;;;;;;:::o;7907:619::-;7984:6;7992;8000;8049:2;8037:9;8028:7;8024:23;8020:32;8017:119;;;8055:79;;:::i;:::-;8017:119;8175:1;8200:53;8245:7;8236:6;8225:9;8221:22;8200:53;:::i;:::-;8190:63;;8146:117;8302:2;8328:53;8373:7;8364:6;8353:9;8349:22;8328:53;:::i;:::-;8318:63;;8273:118;8430:2;8456:53;8501:7;8492:6;8481:9;8477:22;8456:53;:::i;:::-;8446:63;;8401:118;7907:619;;;;;:::o;8532:943::-;8627:6;8635;8643;8651;8700:3;8688:9;8679:7;8675:23;8671:33;8668:120;;;8707:79;;:::i;:::-;8668:120;8827:1;8852:53;8897:7;8888:6;8877:9;8873:22;8852:53;:::i;:::-;8842:63;;8798:117;8954:2;8980:53;9025:7;9016:6;9005:9;9001:22;8980:53;:::i;:::-;8970:63;;8925:118;9082:2;9108:53;9153:7;9144:6;9133:9;9129:22;9108:53;:::i;:::-;9098:63;;9053:118;9238:2;9227:9;9223:18;9210:32;9269:18;9261:6;9258:30;9255:117;;;9291:79;;:::i;:::-;9255:117;9396:62;9450:7;9441:6;9430:9;9426:22;9396:62;:::i;:::-;9386:72;;9181:287;8532:943;;;;;;;:::o;9481:704::-;9576:6;9584;9592;9641:2;9629:9;9620:7;9616:23;9612:32;9609:119;;;9647:79;;:::i;:::-;9609:119;9767:1;9792:53;9837:7;9828:6;9817:9;9813:22;9792:53;:::i;:::-;9782:63;;9738:117;9922:2;9911:9;9907:18;9894:32;9953:18;9945:6;9942:30;9939:117;;;9975:79;;:::i;:::-;9939:117;10088:80;10160:7;10151:6;10140:9;10136:22;10088:80;:::i;:::-;10070:98;;;;9865:313;9481:704;;;;;:::o;10191:468::-;10256:6;10264;10313:2;10301:9;10292:7;10288:23;10284:32;10281:119;;;10319:79;;:::i;:::-;10281:119;10439:1;10464:53;10509:7;10500:6;10489:9;10485:22;10464:53;:::i;:::-;10454:63;;10410:117;10566:2;10592:50;10634:7;10625:6;10614:9;10610:22;10592:50;:::i;:::-;10582:60;;10537:115;10191:468;;;;;:::o;10665:474::-;10733:6;10741;10790:2;10778:9;10769:7;10765:23;10761:32;10758:119;;;10796:79;;:::i;:::-;10758:119;10916:1;10941:53;10986:7;10977:6;10966:9;10962:22;10941:53;:::i;:::-;10931:63;;10887:117;11043:2;11069:53;11114:7;11105:6;11094:9;11090:22;11069:53;:::i;:::-;11059:63;;11014:118;10665:474;;;;;:::o;11145:329::-;11204:6;11253:2;11241:9;11232:7;11228:23;11224:32;11221:119;;;11259:79;;:::i;:::-;11221:119;11379:1;11404:53;11449:7;11440:6;11429:9;11425:22;11404:53;:::i;:::-;11394:63;;11350:117;11145:329;;;;:::o;11480:327::-;11538:6;11587:2;11575:9;11566:7;11562:23;11558:32;11555:119;;;11593:79;;:::i;:::-;11555:119;11713:1;11738:52;11782:7;11773:6;11762:9;11758:22;11738:52;:::i;:::-;11728:62;;11684:116;11480:327;;;;:::o;11813:349::-;11882:6;11931:2;11919:9;11910:7;11906:23;11902:32;11899:119;;;11937:79;;:::i;:::-;11899:119;12057:1;12082:63;12137:7;12128:6;12117:9;12113:22;12082:63;:::i;:::-;12072:73;;12028:127;11813:349;;;;:::o;12168:409::-;12267:6;12316:2;12304:9;12295:7;12291:23;12287:32;12284:119;;;12322:79;;:::i;:::-;12284:119;12442:1;12467:93;12552:7;12543:6;12532:9;12528:22;12467:93;:::i;:::-;12457:103;;12413:157;12168:409;;;;:::o;12583:509::-;12652:6;12701:2;12689:9;12680:7;12676:23;12672:32;12669:119;;;12707:79;;:::i;:::-;12669:119;12855:1;12844:9;12840:17;12827:31;12885:18;12877:6;12874:30;12871:117;;;12907:79;;:::i;:::-;12871:117;13012:63;13067:7;13058:6;13047:9;13043:22;13012:63;:::i;:::-;13002:73;;12798:287;12583:509;;;;:::o;13098:884::-;13203:6;13211;13219;13268:2;13256:9;13247:7;13243:23;13239:32;13236:119;;;13274:79;;:::i;:::-;13236:119;13422:1;13411:9;13407:17;13394:31;13452:18;13444:6;13441:30;13438:117;;;13474:79;;:::i;:::-;13438:117;13579:63;13634:7;13625:6;13614:9;13610:22;13579:63;:::i;:::-;13569:73;;13365:287;13719:2;13708:9;13704:18;13691:32;13750:18;13742:6;13739:30;13736:117;;;13772:79;;:::i;:::-;13736:117;13885:80;13957:7;13948:6;13937:9;13933:22;13885:80;:::i;:::-;13867:98;;;;13662:313;13098:884;;;;;:::o;13988:329::-;14047:6;14096:2;14084:9;14075:7;14071:23;14067:32;14064:119;;;14102:79;;:::i;:::-;14064:119;14222:1;14247:53;14292:7;14283:6;14272:9;14268:22;14247:53;:::i;:::-;14237:63;;14193:117;13988:329;;;;:::o;14323:351::-;14393:6;14442:2;14430:9;14421:7;14417:23;14413:32;14410:119;;;14448:79;;:::i;:::-;14410:119;14568:1;14593:64;14649:7;14640:6;14629:9;14625:22;14593:64;:::i;:::-;14583:74;;14539:128;14323:351;;;;:::o;14680:849::-;14784:6;14792;14800;14808;14857:2;14845:9;14836:7;14832:23;14828:32;14825:119;;;14863:79;;:::i;:::-;14825:119;14983:1;15008:53;15053:7;15044:6;15033:9;15029:22;15008:53;:::i;:::-;14998:63;;14954:117;15110:2;15136:53;15181:7;15172:6;15161:9;15157:22;15136:53;:::i;:::-;15126:63;;15081:118;15266:2;15255:9;15251:18;15238:32;15297:18;15289:6;15286:30;15283:117;;;15319:79;;:::i;:::-;15283:117;15432:80;15504:7;15495:6;15484:9;15480:22;15432:80;:::i;:::-;15414:98;;;;15209:313;14680:849;;;;;;;:::o;15535:179::-;15604:10;15625:46;15667:3;15659:6;15625:46;:::i;:::-;15703:4;15698:3;15694:14;15680:28;;15535:179;;;;:::o;15720:118::-;15807:24;15825:5;15807:24;:::i;:::-;15802:3;15795:37;15720:118;;:::o;15844:157::-;15949:45;15969:24;15987:5;15969:24;:::i;:::-;15949:45;:::i;:::-;15944:3;15937:58;15844:157;;:::o;16037:732::-;16156:3;16185:54;16233:5;16185:54;:::i;:::-;16255:86;16334:6;16329:3;16255:86;:::i;:::-;16248:93;;16365:56;16415:5;16365:56;:::i;:::-;16444:7;16475:1;16460:284;16485:6;16482:1;16479:13;16460:284;;;16561:6;16555:13;16588:63;16647:3;16632:13;16588:63;:::i;:::-;16581:70;;16674:60;16727:6;16674:60;:::i;:::-;16664:70;;16520:224;16507:1;16504;16500:9;16495:14;;16460:284;;;16464:14;16760:3;16753:10;;16161:608;;;16037:732;;;;:::o;16775:109::-;16856:21;16871:5;16856:21;:::i;:::-;16851:3;16844:34;16775:109;;:::o;16890:118::-;16977:24;16995:5;16977:24;:::i;:::-;16972:3;16965:37;16890:118;;:::o;17014:157::-;17119:45;17139:24;17157:5;17139:24;:::i;:::-;17119:45;:::i;:::-;17114:3;17107:58;17014:157;;:::o;17177:360::-;17263:3;17291:38;17323:5;17291:38;:::i;:::-;17345:70;17408:6;17403:3;17345:70;:::i;:::-;17338:77;;17424:52;17469:6;17464:3;17457:4;17450:5;17446:16;17424:52;:::i;:::-;17501:29;17523:6;17501:29;:::i;:::-;17496:3;17492:39;17485:46;;17267:270;17177:360;;;;:::o;17543:364::-;17631:3;17659:39;17692:5;17659:39;:::i;:::-;17714:71;17778:6;17773:3;17714:71;:::i;:::-;17707:78;;17794:52;17839:6;17834:3;17827:4;17820:5;17816:16;17794:52;:::i;:::-;17871:29;17893:6;17871:29;:::i;:::-;17866:3;17862:39;17855:46;;17635:272;17543:364;;;;:::o;17913:377::-;18019:3;18047:39;18080:5;18047:39;:::i;:::-;18102:89;18184:6;18179:3;18102:89;:::i;:::-;18095:96;;18200:52;18245:6;18240:3;18233:4;18226:5;18222:16;18200:52;:::i;:::-;18277:6;18272:3;18268:16;18261:23;;18023:267;17913:377;;;;:::o;18320:845::-;18423:3;18460:5;18454:12;18489:36;18515:9;18489:36;:::i;:::-;18541:89;18623:6;18618:3;18541:89;:::i;:::-;18534:96;;18661:1;18650:9;18646:17;18677:1;18672:137;;;;18823:1;18818:341;;;;18639:520;;18672:137;18756:4;18752:9;18741;18737:25;18732:3;18725:38;18792:6;18787:3;18783:16;18776:23;;18672:137;;18818:341;18885:38;18917:5;18885:38;:::i;:::-;18945:1;18959:154;18973:6;18970:1;18967:13;18959:154;;;19047:7;19041:14;19037:1;19032:3;19028:11;19021:35;19097:1;19088:7;19084:15;19073:26;;18995:4;18992:1;18988:12;18983:17;;18959:154;;;19142:6;19137:3;19133:16;19126:23;;18825:334;;18639:520;;18427:738;;18320:845;;;;:::o;19171:366::-;19313:3;19334:67;19398:2;19393:3;19334:67;:::i;:::-;19327:74;;19410:93;19499:3;19410:93;:::i;:::-;19528:2;19523:3;19519:12;19512:19;;19171:366;;;:::o;19543:::-;19685:3;19706:67;19770:2;19765:3;19706:67;:::i;:::-;19699:74;;19782:93;19871:3;19782:93;:::i;:::-;19900:2;19895:3;19891:12;19884:19;;19543:366;;;:::o;19915:::-;20057:3;20078:67;20142:2;20137:3;20078:67;:::i;:::-;20071:74;;20154:93;20243:3;20154:93;:::i;:::-;20272:2;20267:3;20263:12;20256:19;;19915:366;;;:::o;20287:::-;20429:3;20450:67;20514:2;20509:3;20450:67;:::i;:::-;20443:74;;20526:93;20615:3;20526:93;:::i;:::-;20644:2;20639:3;20635:12;20628:19;;20287:366;;;:::o;20659:::-;20801:3;20822:67;20886:2;20881:3;20822:67;:::i;:::-;20815:74;;20898:93;20987:3;20898:93;:::i;:::-;21016:2;21011:3;21007:12;21000:19;;20659:366;;;:::o;21031:::-;21173:3;21194:67;21258:2;21253:3;21194:67;:::i;:::-;21187:74;;21270:93;21359:3;21270:93;:::i;:::-;21388:2;21383:3;21379:12;21372:19;;21031:366;;;:::o;21403:::-;21545:3;21566:67;21630:2;21625:3;21566:67;:::i;:::-;21559:74;;21642:93;21731:3;21642:93;:::i;:::-;21760:2;21755:3;21751:12;21744:19;;21403:366;;;:::o;21775:::-;21917:3;21938:67;22002:2;21997:3;21938:67;:::i;:::-;21931:74;;22014:93;22103:3;22014:93;:::i;:::-;22132:2;22127:3;22123:12;22116:19;;21775:366;;;:::o;22147:::-;22289:3;22310:67;22374:2;22369:3;22310:67;:::i;:::-;22303:74;;22386:93;22475:3;22386:93;:::i;:::-;22504:2;22499:3;22495:12;22488:19;;22147:366;;;:::o;22519:::-;22661:3;22682:67;22746:2;22741:3;22682:67;:::i;:::-;22675:74;;22758:93;22847:3;22758:93;:::i;:::-;22876:2;22871:3;22867:12;22860:19;;22519:366;;;:::o;22891:::-;23033:3;23054:67;23118:2;23113:3;23054:67;:::i;:::-;23047:74;;23130:93;23219:3;23130:93;:::i;:::-;23248:2;23243:3;23239:12;23232:19;;22891:366;;;:::o;23263:::-;23405:3;23426:67;23490:2;23485:3;23426:67;:::i;:::-;23419:74;;23502:93;23591:3;23502:93;:::i;:::-;23620:2;23615:3;23611:12;23604:19;;23263:366;;;:::o;23635:::-;23777:3;23798:67;23862:2;23857:3;23798:67;:::i;:::-;23791:74;;23874:93;23963:3;23874:93;:::i;:::-;23992:2;23987:3;23983:12;23976:19;;23635:366;;;:::o;24007:::-;24149:3;24170:67;24234:2;24229:3;24170:67;:::i;:::-;24163:74;;24246:93;24335:3;24246:93;:::i;:::-;24364:2;24359:3;24355:12;24348:19;;24007:366;;;:::o;24379:::-;24521:3;24542:67;24606:2;24601:3;24542:67;:::i;:::-;24535:74;;24618:93;24707:3;24618:93;:::i;:::-;24736:2;24731:3;24727:12;24720:19;;24379:366;;;:::o;24751:::-;24893:3;24914:67;24978:2;24973:3;24914:67;:::i;:::-;24907:74;;24990:93;25079:3;24990:93;:::i;:::-;25108:2;25103:3;25099:12;25092:19;;24751:366;;;:::o;25123:::-;25265:3;25286:67;25350:2;25345:3;25286:67;:::i;:::-;25279:74;;25362:93;25451:3;25362:93;:::i;:::-;25480:2;25475:3;25471:12;25464:19;;25123:366;;;:::o;25495:::-;25637:3;25658:67;25722:2;25717:3;25658:67;:::i;:::-;25651:74;;25734:93;25823:3;25734:93;:::i;:::-;25852:2;25847:3;25843:12;25836:19;;25495:366;;;:::o;25867:::-;26009:3;26030:67;26094:2;26089:3;26030:67;:::i;:::-;26023:74;;26106:93;26195:3;26106:93;:::i;:::-;26224:2;26219:3;26215:12;26208:19;;25867:366;;;:::o;26239:::-;26381:3;26402:67;26466:2;26461:3;26402:67;:::i;:::-;26395:74;;26478:93;26567:3;26478:93;:::i;:::-;26596:2;26591:3;26587:12;26580:19;;26239:366;;;:::o;26611:::-;26753:3;26774:67;26838:2;26833:3;26774:67;:::i;:::-;26767:74;;26850:93;26939:3;26850:93;:::i;:::-;26968:2;26963:3;26959:12;26952:19;;26611:366;;;:::o;26983:::-;27125:3;27146:67;27210:2;27205:3;27146:67;:::i;:::-;27139:74;;27222:93;27311:3;27222:93;:::i;:::-;27340:2;27335:3;27331:12;27324:19;;26983:366;;;:::o;27355:398::-;27514:3;27535:83;27616:1;27611:3;27535:83;:::i;:::-;27528:90;;27627:93;27716:3;27627:93;:::i;:::-;27745:1;27740:3;27736:11;27729:18;;27355:398;;;:::o;27759:366::-;27901:3;27922:67;27986:2;27981:3;27922:67;:::i;:::-;27915:74;;27998:93;28087:3;27998:93;:::i;:::-;28116:2;28111:3;28107:12;28100:19;;27759:366;;;:::o;28131:::-;28273:3;28294:67;28358:2;28353:3;28294:67;:::i;:::-;28287:74;;28370:93;28459:3;28370:93;:::i;:::-;28488:2;28483:3;28479:12;28472:19;;28131:366;;;:::o;28503:::-;28645:3;28666:67;28730:2;28725:3;28666:67;:::i;:::-;28659:74;;28742:93;28831:3;28742:93;:::i;:::-;28860:2;28855:3;28851:12;28844:19;;28503:366;;;:::o;28875:108::-;28952:24;28970:5;28952:24;:::i;:::-;28947:3;28940:37;28875:108;;:::o;28989:118::-;29076:24;29094:5;29076:24;:::i;:::-;29071:3;29064:37;28989:118;;:::o;29113:256::-;29225:3;29240:75;29311:3;29302:6;29240:75;:::i;:::-;29340:2;29335:3;29331:12;29324:19;;29360:3;29353:10;;29113:256;;;;:::o;29375:397::-;29515:3;29530:75;29601:3;29592:6;29530:75;:::i;:::-;29630:2;29625:3;29621:12;29614:19;;29643:75;29714:3;29705:6;29643:75;:::i;:::-;29743:2;29738:3;29734:12;29727:19;;29763:3;29756:10;;29375:397;;;;;:::o;29778:435::-;29958:3;29980:95;30071:3;30062:6;29980:95;:::i;:::-;29973:102;;30092:95;30183:3;30174:6;30092:95;:::i;:::-;30085:102;;30204:3;30197:10;;29778:435;;;;;:::o;30219:429::-;30396:3;30418:92;30506:3;30497:6;30418:92;:::i;:::-;30411:99;;30527:95;30618:3;30609:6;30527:95;:::i;:::-;30520:102;;30639:3;30632:10;;30219:429;;;;;:::o;30654:379::-;30838:3;30860:147;31003:3;30860:147;:::i;:::-;30853:154;;31024:3;31017:10;;30654:379;;;:::o;31039:222::-;31132:4;31170:2;31159:9;31155:18;31147:26;;31183:71;31251:1;31240:9;31236:17;31227:6;31183:71;:::i;:::-;31039:222;;;;:::o;31267:640::-;31462:4;31500:3;31489:9;31485:19;31477:27;;31514:71;31582:1;31571:9;31567:17;31558:6;31514:71;:::i;:::-;31595:72;31663:2;31652:9;31648:18;31639:6;31595:72;:::i;:::-;31677;31745:2;31734:9;31730:18;31721:6;31677:72;:::i;:::-;31796:9;31790:4;31786:20;31781:2;31770:9;31766:18;31759:48;31824:76;31895:4;31886:6;31824:76;:::i;:::-;31816:84;;31267:640;;;;;;;:::o;31913:373::-;32056:4;32094:2;32083:9;32079:18;32071:26;;32143:9;32137:4;32133:20;32129:1;32118:9;32114:17;32107:47;32171:108;32274:4;32265:6;32171:108;:::i;:::-;32163:116;;31913:373;;;;:::o;32292:210::-;32379:4;32417:2;32406:9;32402:18;32394:26;;32430:65;32492:1;32481:9;32477:17;32468:6;32430:65;:::i;:::-;32292:210;;;;:::o;32508:222::-;32601:4;32639:2;32628:9;32624:18;32616:26;;32652:71;32720:1;32709:9;32705:17;32696:6;32652:71;:::i;:::-;32508:222;;;;:::o;32736:313::-;32849:4;32887:2;32876:9;32872:18;32864:26;;32936:9;32930:4;32926:20;32922:1;32911:9;32907:17;32900:47;32964:78;33037:4;33028:6;32964:78;:::i;:::-;32956:86;;32736:313;;;;:::o;33055:419::-;33221:4;33259:2;33248:9;33244:18;33236:26;;33308:9;33302:4;33298:20;33294:1;33283:9;33279:17;33272:47;33336:131;33462:4;33336:131;:::i;:::-;33328:139;;33055:419;;;:::o;33480:::-;33646:4;33684:2;33673:9;33669:18;33661:26;;33733:9;33727:4;33723:20;33719:1;33708:9;33704:17;33697:47;33761:131;33887:4;33761:131;:::i;:::-;33753:139;;33480:419;;;:::o;33905:::-;34071:4;34109:2;34098:9;34094:18;34086:26;;34158:9;34152:4;34148:20;34144:1;34133:9;34129:17;34122:47;34186:131;34312:4;34186:131;:::i;:::-;34178:139;;33905:419;;;:::o;34330:::-;34496:4;34534:2;34523:9;34519:18;34511:26;;34583:9;34577:4;34573:20;34569:1;34558:9;34554:17;34547:47;34611:131;34737:4;34611:131;:::i;:::-;34603:139;;34330:419;;;:::o;34755:::-;34921:4;34959:2;34948:9;34944:18;34936:26;;35008:9;35002:4;34998:20;34994:1;34983:9;34979:17;34972:47;35036:131;35162:4;35036:131;:::i;:::-;35028:139;;34755:419;;;:::o;35180:::-;35346:4;35384:2;35373:9;35369:18;35361:26;;35433:9;35427:4;35423:20;35419:1;35408:9;35404:17;35397:47;35461:131;35587:4;35461:131;:::i;:::-;35453:139;;35180:419;;;:::o;35605:::-;35771:4;35809:2;35798:9;35794:18;35786:26;;35858:9;35852:4;35848:20;35844:1;35833:9;35829:17;35822:47;35886:131;36012:4;35886:131;:::i;:::-;35878:139;;35605:419;;;:::o;36030:::-;36196:4;36234:2;36223:9;36219:18;36211:26;;36283:9;36277:4;36273:20;36269:1;36258:9;36254:17;36247:47;36311:131;36437:4;36311:131;:::i;:::-;36303:139;;36030:419;;;:::o;36455:::-;36621:4;36659:2;36648:9;36644:18;36636:26;;36708:9;36702:4;36698:20;36694:1;36683:9;36679:17;36672:47;36736:131;36862:4;36736:131;:::i;:::-;36728:139;;36455:419;;;:::o;36880:::-;37046:4;37084:2;37073:9;37069:18;37061:26;;37133:9;37127:4;37123:20;37119:1;37108:9;37104:17;37097:47;37161:131;37287:4;37161:131;:::i;:::-;37153:139;;36880:419;;;:::o;37305:::-;37471:4;37509:2;37498:9;37494:18;37486:26;;37558:9;37552:4;37548:20;37544:1;37533:9;37529:17;37522:47;37586:131;37712:4;37586:131;:::i;:::-;37578:139;;37305:419;;;:::o;37730:::-;37896:4;37934:2;37923:9;37919:18;37911:26;;37983:9;37977:4;37973:20;37969:1;37958:9;37954:17;37947:47;38011:131;38137:4;38011:131;:::i;:::-;38003:139;;37730:419;;;:::o;38155:::-;38321:4;38359:2;38348:9;38344:18;38336:26;;38408:9;38402:4;38398:20;38394:1;38383:9;38379:17;38372:47;38436:131;38562:4;38436:131;:::i;:::-;38428:139;;38155:419;;;:::o;38580:::-;38746:4;38784:2;38773:9;38769:18;38761:26;;38833:9;38827:4;38823:20;38819:1;38808:9;38804:17;38797:47;38861:131;38987:4;38861:131;:::i;:::-;38853:139;;38580:419;;;:::o;39005:::-;39171:4;39209:2;39198:9;39194:18;39186:26;;39258:9;39252:4;39248:20;39244:1;39233:9;39229:17;39222:47;39286:131;39412:4;39286:131;:::i;:::-;39278:139;;39005:419;;;:::o;39430:::-;39596:4;39634:2;39623:9;39619:18;39611:26;;39683:9;39677:4;39673:20;39669:1;39658:9;39654:17;39647:47;39711:131;39837:4;39711:131;:::i;:::-;39703:139;;39430:419;;;:::o;39855:::-;40021:4;40059:2;40048:9;40044:18;40036:26;;40108:9;40102:4;40098:20;40094:1;40083:9;40079:17;40072:47;40136:131;40262:4;40136:131;:::i;:::-;40128:139;;39855:419;;;:::o;40280:::-;40446:4;40484:2;40473:9;40469:18;40461:26;;40533:9;40527:4;40523:20;40519:1;40508:9;40504:17;40497:47;40561:131;40687:4;40561:131;:::i;:::-;40553:139;;40280:419;;;:::o;40705:::-;40871:4;40909:2;40898:9;40894:18;40886:26;;40958:9;40952:4;40948:20;40944:1;40933:9;40929:17;40922:47;40986:131;41112:4;40986:131;:::i;:::-;40978:139;;40705:419;;;:::o;41130:::-;41296:4;41334:2;41323:9;41319:18;41311:26;;41383:9;41377:4;41373:20;41369:1;41358:9;41354:17;41347:47;41411:131;41537:4;41411:131;:::i;:::-;41403:139;;41130:419;;;:::o;41555:::-;41721:4;41759:2;41748:9;41744:18;41736:26;;41808:9;41802:4;41798:20;41794:1;41783:9;41779:17;41772:47;41836:131;41962:4;41836:131;:::i;:::-;41828:139;;41555:419;;;:::o;41980:::-;42146:4;42184:2;42173:9;42169:18;42161:26;;42233:9;42227:4;42223:20;42219:1;42208:9;42204:17;42197:47;42261:131;42387:4;42261:131;:::i;:::-;42253:139;;41980:419;;;:::o;42405:::-;42571:4;42609:2;42598:9;42594:18;42586:26;;42658:9;42652:4;42648:20;42644:1;42633:9;42629:17;42622:47;42686:131;42812:4;42686:131;:::i;:::-;42678:139;;42405:419;;;:::o;42830:::-;42996:4;43034:2;43023:9;43019:18;43011:26;;43083:9;43077:4;43073:20;43069:1;43058:9;43054:17;43047:47;43111:131;43237:4;43111:131;:::i;:::-;43103:139;;42830:419;;;:::o;43255:::-;43421:4;43459:2;43448:9;43444:18;43436:26;;43508:9;43502:4;43498:20;43494:1;43483:9;43479:17;43472:47;43536:131;43662:4;43536:131;:::i;:::-;43528:139;;43255:419;;;:::o;43680:222::-;43773:4;43811:2;43800:9;43796:18;43788:26;;43824:71;43892:1;43881:9;43877:17;43868:6;43824:71;:::i;:::-;43680:222;;;;:::o;43908:129::-;43942:6;43969:20;;:::i;:::-;43959:30;;43998:33;44026:4;44018:6;43998:33;:::i;:::-;43908:129;;;:::o;44043:75::-;44076:6;44109:2;44103:9;44093:19;;44043:75;:::o;44124:311::-;44201:4;44291:18;44283:6;44280:30;44277:56;;;44313:18;;:::i;:::-;44277:56;44363:4;44355:6;44351:17;44343:25;;44423:4;44417;44413:15;44405:23;;44124:311;;;:::o;44441:307::-;44502:4;44592:18;44584:6;44581:30;44578:56;;;44614:18;;:::i;:::-;44578:56;44652:29;44674:6;44652:29;:::i;:::-;44644:37;;44736:4;44730;44726:15;44718:23;;44441:307;;;:::o;44754:308::-;44816:4;44906:18;44898:6;44895:30;44892:56;;;44928:18;;:::i;:::-;44892:56;44966:29;44988:6;44966:29;:::i;:::-;44958:37;;45050:4;45044;45040:15;45032:23;;44754:308;;;:::o;45068:132::-;45135:4;45158:3;45150:11;;45188:4;45183:3;45179:14;45171:22;;45068:132;;;:::o;45206:141::-;45255:4;45278:3;45270:11;;45301:3;45298:1;45291:14;45335:4;45332:1;45322:18;45314:26;;45206:141;;;:::o;45353:114::-;45420:6;45454:5;45448:12;45438:22;;45353:114;;;:::o;45473:98::-;45524:6;45558:5;45552:12;45542:22;;45473:98;;;:::o;45577:99::-;45629:6;45663:5;45657:12;45647:22;;45577:99;;;:::o;45682:113::-;45752:4;45784;45779:3;45775:14;45767:22;;45682:113;;;:::o;45801:184::-;45900:11;45934:6;45929:3;45922:19;45974:4;45969:3;45965:14;45950:29;;45801:184;;;;:::o;45991:168::-;46074:11;46108:6;46103:3;46096:19;46148:4;46143:3;46139:14;46124:29;;45991:168;;;;:::o;46165:147::-;46266:11;46303:3;46288:18;;46165:147;;;;:::o;46318:169::-;46402:11;46436:6;46431:3;46424:19;46476:4;46471:3;46467:14;46452:29;;46318:169;;;;:::o;46493:148::-;46595:11;46632:3;46617:18;;46493:148;;;;:::o;46647:305::-;46687:3;46706:20;46724:1;46706:20;:::i;:::-;46701:25;;46740:20;46758:1;46740:20;:::i;:::-;46735:25;;46894:1;46826:66;46822:74;46819:1;46816:81;46813:107;;;46900:18;;:::i;:::-;46813:107;46944:1;46941;46937:9;46930:16;;46647:305;;;;:::o;46958:185::-;46998:1;47015:20;47033:1;47015:20;:::i;:::-;47010:25;;47049:20;47067:1;47049:20;:::i;:::-;47044:25;;47088:1;47078:35;;47093:18;;:::i;:::-;47078:35;47135:1;47132;47128:9;47123:14;;46958:185;;;;:::o;47149:348::-;47189:7;47212:20;47230:1;47212:20;:::i;:::-;47207:25;;47246:20;47264:1;47246:20;:::i;:::-;47241:25;;47434:1;47366:66;47362:74;47359:1;47356:81;47351:1;47344:9;47337:17;47333:105;47330:131;;;47441:18;;:::i;:::-;47330:131;47489:1;47486;47482:9;47471:20;;47149:348;;;;:::o;47503:191::-;47543:4;47563:20;47581:1;47563:20;:::i;:::-;47558:25;;47597:20;47615:1;47597:20;:::i;:::-;47592:25;;47636:1;47633;47630:8;47627:34;;;47641:18;;:::i;:::-;47627:34;47686:1;47683;47679:9;47671:17;;47503:191;;;;:::o;47700:96::-;47737:7;47766:24;47784:5;47766:24;:::i;:::-;47755:35;;47700:96;;;:::o;47802:90::-;47836:7;47879:5;47872:13;47865:21;47854:32;;47802:90;;;:::o;47898:77::-;47935:7;47964:5;47953:16;;47898:77;;;:::o;47981:149::-;48017:7;48057:66;48050:5;48046:78;48035:89;;47981:149;;;:::o;48136:125::-;48202:7;48231:24;48249:5;48231:24;:::i;:::-;48220:35;;48136:125;;;:::o;48267:126::-;48304:7;48344:42;48337:5;48333:54;48322:65;;48267:126;;;:::o;48399:77::-;48436:7;48465:5;48454:16;;48399:77;;;:::o;48482:154::-;48566:6;48561:3;48556;48543:30;48628:1;48619:6;48614:3;48610:16;48603:27;48482:154;;;:::o;48642:307::-;48710:1;48720:113;48734:6;48731:1;48728:13;48720:113;;;48819:1;48814:3;48810:11;48804:18;48800:1;48795:3;48791:11;48784:39;48756:2;48753:1;48749:10;48744:15;;48720:113;;;48851:6;48848:1;48845:13;48842:101;;;48931:1;48922:6;48917:3;48913:16;48906:27;48842:101;48691:258;48642:307;;;:::o;48955:320::-;48999:6;49036:1;49030:4;49026:12;49016:22;;49083:1;49077:4;49073:12;49104:18;49094:81;;49160:4;49152:6;49148:17;49138:27;;49094:81;49222:2;49214:6;49211:14;49191:18;49188:38;49185:84;;;49241:18;;:::i;:::-;49185:84;49006:269;48955:320;;;:::o;49281:281::-;49364:27;49386:4;49364:27;:::i;:::-;49356:6;49352:40;49494:6;49482:10;49479:22;49458:18;49446:10;49443:34;49440:62;49437:88;;;49505:18;;:::i;:::-;49437:88;49545:10;49541:2;49534:22;49324:238;49281:281;;:::o;49568:233::-;49607:3;49630:24;49648:5;49630:24;:::i;:::-;49621:33;;49676:66;49669:5;49666:77;49663:103;;;49746:18;;:::i;:::-;49663:103;49793:1;49786:5;49782:13;49775:20;;49568:233;;;:::o;49807:100::-;49846:7;49875:26;49895:5;49875:26;:::i;:::-;49864:37;;49807:100;;;:::o;49913:79::-;49952:7;49981:5;49970:16;;49913:79;;;:::o;49998:94::-;50037:7;50066:20;50080:5;50066:20;:::i;:::-;50055:31;;49998:94;;;:::o;50098:176::-;50130:1;50147:20;50165:1;50147:20;:::i;:::-;50142:25;;50181:20;50199:1;50181:20;:::i;:::-;50176:25;;50220:1;50210:35;;50225:18;;:::i;:::-;50210:35;50266:1;50263;50259:9;50254:14;;50098:176;;;;:::o;50280:180::-;50328:77;50325:1;50318:88;50425:4;50422:1;50415:15;50449:4;50446:1;50439:15;50466:180;50514:77;50511:1;50504:88;50611:4;50608:1;50601:15;50635:4;50632:1;50625:15;50652:180;50700:77;50697:1;50690:88;50797:4;50794:1;50787:15;50821:4;50818:1;50811:15;50838:180;50886:77;50883:1;50876:88;50983:4;50980:1;50973:15;51007:4;51004:1;50997:15;51024:180;51072:77;51069:1;51062:88;51169:4;51166:1;51159:15;51193:4;51190:1;51183:15;51210:117;51319:1;51316;51309:12;51333:117;51442:1;51439;51432:12;51456:117;51565:1;51562;51555:12;51579:117;51688:1;51685;51678:12;51702:117;51811:1;51808;51801:12;51825:117;51934:1;51931;51924:12;51948:102;51989:6;52040:2;52036:7;52031:2;52024:5;52020:14;52016:28;52006:38;;51948:102;;;:::o;52056:94::-;52089:8;52137:5;52133:2;52129:14;52108:35;;52056:94;;;:::o;52156:173::-;52296:25;52292:1;52284:6;52280:14;52273:49;52156:173;:::o;52335:222::-;52475:34;52471:1;52463:6;52459:14;52452:58;52544:5;52539:2;52531:6;52527:15;52520:30;52335:222;:::o;52563:169::-;52703:21;52699:1;52691:6;52687:14;52680:45;52563:169;:::o;52738:230::-;52878:34;52874:1;52866:6;52862:14;52855:58;52947:13;52942:2;52934:6;52930:15;52923:38;52738:230;:::o;52974:237::-;53114:34;53110:1;53102:6;53098:14;53091:58;53183:20;53178:2;53170:6;53166:15;53159:45;52974:237;:::o;53217:225::-;53357:34;53353:1;53345:6;53341:14;53334:58;53426:8;53421:2;53413:6;53409:15;53402:33;53217:225;:::o;53448:174::-;53588:26;53584:1;53576:6;53572:14;53565:50;53448:174;:::o;53628:223::-;53768:34;53764:1;53756:6;53752:14;53745:58;53837:6;53832:2;53824:6;53820:15;53813:31;53628:223;:::o;53857:175::-;53997:27;53993:1;53985:6;53981:14;53974:51;53857:175;:::o;54038:231::-;54178:34;54174:1;54166:6;54162:14;54155:58;54247:14;54242:2;54234:6;54230:15;54223:39;54038:231;:::o;54275:243::-;54415:34;54411:1;54403:6;54399:14;54392:58;54484:26;54479:2;54471:6;54467:15;54460:51;54275:243;:::o;54524:229::-;54664:34;54660:1;54652:6;54648:14;54641:58;54733:12;54728:2;54720:6;54716:15;54709:37;54524:229;:::o;54759:228::-;54899:34;54895:1;54887:6;54883:14;54876:58;54968:11;54963:2;54955:6;54951:15;54944:36;54759:228;:::o;54993:173::-;55133:25;55129:1;55121:6;55117:14;55110:49;54993:173;:::o;55172:171::-;55312:23;55308:1;55300:6;55296:14;55289:47;55172:171;:::o;55349:231::-;55489:34;55485:1;55477:6;55473:14;55466:58;55558:14;55553:2;55545:6;55541:15;55534:39;55349:231;:::o;55586:177::-;55726:29;55722:1;55714:6;55710:14;55703:53;55586:177;:::o;55769:182::-;55909:34;55905:1;55897:6;55893:14;55886:58;55769:182;:::o;55957:228::-;56097:34;56093:1;56085:6;56081:14;56074:58;56166:11;56161:2;56153:6;56149:15;56142:36;55957:228;:::o;56191:171::-;56331:23;56327:1;56319:6;56315:14;56308:47;56191:171;:::o;56368:220::-;56508:34;56504:1;56496:6;56492:14;56485:58;56577:3;56572:2;56564:6;56560:15;56553:28;56368:220;:::o;56594:173::-;56734:25;56730:1;56722:6;56718:14;56711:49;56594:173;:::o;56773:114::-;;:::o;56893:236::-;57033:34;57029:1;57021:6;57017:14;57010:58;57102:19;57097:2;57089:6;57085:15;57078:44;56893:236;:::o;57135:178::-;57275:30;57271:1;57263:6;57259:14;57252:54;57135:178;:::o;57319:231::-;57459:34;57455:1;57447:6;57443:14;57436:58;57528:14;57523:2;57515:6;57511:15;57504:39;57319:231;:::o;57556:122::-;57629:24;57647:5;57629:24;:::i;:::-;57622:5;57619:35;57609:63;;57668:1;57665;57658:12;57609:63;57556:122;:::o;57684:116::-;57754:21;57769:5;57754:21;:::i;:::-;57747:5;57744:32;57734:60;;57790:1;57787;57780:12;57734:60;57684:116;:::o;57806:122::-;57879:24;57897:5;57879:24;:::i;:::-;57872:5;57869:35;57859:63;;57918:1;57915;57908:12;57859:63;57806:122;:::o;57934:120::-;58006:23;58023:5;58006:23;:::i;:::-;57999:5;57996:34;57986:62;;58044:1;58041;58034:12;57986:62;57934:120;:::o;58060:180::-;58162:53;58209:5;58162:53;:::i;:::-;58155:5;58152:64;58142:92;;58230:1;58227;58220:12;58142:92;58060:180;:::o;58246:122::-;58319:24;58337:5;58319:24;:::i;:::-;58312:5;58309:35;58299:63;;58358:1;58355;58348:12;58299:63;58246:122;:::o
Swarm Source
ipfs://7b30d27c8e84a278b33cfcce48ca55c6d2f0879efc3905106a94825215b501b3
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.