ERC-721
Overview
Max Total Supply
97 MOONWB
Holders
73
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 MOONWBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Moonwaterbears
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-26 */ // ___ ___ ___ ___ ____ __ __ ____ ______ ___ ____ ____ ___ ____ ____ _____ // | | | / \ / \ | \ | |__| | / || | / _]| \ | \ / _] / || \ / ___/ // | _ _ || || || _ || | | || o || | / [_ | D )| o ) / [_ | o || D )( \_ // | \_/ || O || O || | || | | || ||_| |_|| _]| / | || _]| || / \__ | // | | || || || | || ` ' || _ | | | | [_ | \ | O || [_ | _ || \ / \ | // | | || || || | | \ / | | | | | | || . \| || || | || . \ \ | // |___|___| \___/ \___/ |__|__| \_/\_/ |__|__| |__| |_____||__|\_||_____||_____||__|__||__|\_| \___| // // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; function toString(uint256 value) internal pure returns (string memory) { 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); } 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); } 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); } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; mapping(uint256 => address) private _owners; mapping(address => uint256) private _balances; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } 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; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } function _baseURI() internal view virtual returns (string memory) { return ""; } 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); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } 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); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } 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); } 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"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } 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)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } 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" ); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } 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); _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } 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; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { mapping(address => mapping(uint256 => uint256)) private _ownedTokens; mapping(uint256 => uint256) private _ownedTokensIndex; uint256[] private _allTokens; mapping(uint256 => uint256) private _allTokensIndex; function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; _ownedTokensIndex[lastTokenId] = tokenIndex; } delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; _allTokensIndex[lastTokenId] = tokenIndex; delete _allTokensIndex[tokenId]; _allTokens.pop(); } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract ERC721Holder is IERC721Receiver { function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } contract Moonwaterbears is ERC721A, ERC721Holder, Ownable, ReentrancyGuard{ using Strings for uint256; uint public MAX_TOKENS = 5555; uint public MAX_TOKENS_IN_TX = 10; uint public PUBLIC_PRICE = 0.0079 ether; uint public freeMintRemaining = 1111; bool public mintStatus; string private _baseTokenURI; mapping(address => bool) private claimed; constructor() ERC721A("Moonwaterbears", "MOONWB", MAX_TOKENS_IN_TX, MAX_TOKENS) {} function freeMint() public nonReentrant { require(mintStatus, "Mint is closed"); require(totalSupply() < MAX_TOKENS, "Sale end"); require(totalSupply() + 1 <= MAX_TOKENS, "Exceeds MAX limit"); require(!isFreeClaimed(msg.sender), "Exceeds FREE MINT limit per address"); require(freeMintRemaining > 0, "Exceeds FREE MINT limit"); claimed[msg.sender] = true; freeMintRemaining = freeMintRemaining - 1; _safeMint(_msgSender(), 1); } function mint(uint256 _count) public payable nonReentrant { require(mintStatus, "Mint is closed"); require(totalSupply() < MAX_TOKENS, "Sale end"); require(totalSupply() + _count <= MAX_TOKENS, "Exceeds MAX limit"); require(_count <= MAX_TOKENS_IN_TX, "Exceeds TX limit"); require(msg.value == _count * PUBLIC_PRICE, "Value below price"); _safeMint(_msgSender(), _count); } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function ownerMint(address _to, uint256 _count) public onlyOwner { require(totalSupply() < MAX_TOKENS, "Sale end"); _safeMint(_to, _count); } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function setMintStatus(bool _status) public onlyOwner { mintStatus = _status; } function isFreeClaimed(address _address) public view returns (bool) { return claimed[_address]; } function withdrawAll() public payable onlyOwner{ require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS_IN_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_PRICE","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":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMintRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isFreeClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintStatus","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":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526000805560006007556115b3600a55600a600b55661c110215b9c000600c55610457600d553480156200003657600080fd5b506040518060400160405280600e81526020017f4d6f6f6e776174657262656172730000000000000000000000000000000000008152506040518060400160405280600681526020017f4d4f4f4e57420000000000000000000000000000000000000000000000000000815250600b54600a5460008111620000ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e690620003ae565b60405180910390fd5b6000821162000135576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200012c9062000446565b60405180910390fd5b83600190805190602001906200014d92919062000277565b5082600290805190602001906200016692919062000277565b508160a081815250508060808181525050505050506200019b6200018f620001a960201b60201c565b620001b160201b60201c565b6001600981905550620004cd565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002859062000497565b90600052602060002090601f016020900481019282620002a95760008555620002f5565b82601f10620002c457805160ff1916838001178555620002f5565b82800160010185558215620002f5579182015b82811115620002f4578251825591602001919060010190620002d7565b5b50905062000304919062000308565b5090565b5b808211156200032357600081600090555060010162000309565b5090565b600082825260208201905092915050565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b600062000396602e8362000327565b9150620003a38262000338565b604082019050919050565b60006020820190508181036000830152620003c98162000387565b9050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b60006200042e60278362000327565b91506200043b82620003d0565b604082019050919050565b6000602082019050818103600083015262000461816200041f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004b057607f821691505b60208210811415620004c757620004c662000468565b5b50919050565b60805160a05161491d620004fe6000396000818161231c0152818161234501526129d901526000505061491d6000f3fe6080604052600436106101ee5760003560e01c8063611f3f101161010d578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd146106cf578063d7224ba01461070c578063e985e9c514610737578063f2fde38b14610774578063f47c84c51461079d576101ee565b8063a0712d6814610624578063a22cb46514610640578063ab36e64d14610669578063b88d4fde146106a6576101ee565b8063853828b6116100dc578063853828b6146105995780638da5cb5b146105a357806395d89b41146105ce5780639da3f8fd146105f9576101ee565b8063611f3f10146104dd5780636352211e1461050857806370a0823114610545578063715018a614610582576101ee565b806323b872dd11610185578063484b973c11610154578063484b973c146104375780634f6ccce71461046057806355f804b31461049d5780635b70ea9f146104c6576101ee565b806323b872dd1461037d5780632f745c59146103a657806334d45514146103e357806342842e0e1461040e576101ee565b80630cb93d6b116101c15780630cb93d6b146102c1578063150b7a02146102ec57806318160ddd146103295780631f85e3ca14610354576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612f53565b6107c8565b6040516102279190612f9b565b60405180910390f35b34801561023c57600080fd5b50610245610912565b604051610252919061304f565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d91906130a7565b6109a4565b60405161028f9190613115565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba919061315c565b610a29565b005b3480156102cd57600080fd5b506102d6610b42565b6040516102e391906131ab565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906132fb565b610b48565b604051610320919061338d565b60405180910390f35b34801561033557600080fd5b5061033e610b5c565b60405161034b91906131ab565b60405180910390f35b34801561036057600080fd5b5061037b600480360381019061037691906133d4565b610b65565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613401565b610bfe565b005b3480156103b257600080fd5b506103cd60048036038101906103c8919061315c565b610c0e565b6040516103da91906131ab565b60405180910390f35b3480156103ef57600080fd5b506103f8610e0c565b60405161040591906131ab565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190613401565b610e12565b005b34801561044357600080fd5b5061045e6004803603810190610459919061315c565b610e32565b005b34801561046c57600080fd5b50610487600480360381019061048291906130a7565b610f07565b60405161049491906131ab565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906134f5565b610f5a565b005b3480156104d257600080fd5b506104db610ff0565b005b3480156104e957600080fd5b506104f2611247565b6040516104ff91906131ab565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a91906130a7565b61124d565b60405161053c9190613115565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061353e565b611263565b60405161057991906131ab565b60405180910390f35b34801561058e57600080fd5b5061059761134c565b005b6105a16113d4565b005b3480156105af57600080fd5b506105b8611490565b6040516105c59190613115565b60405180910390f35b3480156105da57600080fd5b506105e36114ba565b6040516105f0919061304f565b60405180910390f35b34801561060557600080fd5b5061060e61154c565b60405161061b9190612f9b565b60405180910390f35b61063e600480360381019061063991906130a7565b61155f565b005b34801561064c57600080fd5b506106676004803603810190610662919061356b565b61174e565b005b34801561067557600080fd5b50610690600480360381019061068b919061353e565b6118cf565b60405161069d9190612f9b565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c891906132fb565b611925565b005b3480156106db57600080fd5b506106f660048036038101906106f191906130a7565b611981565b604051610703919061304f565b60405180910390f35b34801561071857600080fd5b50610721611a28565b60405161072e91906131ab565b60405180910390f35b34801561074357600080fd5b5061075e600480360381019061075991906135ab565b611a2e565b60405161076b9190612f9b565b60405180910390f35b34801561078057600080fd5b5061079b6004803603810190610796919061353e565b611ac2565b005b3480156107a957600080fd5b506107b2611bba565b6040516107bf91906131ab565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108fb57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090b575061090a82611bc0565b5b9050919050565b6060600180546109219061361a565b80601f016020809104026020016040519081016040528092919081815260200182805461094d9061361a565b801561099a5780601f1061096f5761010080835404028352916020019161099a565b820191906000526020600020905b81548152906001019060200180831161097d57829003601f168201915b5050505050905090565b60006109af82611c2a565b6109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e5906136be565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a348261124d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613750565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac4611c37565b73ffffffffffffffffffffffffffffffffffffffff161480610af35750610af281610aed611c37565b611a2e565b5b610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b29906137e2565b60405180910390fd5b610b3d838383611c3f565b505050565b600b5481565b600063150b7a0260e01b9050949350505050565b60008054905090565b610b6d611c37565b73ffffffffffffffffffffffffffffffffffffffff16610b8b611490565b73ffffffffffffffffffffffffffffffffffffffff1614610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061384e565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b610c09838383611cf1565b505050565b6000610c1983611263565b8210610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c51906138e0565b60405180910390fd5b6000610c64610b5c565b905060008060005b83811015610dca576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d5e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610db65786841415610da7578195505050505050610e06565b8380610db29061392f565b9450505b508080610dc29061392f565b915050610c6c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd906139ea565b60405180910390fd5b92915050565b600d5481565b610e2d83838360405180602001604052806000815250611925565b505050565b610e3a611c37565b73ffffffffffffffffffffffffffffffffffffffff16610e58611490565b73ffffffffffffffffffffffffffffffffffffffff1614610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061384e565b60405180910390fd5b600a54610eb9610b5c565b10610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090613a56565b60405180910390fd5b610f0382826122aa565b5050565b6000610f11610b5c565b8210610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613ae8565b60405180910390fd5b819050919050565b610f62611c37565b73ffffffffffffffffffffffffffffffffffffffff16610f80611490565b73ffffffffffffffffffffffffffffffffffffffff1614610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd9061384e565b60405180910390fd5b80600f9080519060200190610fec929190612e0a565b5050565b60026009541415611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90613b54565b60405180910390fd5b6002600981905550600e60009054906101000a900460ff1661108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490613bc0565b60405180910390fd5b600a54611098610b5c565b106110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90613a56565b60405180910390fd5b600a5460016110e5610b5c565b6110ef9190613be0565b1115611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613c82565b60405180910390fd5b611139336118cf565b15611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090613d14565b60405180910390fd5b6000600d54116111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590613d80565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d546112259190613da0565b600d8190555061123d611236611c37565b60016122aa565b6001600981905550565b600c5481565b6000611258826122c8565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90613e46565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611354611c37565b73ffffffffffffffffffffffffffffffffffffffff16611372611490565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf9061384e565b60405180910390fd5b6113d260006124cb565b565b6113dc611c37565b73ffffffffffffffffffffffffffffffffffffffff166113fa611490565b73ffffffffffffffffffffffffffffffffffffffff1614611450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114479061384e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061148e57600080fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114c99061361a565b80601f01602080910402602001604051908101604052809291908181526020018280546114f59061361a565b80156115425780601f1061151757610100808354040283529160200191611542565b820191906000526020600020905b81548152906001019060200180831161152557829003601f168201915b5050505050905090565b600e60009054906101000a900460ff1681565b600260095414156115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613b54565b60405180910390fd5b6002600981905550600e60009054906101000a900460ff166115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f390613bc0565b60405180910390fd5b600a54611607610b5c565b10611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613a56565b60405180910390fd5b600a5481611653610b5c565b61165d9190613be0565b111561169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590613c82565b60405180910390fd5b600b548111156116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90613eb2565b60405180910390fd5b600c54816116f19190613ed2565b3414611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613f78565b60405180910390fd5b61174361173d611c37565b826122aa565b600160098190555050565b611756611c37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90613fe4565b60405180910390fd5b80600660006117d1611c37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661187e611c37565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c39190612f9b565b60405180910390a35050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611930848484611cf1565b61193c84848484612591565b61197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290614076565b60405180910390fd5b50505050565b606061198c82611c2a565b6119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c290614108565b60405180910390fd5b60006119d5612719565b905060008151116119f55760405180602001604052806000815250611a20565b806119ff846127ab565b604051602001611a10929190614164565b6040516020818303038152906040525b915050919050565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aca611c37565b73ffffffffffffffffffffffffffffffffffffffff16611ae8611490565b73ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b359061384e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba5906141fa565b60405180910390fd5b611bb7816124cb565b50565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611cfc826122c8565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611d23611c37565b73ffffffffffffffffffffffffffffffffffffffff161480611d7f5750611d48611c37565b73ffffffffffffffffffffffffffffffffffffffff16611d67846109a4565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d9b5750611d9a8260000151611d95611c37565b611a2e565b5b905080611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd49061428c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e469061431e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906143b0565b60405180910390fd5b611ecc858585600161290c565b611edc6000848460000151611c3f565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611f4a91906143ec565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611fee9190614420565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846120f49190613be0565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561223a5761216a81611c2a565b15612239576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122a28686866001612912565b505050505050565b6122c4828260405180602001604052806000815250612918565b5050565b6122d0612e90565b6122d982611c2a565b612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906144d8565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000831061237c5760017f00000000000000000000000000000000000000000000000000000000000000008461236f9190613da0565b6123799190613be0565b90505b60008390505b81811061248a576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612476578093505050506124c6565b508080612482906144f8565b915050612382565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd90614594565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006125b28473ffffffffffffffffffffffffffffffffffffffff16612df7565b1561270c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125db611c37565b8786866040518563ffffffff1660e01b81526004016125fd9493929190614609565b6020604051808303816000875af192505050801561263957506040513d601f19601f82011682018060405250810190612636919061466a565b60015b6126bc573d8060008114612669576040519150601f19603f3d011682016040523d82523d6000602084013e61266e565b606091505b506000815114156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab90614076565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612711565b600190505b949350505050565b6060600f80546127289061361a565b80601f01602080910402602001604051908101604052809291908181526020018280546127549061361a565b80156127a15780601f10612776576101008083540402835291602001916127a1565b820191906000526020600020905b81548152906001019060200180831161278457829003601f168201915b5050505050905090565b606060008214156127f3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612907565b600082905060005b6000821461282557808061280e9061392f565b915050600a8261281e91906146c6565b91506127fb565b60008167ffffffffffffffff811115612841576128406131d0565b5b6040519080825280601f01601f1916602001820160405280156128735781602001600182028036833780820191505090505b5090505b600085146129005760018261288c9190613da0565b9150600a8561289b91906146f7565b60306128a79190613be0565b60f81b8183815181106128bd576128bc614728565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f991906146c6565b9450612877565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561298e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612985906147c9565b60405180910390fd5b61299781611c2a565b156129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce90614835565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a31906148c7565b60405180910390fd5b612a47600085838661290c565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b449190614420565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b6b9190614420565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612dda57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d7a6000888488612591565b612db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db090614076565b60405180910390fd5b8180612dc49061392f565b9250508080612dd29061392f565b915050612d09565b5080600081905550612def6000878588612912565b505050505050565b600080823b905060008111915050919050565b828054612e169061361a565b90600052602060002090601f016020900481019282612e385760008555612e7f565b82601f10612e5157805160ff1916838001178555612e7f565b82800160010185558215612e7f579182015b82811115612e7e578251825591602001919060010190612e63565b5b509050612e8c9190612eca565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612ee3576000816000905550600101612ecb565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f3081612efb565b8114612f3b57600080fd5b50565b600081359050612f4d81612f27565b92915050565b600060208284031215612f6957612f68612ef1565b5b6000612f7784828501612f3e565b91505092915050565b60008115159050919050565b612f9581612f80565b82525050565b6000602082019050612fb06000830184612f8c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ff0578082015181840152602081019050612fd5565b83811115612fff576000848401525b50505050565b6000601f19601f8301169050919050565b600061302182612fb6565b61302b8185612fc1565b935061303b818560208601612fd2565b61304481613005565b840191505092915050565b600060208201905081810360008301526130698184613016565b905092915050565b6000819050919050565b61308481613071565b811461308f57600080fd5b50565b6000813590506130a18161307b565b92915050565b6000602082840312156130bd576130bc612ef1565b5b60006130cb84828501613092565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130ff826130d4565b9050919050565b61310f816130f4565b82525050565b600060208201905061312a6000830184613106565b92915050565b613139816130f4565b811461314457600080fd5b50565b60008135905061315681613130565b92915050565b6000806040838503121561317357613172612ef1565b5b600061318185828601613147565b925050602061319285828601613092565b9150509250929050565b6131a581613071565b82525050565b60006020820190506131c0600083018461319c565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61320882613005565b810181811067ffffffffffffffff82111715613227576132266131d0565b5b80604052505050565b600061323a612ee7565b905061324682826131ff565b919050565b600067ffffffffffffffff821115613266576132656131d0565b5b61326f82613005565b9050602081019050919050565b82818337600083830152505050565b600061329e6132998461324b565b613230565b9050828152602081018484840111156132ba576132b96131cb565b5b6132c584828561327c565b509392505050565b600082601f8301126132e2576132e16131c6565b5b81356132f284826020860161328b565b91505092915050565b6000806000806080858703121561331557613314612ef1565b5b600061332387828801613147565b945050602061333487828801613147565b935050604061334587828801613092565b925050606085013567ffffffffffffffff81111561336657613365612ef6565b5b613372878288016132cd565b91505092959194509250565b61338781612efb565b82525050565b60006020820190506133a2600083018461337e565b92915050565b6133b181612f80565b81146133bc57600080fd5b50565b6000813590506133ce816133a8565b92915050565b6000602082840312156133ea576133e9612ef1565b5b60006133f8848285016133bf565b91505092915050565b60008060006060848603121561341a57613419612ef1565b5b600061342886828701613147565b935050602061343986828701613147565b925050604061344a86828701613092565b9150509250925092565b600067ffffffffffffffff82111561346f5761346e6131d0565b5b61347882613005565b9050602081019050919050565b600061349861349384613454565b613230565b9050828152602081018484840111156134b4576134b36131cb565b5b6134bf84828561327c565b509392505050565b600082601f8301126134dc576134db6131c6565b5b81356134ec848260208601613485565b91505092915050565b60006020828403121561350b5761350a612ef1565b5b600082013567ffffffffffffffff81111561352957613528612ef6565b5b613535848285016134c7565b91505092915050565b60006020828403121561355457613553612ef1565b5b600061356284828501613147565b91505092915050565b6000806040838503121561358257613581612ef1565b5b600061359085828601613147565b92505060206135a1858286016133bf565b9150509250929050565b600080604083850312156135c2576135c1612ef1565b5b60006135d085828601613147565b92505060206135e185828601613147565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061363257607f821691505b60208210811415613646576136456135eb565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136a8602d83612fc1565b91506136b38261364c565b604082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b600061373a602283612fc1565b9150613745826136de565b604082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006137cc603983612fc1565b91506137d782613770565b604082019050919050565b600060208201905081810360008301526137fb816137bf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613838602083612fc1565b915061384382613802565b602082019050919050565b600060208201905081810360008301526138678161382b565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006138ca602283612fc1565b91506138d58261386e565b604082019050919050565b600060208201905081810360008301526138f9816138bd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061393a82613071565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561396d5761396c613900565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006139d4602e83612fc1565b91506139df82613978565b604082019050919050565b60006020820190508181036000830152613a03816139c7565b9050919050565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b6000613a40600883612fc1565b9150613a4b82613a0a565b602082019050919050565b60006020820190508181036000830152613a6f81613a33565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ad2602383612fc1565b9150613add82613a76565b604082019050919050565b60006020820190508181036000830152613b0181613ac5565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613b3e601f83612fc1565b9150613b4982613b08565b602082019050919050565b60006020820190508181036000830152613b6d81613b31565b9050919050565b7f4d696e7420697320636c6f736564000000000000000000000000000000000000600082015250565b6000613baa600e83612fc1565b9150613bb582613b74565b602082019050919050565b60006020820190508181036000830152613bd981613b9d565b9050919050565b6000613beb82613071565b9150613bf683613071565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c2b57613c2a613900565b5b828201905092915050565b7f45786365656473204d4158206c696d6974000000000000000000000000000000600082015250565b6000613c6c601183612fc1565b9150613c7782613c36565b602082019050919050565b60006020820190508181036000830152613c9b81613c5f565b9050919050565b7f457863656564732046524545204d494e54206c696d697420706572206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cfe602383612fc1565b9150613d0982613ca2565b604082019050919050565b60006020820190508181036000830152613d2d81613cf1565b9050919050565b7f457863656564732046524545204d494e54206c696d6974000000000000000000600082015250565b6000613d6a601783612fc1565b9150613d7582613d34565b602082019050919050565b60006020820190508181036000830152613d9981613d5d565b9050919050565b6000613dab82613071565b9150613db683613071565b925082821015613dc957613dc8613900565b5b828203905092915050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613e30602b83612fc1565b9150613e3b82613dd4565b604082019050919050565b60006020820190508181036000830152613e5f81613e23565b9050919050565b7f45786365656473205458206c696d697400000000000000000000000000000000600082015250565b6000613e9c601083612fc1565b9150613ea782613e66565b602082019050919050565b60006020820190508181036000830152613ecb81613e8f565b9050919050565b6000613edd82613071565b9150613ee883613071565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f2157613f20613900565b5b828202905092915050565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b6000613f62601183612fc1565b9150613f6d82613f2c565b602082019050919050565b60006020820190508181036000830152613f9181613f55565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613fce601a83612fc1565b9150613fd982613f98565b602082019050919050565b60006020820190508181036000830152613ffd81613fc1565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614060603383612fc1565b915061406b82614004565b604082019050919050565b6000602082019050818103600083015261408f81614053565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006140f2602f83612fc1565b91506140fd82614096565b604082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600081905092915050565b600061413e82612fb6565b6141488185614128565b9350614158818560208601612fd2565b80840191505092915050565b60006141708285614133565b915061417c8284614133565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141e4602683612fc1565b91506141ef82614188565b604082019050919050565b60006020820190508181036000830152614213816141d7565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614276603283612fc1565b91506142818261421a565b604082019050919050565b600060208201905081810360008301526142a581614269565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614308602683612fc1565b9150614313826142ac565b604082019050919050565b60006020820190508181036000830152614337816142fb565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061439a602583612fc1565b91506143a58261433e565b604082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006143f7826143d0565b9150614402836143d0565b92508282101561441557614414613900565b5b828203905092915050565b600061442b826143d0565b9150614436836143d0565b9250826fffffffffffffffffffffffffffffffff0382111561445b5761445a613900565b5b828201905092915050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006144c2602a83612fc1565b91506144cd82614466565b604082019050919050565b600060208201905081810360008301526144f1816144b5565b9050919050565b600061450382613071565b9150600082141561451757614516613900565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b600061457e602f83612fc1565b915061458982614522565b604082019050919050565b600060208201905081810360008301526145ad81614571565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145db826145b4565b6145e581856145bf565b93506145f5818560208601612fd2565b6145fe81613005565b840191505092915050565b600060808201905061461e6000830187613106565b61462b6020830186613106565b614638604083018561319c565b818103606083015261464a81846145d0565b905095945050505050565b60008151905061466481612f27565b92915050565b6000602082840312156146805761467f612ef1565b5b600061468e84828501614655565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146d182613071565b91506146dc83613071565b9250826146ec576146eb614697565b5b828204905092915050565b600061470282613071565b915061470d83613071565b92508261471d5761471c614697565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147b3602183612fc1565b91506147be82614757565b604082019050919050565b600060208201905081810360008301526147e2816147a6565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b600061481f601d83612fc1565b915061482a826147e9565b602082019050919050565b6000602082019050818103600083015261484e81614812565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b60006148b1602283612fc1565b91506148bc82614855565b604082019050919050565b600060208201905081810360008301526148e0816148a4565b905091905056fea2646970667358221220e4857ab6d89c5fef6be89b034e2366529b0428cb43cd1be7a880959c7b805c3564736f6c634300080c0033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c8063611f3f101161010d578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd146106cf578063d7224ba01461070c578063e985e9c514610737578063f2fde38b14610774578063f47c84c51461079d576101ee565b8063a0712d6814610624578063a22cb46514610640578063ab36e64d14610669578063b88d4fde146106a6576101ee565b8063853828b6116100dc578063853828b6146105995780638da5cb5b146105a357806395d89b41146105ce5780639da3f8fd146105f9576101ee565b8063611f3f10146104dd5780636352211e1461050857806370a0823114610545578063715018a614610582576101ee565b806323b872dd11610185578063484b973c11610154578063484b973c146104375780634f6ccce71461046057806355f804b31461049d5780635b70ea9f146104c6576101ee565b806323b872dd1461037d5780632f745c59146103a657806334d45514146103e357806342842e0e1461040e576101ee565b80630cb93d6b116101c15780630cb93d6b146102c1578063150b7a02146102ec57806318160ddd146103295780631f85e3ca14610354576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612f53565b6107c8565b6040516102279190612f9b565b60405180910390f35b34801561023c57600080fd5b50610245610912565b604051610252919061304f565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d91906130a7565b6109a4565b60405161028f9190613115565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba919061315c565b610a29565b005b3480156102cd57600080fd5b506102d6610b42565b6040516102e391906131ab565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906132fb565b610b48565b604051610320919061338d565b60405180910390f35b34801561033557600080fd5b5061033e610b5c565b60405161034b91906131ab565b60405180910390f35b34801561036057600080fd5b5061037b600480360381019061037691906133d4565b610b65565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613401565b610bfe565b005b3480156103b257600080fd5b506103cd60048036038101906103c8919061315c565b610c0e565b6040516103da91906131ab565b60405180910390f35b3480156103ef57600080fd5b506103f8610e0c565b60405161040591906131ab565b60405180910390f35b34801561041a57600080fd5b5061043560048036038101906104309190613401565b610e12565b005b34801561044357600080fd5b5061045e6004803603810190610459919061315c565b610e32565b005b34801561046c57600080fd5b50610487600480360381019061048291906130a7565b610f07565b60405161049491906131ab565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906134f5565b610f5a565b005b3480156104d257600080fd5b506104db610ff0565b005b3480156104e957600080fd5b506104f2611247565b6040516104ff91906131ab565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a91906130a7565b61124d565b60405161053c9190613115565b60405180910390f35b34801561055157600080fd5b5061056c6004803603810190610567919061353e565b611263565b60405161057991906131ab565b60405180910390f35b34801561058e57600080fd5b5061059761134c565b005b6105a16113d4565b005b3480156105af57600080fd5b506105b8611490565b6040516105c59190613115565b60405180910390f35b3480156105da57600080fd5b506105e36114ba565b6040516105f0919061304f565b60405180910390f35b34801561060557600080fd5b5061060e61154c565b60405161061b9190612f9b565b60405180910390f35b61063e600480360381019061063991906130a7565b61155f565b005b34801561064c57600080fd5b506106676004803603810190610662919061356b565b61174e565b005b34801561067557600080fd5b50610690600480360381019061068b919061353e565b6118cf565b60405161069d9190612f9b565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c891906132fb565b611925565b005b3480156106db57600080fd5b506106f660048036038101906106f191906130a7565b611981565b604051610703919061304f565b60405180910390f35b34801561071857600080fd5b50610721611a28565b60405161072e91906131ab565b60405180910390f35b34801561074357600080fd5b5061075e600480360381019061075991906135ab565b611a2e565b60405161076b9190612f9b565b60405180910390f35b34801561078057600080fd5b5061079b6004803603810190610796919061353e565b611ac2565b005b3480156107a957600080fd5b506107b2611bba565b6040516107bf91906131ab565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108fb57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061090b575061090a82611bc0565b5b9050919050565b6060600180546109219061361a565b80601f016020809104026020016040519081016040528092919081815260200182805461094d9061361a565b801561099a5780601f1061096f5761010080835404028352916020019161099a565b820191906000526020600020905b81548152906001019060200180831161097d57829003601f168201915b5050505050905090565b60006109af82611c2a565b6109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e5906136be565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a348261124d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613750565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ac4611c37565b73ffffffffffffffffffffffffffffffffffffffff161480610af35750610af281610aed611c37565b611a2e565b5b610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b29906137e2565b60405180910390fd5b610b3d838383611c3f565b505050565b600b5481565b600063150b7a0260e01b9050949350505050565b60008054905090565b610b6d611c37565b73ffffffffffffffffffffffffffffffffffffffff16610b8b611490565b73ffffffffffffffffffffffffffffffffffffffff1614610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061384e565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b610c09838383611cf1565b505050565b6000610c1983611263565b8210610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c51906138e0565b60405180910390fd5b6000610c64610b5c565b905060008060005b83811015610dca576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d5e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610db65786841415610da7578195505050505050610e06565b8380610db29061392f565b9450505b508080610dc29061392f565b915050610c6c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd906139ea565b60405180910390fd5b92915050565b600d5481565b610e2d83838360405180602001604052806000815250611925565b505050565b610e3a611c37565b73ffffffffffffffffffffffffffffffffffffffff16610e58611490565b73ffffffffffffffffffffffffffffffffffffffff1614610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea59061384e565b60405180910390fd5b600a54610eb9610b5c565b10610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090613a56565b60405180910390fd5b610f0382826122aa565b5050565b6000610f11610b5c565b8210610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613ae8565b60405180910390fd5b819050919050565b610f62611c37565b73ffffffffffffffffffffffffffffffffffffffff16610f80611490565b73ffffffffffffffffffffffffffffffffffffffff1614610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd9061384e565b60405180910390fd5b80600f9080519060200190610fec929190612e0a565b5050565b60026009541415611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90613b54565b60405180910390fd5b6002600981905550600e60009054906101000a900460ff1661108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490613bc0565b60405180910390fd5b600a54611098610b5c565b106110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90613a56565b60405180910390fd5b600a5460016110e5610b5c565b6110ef9190613be0565b1115611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613c82565b60405180910390fd5b611139336118cf565b15611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090613d14565b60405180910390fd5b6000600d54116111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590613d80565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d546112259190613da0565b600d8190555061123d611236611c37565b60016122aa565b6001600981905550565b600c5481565b6000611258826122c8565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb90613e46565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611354611c37565b73ffffffffffffffffffffffffffffffffffffffff16611372611490565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf9061384e565b60405180910390fd5b6113d260006124cb565b565b6113dc611c37565b73ffffffffffffffffffffffffffffffffffffffff166113fa611490565b73ffffffffffffffffffffffffffffffffffffffff1614611450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114479061384e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061148e57600080fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546114c99061361a565b80601f01602080910402602001604051908101604052809291908181526020018280546114f59061361a565b80156115425780601f1061151757610100808354040283529160200191611542565b820191906000526020600020905b81548152906001019060200180831161152557829003601f168201915b5050505050905090565b600e60009054906101000a900460ff1681565b600260095414156115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613b54565b60405180910390fd5b6002600981905550600e60009054906101000a900460ff166115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f390613bc0565b60405180910390fd5b600a54611607610b5c565b10611647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163e90613a56565b60405180910390fd5b600a5481611653610b5c565b61165d9190613be0565b111561169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590613c82565b60405180910390fd5b600b548111156116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90613eb2565b60405180910390fd5b600c54816116f19190613ed2565b3414611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613f78565b60405180910390fd5b61174361173d611c37565b826122aa565b600160098190555050565b611756611c37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90613fe4565b60405180910390fd5b80600660006117d1611c37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661187e611c37565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118c39190612f9b565b60405180910390a35050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611930848484611cf1565b61193c84848484612591565b61197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290614076565b60405180910390fd5b50505050565b606061198c82611c2a565b6119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c290614108565b60405180910390fd5b60006119d5612719565b905060008151116119f55760405180602001604052806000815250611a20565b806119ff846127ab565b604051602001611a10929190614164565b6040516020818303038152906040525b915050919050565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aca611c37565b73ffffffffffffffffffffffffffffffffffffffff16611ae8611490565b73ffffffffffffffffffffffffffffffffffffffff1614611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b359061384e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba5906141fa565b60405180910390fd5b611bb7816124cb565b50565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611cfc826122c8565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611d23611c37565b73ffffffffffffffffffffffffffffffffffffffff161480611d7f5750611d48611c37565b73ffffffffffffffffffffffffffffffffffffffff16611d67846109a4565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d9b5750611d9a8260000151611d95611c37565b611a2e565b5b905080611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd49061428c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e469061431e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906143b0565b60405180910390fd5b611ecc858585600161290c565b611edc6000848460000151611c3f565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611f4a91906143ec565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611fee9190614420565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846120f49190613be0565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561223a5761216a81611c2a565b15612239576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122a28686866001612912565b505050505050565b6122c4828260405180602001604052806000815250612918565b5050565b6122d0612e90565b6122d982611c2a565b612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f906144d8565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a831061237c5760017f000000000000000000000000000000000000000000000000000000000000000a8461236f9190613da0565b6123799190613be0565b90505b60008390505b81811061248a576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612476578093505050506124c6565b508080612482906144f8565b915050612382565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd90614594565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006125b28473ffffffffffffffffffffffffffffffffffffffff16612df7565b1561270c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125db611c37565b8786866040518563ffffffff1660e01b81526004016125fd9493929190614609565b6020604051808303816000875af192505050801561263957506040513d601f19601f82011682018060405250810190612636919061466a565b60015b6126bc573d8060008114612669576040519150601f19603f3d011682016040523d82523d6000602084013e61266e565b606091505b506000815114156126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab90614076565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612711565b600190505b949350505050565b6060600f80546127289061361a565b80601f01602080910402602001604051908101604052809291908181526020018280546127549061361a565b80156127a15780601f10612776576101008083540402835291602001916127a1565b820191906000526020600020905b81548152906001019060200180831161278457829003601f168201915b5050505050905090565b606060008214156127f3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612907565b600082905060005b6000821461282557808061280e9061392f565b915050600a8261281e91906146c6565b91506127fb565b60008167ffffffffffffffff811115612841576128406131d0565b5b6040519080825280601f01601f1916602001820160405280156128735781602001600182028036833780820191505090505b5090505b600085146129005760018261288c9190613da0565b9150600a8561289b91906146f7565b60306128a79190613be0565b60f81b8183815181106128bd576128bc614728565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f991906146c6565b9450612877565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561298e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612985906147c9565b60405180910390fd5b61299781611c2a565b156129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce90614835565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115612a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a31906148c7565b60405180910390fd5b612a47600085838661290c565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612b449190614420565b6fffffffffffffffffffffffffffffffff168152602001858360200151612b6b9190614420565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612dda57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d7a6000888488612591565b612db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db090614076565b60405180910390fd5b8180612dc49061392f565b9250508080612dd29061392f565b915050612d09565b5080600081905550612def6000878588612912565b505050505050565b600080823b905060008111915050919050565b828054612e169061361a565b90600052602060002090601f016020900481019282612e385760008555612e7f565b82601f10612e5157805160ff1916838001178555612e7f565b82800160010185558215612e7f579182015b82811115612e7e578251825591602001919060010190612e63565b5b509050612e8c9190612eca565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612ee3576000816000905550600101612ecb565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f3081612efb565b8114612f3b57600080fd5b50565b600081359050612f4d81612f27565b92915050565b600060208284031215612f6957612f68612ef1565b5b6000612f7784828501612f3e565b91505092915050565b60008115159050919050565b612f9581612f80565b82525050565b6000602082019050612fb06000830184612f8c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ff0578082015181840152602081019050612fd5565b83811115612fff576000848401525b50505050565b6000601f19601f8301169050919050565b600061302182612fb6565b61302b8185612fc1565b935061303b818560208601612fd2565b61304481613005565b840191505092915050565b600060208201905081810360008301526130698184613016565b905092915050565b6000819050919050565b61308481613071565b811461308f57600080fd5b50565b6000813590506130a18161307b565b92915050565b6000602082840312156130bd576130bc612ef1565b5b60006130cb84828501613092565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130ff826130d4565b9050919050565b61310f816130f4565b82525050565b600060208201905061312a6000830184613106565b92915050565b613139816130f4565b811461314457600080fd5b50565b60008135905061315681613130565b92915050565b6000806040838503121561317357613172612ef1565b5b600061318185828601613147565b925050602061319285828601613092565b9150509250929050565b6131a581613071565b82525050565b60006020820190506131c0600083018461319c565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61320882613005565b810181811067ffffffffffffffff82111715613227576132266131d0565b5b80604052505050565b600061323a612ee7565b905061324682826131ff565b919050565b600067ffffffffffffffff821115613266576132656131d0565b5b61326f82613005565b9050602081019050919050565b82818337600083830152505050565b600061329e6132998461324b565b613230565b9050828152602081018484840111156132ba576132b96131cb565b5b6132c584828561327c565b509392505050565b600082601f8301126132e2576132e16131c6565b5b81356132f284826020860161328b565b91505092915050565b6000806000806080858703121561331557613314612ef1565b5b600061332387828801613147565b945050602061333487828801613147565b935050604061334587828801613092565b925050606085013567ffffffffffffffff81111561336657613365612ef6565b5b613372878288016132cd565b91505092959194509250565b61338781612efb565b82525050565b60006020820190506133a2600083018461337e565b92915050565b6133b181612f80565b81146133bc57600080fd5b50565b6000813590506133ce816133a8565b92915050565b6000602082840312156133ea576133e9612ef1565b5b60006133f8848285016133bf565b91505092915050565b60008060006060848603121561341a57613419612ef1565b5b600061342886828701613147565b935050602061343986828701613147565b925050604061344a86828701613092565b9150509250925092565b600067ffffffffffffffff82111561346f5761346e6131d0565b5b61347882613005565b9050602081019050919050565b600061349861349384613454565b613230565b9050828152602081018484840111156134b4576134b36131cb565b5b6134bf84828561327c565b509392505050565b600082601f8301126134dc576134db6131c6565b5b81356134ec848260208601613485565b91505092915050565b60006020828403121561350b5761350a612ef1565b5b600082013567ffffffffffffffff81111561352957613528612ef6565b5b613535848285016134c7565b91505092915050565b60006020828403121561355457613553612ef1565b5b600061356284828501613147565b91505092915050565b6000806040838503121561358257613581612ef1565b5b600061359085828601613147565b92505060206135a1858286016133bf565b9150509250929050565b600080604083850312156135c2576135c1612ef1565b5b60006135d085828601613147565b92505060206135e185828601613147565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061363257607f821691505b60208210811415613646576136456135eb565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006136a8602d83612fc1565b91506136b38261364c565b604082019050919050565b600060208201905081810360008301526136d78161369b565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b600061373a602283612fc1565b9150613745826136de565b604082019050919050565b600060208201905081810360008301526137698161372d565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006137cc603983612fc1565b91506137d782613770565b604082019050919050565b600060208201905081810360008301526137fb816137bf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613838602083612fc1565b915061384382613802565b602082019050919050565b600060208201905081810360008301526138678161382b565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006138ca602283612fc1565b91506138d58261386e565b604082019050919050565b600060208201905081810360008301526138f9816138bd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061393a82613071565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561396d5761396c613900565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006139d4602e83612fc1565b91506139df82613978565b604082019050919050565b60006020820190508181036000830152613a03816139c7565b9050919050565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b6000613a40600883612fc1565b9150613a4b82613a0a565b602082019050919050565b60006020820190508181036000830152613a6f81613a33565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ad2602383612fc1565b9150613add82613a76565b604082019050919050565b60006020820190508181036000830152613b0181613ac5565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613b3e601f83612fc1565b9150613b4982613b08565b602082019050919050565b60006020820190508181036000830152613b6d81613b31565b9050919050565b7f4d696e7420697320636c6f736564000000000000000000000000000000000000600082015250565b6000613baa600e83612fc1565b9150613bb582613b74565b602082019050919050565b60006020820190508181036000830152613bd981613b9d565b9050919050565b6000613beb82613071565b9150613bf683613071565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c2b57613c2a613900565b5b828201905092915050565b7f45786365656473204d4158206c696d6974000000000000000000000000000000600082015250565b6000613c6c601183612fc1565b9150613c7782613c36565b602082019050919050565b60006020820190508181036000830152613c9b81613c5f565b9050919050565b7f457863656564732046524545204d494e54206c696d697420706572206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cfe602383612fc1565b9150613d0982613ca2565b604082019050919050565b60006020820190508181036000830152613d2d81613cf1565b9050919050565b7f457863656564732046524545204d494e54206c696d6974000000000000000000600082015250565b6000613d6a601783612fc1565b9150613d7582613d34565b602082019050919050565b60006020820190508181036000830152613d9981613d5d565b9050919050565b6000613dab82613071565b9150613db683613071565b925082821015613dc957613dc8613900565b5b828203905092915050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613e30602b83612fc1565b9150613e3b82613dd4565b604082019050919050565b60006020820190508181036000830152613e5f81613e23565b9050919050565b7f45786365656473205458206c696d697400000000000000000000000000000000600082015250565b6000613e9c601083612fc1565b9150613ea782613e66565b602082019050919050565b60006020820190508181036000830152613ecb81613e8f565b9050919050565b6000613edd82613071565b9150613ee883613071565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f2157613f20613900565b5b828202905092915050565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b6000613f62601183612fc1565b9150613f6d82613f2c565b602082019050919050565b60006020820190508181036000830152613f9181613f55565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613fce601a83612fc1565b9150613fd982613f98565b602082019050919050565b60006020820190508181036000830152613ffd81613fc1565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614060603383612fc1565b915061406b82614004565b604082019050919050565b6000602082019050818103600083015261408f81614053565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006140f2602f83612fc1565b91506140fd82614096565b604082019050919050565b60006020820190508181036000830152614121816140e5565b9050919050565b600081905092915050565b600061413e82612fb6565b6141488185614128565b9350614158818560208601612fd2565b80840191505092915050565b60006141708285614133565b915061417c8284614133565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141e4602683612fc1565b91506141ef82614188565b604082019050919050565b60006020820190508181036000830152614213816141d7565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614276603283612fc1565b91506142818261421a565b604082019050919050565b600060208201905081810360008301526142a581614269565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000614308602683612fc1565b9150614313826142ac565b604082019050919050565b60006020820190508181036000830152614337816142fb565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061439a602583612fc1565b91506143a58261433e565b604082019050919050565b600060208201905081810360008301526143c98161438d565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006143f7826143d0565b9150614402836143d0565b92508282101561441557614414613900565b5b828203905092915050565b600061442b826143d0565b9150614436836143d0565b9250826fffffffffffffffffffffffffffffffff0382111561445b5761445a613900565b5b828201905092915050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006144c2602a83612fc1565b91506144cd82614466565b604082019050919050565b600060208201905081810360008301526144f1816144b5565b9050919050565b600061450382613071565b9150600082141561451757614516613900565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b600061457e602f83612fc1565b915061458982614522565b604082019050919050565b600060208201905081810360008301526145ad81614571565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145db826145b4565b6145e581856145bf565b93506145f5818560208601612fd2565b6145fe81613005565b840191505092915050565b600060808201905061461e6000830187613106565b61462b6020830186613106565b614638604083018561319c565b818103606083015261464a81846145d0565b905095945050505050565b60008151905061466481612f27565b92915050565b6000602082840312156146805761467f612ef1565b5b600061468e84828501614655565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146d182613071565b91506146dc83613071565b9250826146ec576146eb614697565b5b828204905092915050565b600061470282613071565b915061470d83613071565b92508261471d5761471c614697565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147b3602183612fc1565b91506147be82614757565b604082019050919050565b600060208201905081810360008301526147e2816147a6565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b600061481f601d83612fc1565b915061482a826147e9565b602082019050919050565b6000602082019050818103600083015261484e81614812565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b60006148b1602283612fc1565b91506148bc82614855565b604082019050919050565b600060208201905081810360008301526148e0816148a4565b905091905056fea2646970667358221220e4857ab6d89c5fef6be89b034e2366529b0428cb43cd1be7a880959c7b805c3564736f6c634300080c0033
Deployed Bytecode Sourcemap
39065:2204:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23899:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25625:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27150:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26713:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39226:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36253:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22460:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40924:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28000:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23091:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39312:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28205:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40642:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22623:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40814:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39565:505;;;;;;;;;;;;;:::i;:::-;;39266:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25448:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24325:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1737:94;;;;;;;;;;;;;:::i;:::-;;41144:120;;;:::i;:::-;;1514:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25780:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39357:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40078:432;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27418:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41025:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28425:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25941:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32840:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27755:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39190:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23899:370;24026:4;24071:25;24056:40;;;:11;:40;;;;:99;;;;24122:33;24107:48;;;:11;:48;;;;24056:99;:160;;;;24181:35;24166:50;;;:11;:50;;;;24056:160;:207;;;;24227:36;24251:11;24227:23;:36::i;:::-;24056:207;24042:221;;23899:370;;;:::o;25625:94::-;25679:13;25708:5;25701:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25625:94;:::o;27150:204::-;27218:7;27242:16;27250:7;27242;:16::i;:::-;27234:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27324:15;:24;27340:7;27324:24;;;;;;;;;;;;;;;;;;;;;27317:31;;27150:204;;;:::o;26713:379::-;26782:13;26798:24;26814:7;26798:15;:24::i;:::-;26782:40;;26843:5;26837:11;;:2;:11;;;;26829:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26928:5;26912:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26937:37;26954:5;26961:12;:10;:12::i;:::-;26937:16;:37::i;:::-;26912:62;26896:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;27058:28;27067:2;27071:7;27080:5;27058:8;:28::i;:::-;26775:317;26713:379;;:::o;39226:33::-;;;;:::o;36253:207::-;36396:6;36422:30;;;36415:37;;36253:207;;;;;;:::o;22460:94::-;22513:7;22536:12;;22529:19;;22460:94;:::o;40924:93::-;1660:12;:10;:12::i;:::-;1649:23;;:7;:5;:7::i;:::-;:23;;;1641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41002:7:::1;40989:10;;:20;;;;;;;;;;;;;;;;;;40924:93:::0;:::o;28000:142::-;28108:28;28118:4;28124:2;28128:7;28108:9;:28::i;:::-;28000:142;;;:::o;23091:744::-;23200:7;23235:16;23245:5;23235:9;:16::i;:::-;23227:5;:24;23219:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23297:22;23322:13;:11;:13::i;:::-;23297:38;;23342:19;23372:25;23422:9;23417:350;23441:14;23437:1;:18;23417:350;;;23471:31;23505:11;:14;23517:1;23505:14;;;;;;;;;;;23471:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23558:1;23532:28;;:9;:14;;;:28;;;23528:89;;23593:9;:14;;;23573:34;;23528:89;23650:5;23629:26;;:17;:26;;;23625:135;;;23687:5;23672:11;:20;23668:59;;;23714:1;23707:8;;;;;;;;;23668:59;23737:13;;;;;:::i;:::-;;;;23625:135;23462:305;23457:3;;;;;:::i;:::-;;;;23417:350;;;;23773:56;;;;;;;;;;:::i;:::-;;;;;;;;23091:744;;;;;:::o;39312:36::-;;;;:::o;28205:157::-;28317:39;28334:4;28340:2;28344:7;28317:39;;;;;;;;;;;;:16;:39::i;:::-;28205:157;;;:::o;40642:164::-;1660:12;:10;:12::i;:::-;1649:23;;:7;:5;:7::i;:::-;:23;;;1641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40742:10:::1;;40726:13;:11;:13::i;:::-;:26;40718:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;40776:22;40786:3;40791:6;40776:9;:22::i;:::-;40642:164:::0;;:::o;22623:177::-;22690:7;22722:13;:11;:13::i;:::-;22714:5;:21;22706:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;22789:5;22782:12;;22623:177;;;:::o;40814:102::-;1660:12;:10;:12::i;:::-;1649:23;;:7;:5;:7::i;:::-;:23;;;1641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40901:7:::1;40885:13;:23;;;;;;;;;;;;:::i;:::-;;40814:102:::0;:::o;39565:505::-;38118:1;38716:7;;:19;;38708:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38118:1;38849:7;:18;;;;39624:10:::1;;;;;;;;;;;39616:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;39688:10;;39672:13;:11;:13::i;:::-;:26;39664:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39751:10;;39746:1;39730:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;39722:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39803:25;39817:10;39803:13;:25::i;:::-;39802:26;39794:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;39907:1;39887:17;;:21;39879:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39969:4;39947:7;:19;39955:10;39947:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;40024:1;40004:17;;:21;;;;:::i;:::-;39984:17;:41;;;;40036:26;40046:12;:10;:12::i;:::-;40060:1;40036:9;:26::i;:::-;38074:1:::0;39028:7;:22;;;;39565:505::o;39266:39::-;;;;:::o;25448:118::-;25512:7;25535:20;25547:7;25535:11;:20::i;:::-;:25;;;25528:32;;25448:118;;;:::o;24325:211::-;24389:7;24430:1;24413:19;;:5;:19;;;;24405:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24502:12;:19;24515:5;24502:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;24494:36;;24487:43;;24325:211;;;:::o;1737:94::-;1660:12;:10;:12::i;:::-;1649:23;;:7;:5;:7::i;:::-;:23;;;1641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1802:21:::1;1820:1;1802:9;:21::i;:::-;1737:94::o:0;41144:120::-;1660:12;:10;:12::i;:::-;1649:23;;:7;:5;:7::i;:::-;:23;;;1641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41216:10:::1;41208:24;;:47;41233:21;41208:47;;;;;;;;;;;;;;;;;;;;;;;41200:56;;;::::0;::::1;;41144:120::o:0;1514:87::-;1560:7;1587:6;;;;;;;;;;;1580:13;;1514:87;:::o;25780:98::-;25836:13;25865:7;25858:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25780:98;:::o;39357:22::-;;;;;;;;;;;;;:::o;40078:432::-;38118:1;38716:7;;:19;;38708:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38118:1;38849:7;:18;;;;40155:10:::1;;;;;;;;;;;40147:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;40219:10;;40203:13;:11;:13::i;:::-;:26;40195:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;40287:10;;40277:6;40261:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;40253:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40348:16;;40338:6;:26;;40330:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40426:12;;40417:6;:21;;;;:::i;:::-;40404:9;:34;40396:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40471:31;40481:12;:10;:12::i;:::-;40495:6;40471:9;:31::i;:::-;38074:1:::0;39028:7;:22;;;;40078:432;:::o;27418:274::-;27521:12;:10;:12::i;:::-;27509:24;;:8;:24;;;;27501:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27618:8;27573:18;:32;27592:12;:10;:12::i;:::-;27573:32;;;;;;;;;;;;;;;:42;27606:8;27573:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27667:8;27638:48;;27653:12;:10;:12::i;:::-;27638:48;;;27677:8;27638:48;;;;;;:::i;:::-;;;;;;;;27418:274;;:::o;41025:111::-;41087:4;41111:7;:17;41119:8;41111:17;;;;;;;;;;;;;;;;;;;;;;;;;41104:24;;41025:111;;;:::o;28425:311::-;28562:28;28572:4;28578:2;28582:7;28562:9;:28::i;:::-;28613:48;28636:4;28642:2;28646:7;28655:5;28613:22;:48::i;:::-;28597:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;28425:311;;;;:::o;25941:394::-;26039:13;26080:16;26088:7;26080;:16::i;:::-;26064:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;26170:21;26194:10;:8;:10::i;:::-;26170:34;;26249:1;26231:7;26225:21;:25;:104;;;;;;;;;;;;;;;;;26286:7;26295:18;:7;:16;:18::i;:::-;26269:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26225:104;26211:118;;;25941:394;;;:::o;32840:43::-;;;;:::o;27755:186::-;27877:4;27900:18;:25;27919:5;27900:25;;;;;;;;;;;;;;;:35;27926:8;27900:35;;;;;;;;;;;;;;;;;;;;;;;;;27893:42;;27755:186;;;;:::o;1839:192::-;1660:12;:10;:12::i;:::-;1649:23;;:7;:5;:7::i;:::-;:23;;;1641:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1948:1:::1;1928:22;;:8;:22;;;;1920:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2004:19;2014:8;2004:9;:19::i;:::-;1839:192:::0;:::o;39190:29::-;;;;:::o;3857:157::-;3942:4;3981:25;3966:40;;;:11;:40;;;;3959:47;;3857:157;;;:::o;28975:105::-;29032:4;29062:12;;29052:7;:22;29045:29;;28975:105;;;:::o;1069:98::-;1122:7;1149:10;1142:17;;1069:98;:::o;32662:172::-;32786:2;32759:15;:24;32775:7;32759:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32820:7;32816:2;32800:28;;32809:5;32800:28;;;;;;;;;;;;32662:172;;;:::o;31027:1529::-;31124:35;31162:20;31174:7;31162:11;:20::i;:::-;31124:58;;31191:22;31233:13;:18;;;31217:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;31286:12;:10;:12::i;:::-;31262:36;;:20;31274:7;31262:11;:20::i;:::-;:36;;;31217:81;:142;;;;31309:50;31326:13;:18;;;31346:12;:10;:12::i;:::-;31309:16;:50::i;:::-;31217:142;31191:169;;31385:17;31369:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31517:4;31495:26;;:13;:18;;;:26;;;31479:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;31606:1;31592:16;;:2;:16;;;;31584:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31659:43;31681:4;31687:2;31691:7;31700:1;31659:21;:43::i;:::-;31759:49;31776:1;31780:7;31789:13;:18;;;31759:8;:49::i;:::-;31847:1;31817:12;:18;31830:4;31817:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31883:1;31855:12;:16;31868:2;31855:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31914:43;;;;;;;;31929:2;31914:43;;;;;;31940:15;31914:43;;;;;31891:11;:20;31903:7;31891:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32185:19;32217:1;32207:7;:11;;;;:::i;:::-;32185:33;;32270:1;32229:43;;:11;:24;32241:11;32229:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;32225:236;;;32287:20;32295:11;32287:7;:20::i;:::-;32283:171;;;32347:97;;;;;;;;32374:13;:18;;;32347:97;;;;;;32405:13;:28;;;32347:97;;;;;32320:11;:24;32332:11;32320:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32283:171;32225:236;32493:7;32489:2;32474:27;;32483:4;32474:27;;;;;;;;;;;;32508:42;32529:4;32535:2;32539:7;32548:1;32508:20;:42::i;:::-;31117:1439;;;31027:1529;;;:::o;29086:98::-;29151:27;29161:2;29165:8;29151:27;;;;;;;;;;;;:9;:27::i;:::-;29086:98;;:::o;24788:606::-;24864:21;;:::i;:::-;24905:16;24913:7;24905;:16::i;:::-;24897:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24977:26;25025:12;25014:7;:23;25010:93;;25094:1;25079:12;25069:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;25048:47;;25010:93;25116:12;25131:7;25116:22;;25111:212;25148:18;25140:4;:26;25111:212;;25185:31;25219:11;:17;25231:4;25219:17;;;;;;;;;;;25185:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25275:1;25249:28;;:9;:14;;;:28;;;25245:71;;25297:9;25290:16;;;;;;;25245:71;25176:147;25168:6;;;;;:::i;:::-;;;;25111:212;;;;25331:57;;;;;;;;;;:::i;:::-;;;;;;;;24788:606;;;;:::o;2039:173::-;2095:16;2114:6;;;;;;;;;;;2095:25;;2140:8;2131:6;;:17;;;;;;;;;;;;;;;;;;2195:8;2164:40;;2185:8;2164:40;;;;;;;;;;;;2084:128;2039:173;:::o;34377:690::-;34514:4;34531:15;:2;:13;;;:15::i;:::-;34527:535;;;34586:2;34570:36;;;34607:12;:10;:12::i;:::-;34621:4;34627:7;34636:5;34570:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34557:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34818:1;34801:6;:13;:18;34797:215;;;34834:61;;;;;;;;;;:::i;:::-;;;;;;;;34797:215;34980:6;34974:13;34965:6;34961:2;34957:15;34950:38;34557:464;34702:45;;;34692:55;;;:6;:55;;;;34685:62;;;;;34527:535;35050:4;35043:11;;34377:690;;;;;;;:::o;40518:112::-;40578:13;40609;40602:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40518:112;:::o;4111:534::-;4167:13;4208:1;4199:5;:10;4195:53;;;4226:10;;;;;;;;;;;;;;;;;;;;;4195:53;4258:12;4273:5;4258:20;;4289:14;4314:78;4329:1;4321:4;:9;4314:78;;4347:8;;;;;:::i;:::-;;;;4378:2;4370:10;;;;;:::i;:::-;;;4314:78;;;4402:19;4434:6;4424:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4402:39;;4452:154;4468:1;4459:5;:10;4452:154;;4496:1;4486:11;;;;;:::i;:::-;;;4563:2;4555:5;:10;;;;:::i;:::-;4542:2;:24;;;;:::i;:::-;4529:39;;4512:6;4519;4512:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4592:2;4583:11;;;;;:::i;:::-;;;4452:154;;;4630:6;4616:21;;;;;4111:534;;;;:::o;35529:141::-;;;;;:::o;36056:140::-;;;;;:::o;29523:1272::-;29628:20;29651:12;;29628:35;;29692:1;29678:16;;:2;:16;;;;29670:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29869:21;29877:12;29869:7;:21::i;:::-;29868:22;29860:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29951:12;29939:8;:24;;29931:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30011:61;30041:1;30045:2;30049:12;30063:8;30011:21;:61::i;:::-;30081:30;30114:12;:16;30127:2;30114:16;;;;;;;;;;;;;;;30081:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30156:119;;;;;;;;30206:8;30176:11;:19;;;:39;;;;:::i;:::-;30156:119;;;;;;30259:8;30224:11;:24;;;:44;;;;:::i;:::-;30156:119;;;;;30137:12;:16;30150:2;30137:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30310:43;;;;;;;;30325:2;30310:43;;;;;;30336:15;30310:43;;;;;30282:11;:25;30294:12;30282:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30362:20;30385:12;30362:35;;30411:9;30406:281;30430:8;30426:1;:12;30406:281;;;30484:12;30480:2;30459:38;;30476:1;30459:38;;;;;;;;;;;;30524:59;30555:1;30559:2;30563:12;30577:5;30524:22;:59::i;:::-;30506:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;30665:14;;;;;:::i;:::-;;;;30440:3;;;;;:::i;:::-;;;;30406:281;;;;30710:12;30695;:27;;;;30729:60;30758:1;30762:2;30766:12;30780:8;30729:20;:60::i;:::-;29621:1174;;;29523:1272;;;:::o;5484:198::-;5544:4;5563:12;5630:7;5618:20;5610:28;;5673:1;5666:4;:8;5659:15;;;5484:198;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:117::-;5399:1;5396;5389:12;5413:117;5522:1;5519;5512:12;5536:180;5584:77;5581:1;5574:88;5681:4;5678:1;5671:15;5705:4;5702:1;5695:15;5722:281;5805:27;5827:4;5805:27;:::i;:::-;5797:6;5793:40;5935:6;5923:10;5920:22;5899:18;5887:10;5884:34;5881:62;5878:88;;;5946:18;;:::i;:::-;5878:88;5986:10;5982:2;5975:22;5765:238;5722:281;;:::o;6009:129::-;6043:6;6070:20;;:::i;:::-;6060:30;;6099:33;6127:4;6119:6;6099:33;:::i;:::-;6009:129;;;:::o;6144:307::-;6205:4;6295:18;6287:6;6284:30;6281:56;;;6317:18;;:::i;:::-;6281:56;6355:29;6377:6;6355:29;:::i;:::-;6347:37;;6439:4;6433;6429:15;6421:23;;6144:307;;;:::o;6457:154::-;6541:6;6536:3;6531;6518:30;6603:1;6594:6;6589:3;6585:16;6578:27;6457:154;;;:::o;6617:410::-;6694:5;6719:65;6735:48;6776:6;6735:48;:::i;:::-;6719:65;:::i;:::-;6710:74;;6807:6;6800:5;6793:21;6845:4;6838:5;6834:16;6883:3;6874:6;6869:3;6865:16;6862:25;6859:112;;;6890:79;;:::i;:::-;6859:112;6980:41;7014:6;7009:3;7004;6980:41;:::i;:::-;6700:327;6617:410;;;;;:::o;7046:338::-;7101:5;7150:3;7143:4;7135:6;7131:17;7127:27;7117:122;;7158:79;;:::i;:::-;7117:122;7275:6;7262:20;7300:78;7374:3;7366:6;7359:4;7351:6;7347:17;7300:78;:::i;:::-;7291:87;;7107:277;7046:338;;;;:::o;7390:943::-;7485:6;7493;7501;7509;7558:3;7546:9;7537:7;7533:23;7529:33;7526:120;;;7565:79;;:::i;:::-;7526:120;7685:1;7710:53;7755:7;7746:6;7735:9;7731:22;7710:53;:::i;:::-;7700:63;;7656:117;7812:2;7838:53;7883:7;7874:6;7863:9;7859:22;7838:53;:::i;:::-;7828:63;;7783:118;7940:2;7966:53;8011:7;8002:6;7991:9;7987:22;7966:53;:::i;:::-;7956:63;;7911:118;8096:2;8085:9;8081:18;8068:32;8127:18;8119:6;8116:30;8113:117;;;8149:79;;:::i;:::-;8113:117;8254:62;8308:7;8299:6;8288:9;8284:22;8254:62;:::i;:::-;8244:72;;8039:287;7390:943;;;;;;;:::o;8339:115::-;8424:23;8441:5;8424:23;:::i;:::-;8419:3;8412:36;8339:115;;:::o;8460:218::-;8551:4;8589:2;8578:9;8574:18;8566:26;;8602:69;8668:1;8657:9;8653:17;8644:6;8602:69;:::i;:::-;8460:218;;;;:::o;8684:116::-;8754:21;8769:5;8754:21;:::i;:::-;8747:5;8744:32;8734:60;;8790:1;8787;8780:12;8734:60;8684:116;:::o;8806:133::-;8849:5;8887:6;8874:20;8865:29;;8903:30;8927:5;8903:30;:::i;:::-;8806:133;;;;:::o;8945:323::-;9001:6;9050:2;9038:9;9029:7;9025:23;9021:32;9018:119;;;9056:79;;:::i;:::-;9018:119;9176:1;9201:50;9243:7;9234:6;9223:9;9219:22;9201:50;:::i;:::-;9191:60;;9147:114;8945:323;;;;:::o;9274:619::-;9351:6;9359;9367;9416:2;9404:9;9395:7;9391:23;9387:32;9384:119;;;9422:79;;:::i;:::-;9384:119;9542:1;9567:53;9612:7;9603:6;9592:9;9588:22;9567:53;:::i;:::-;9557:63;;9513:117;9669:2;9695:53;9740:7;9731:6;9720:9;9716:22;9695:53;:::i;:::-;9685:63;;9640:118;9797:2;9823:53;9868:7;9859:6;9848:9;9844:22;9823:53;:::i;:::-;9813:63;;9768:118;9274:619;;;;;:::o;9899:308::-;9961:4;10051:18;10043:6;10040:30;10037:56;;;10073:18;;:::i;:::-;10037:56;10111:29;10133:6;10111:29;:::i;:::-;10103:37;;10195:4;10189;10185:15;10177:23;;9899:308;;;:::o;10213:412::-;10291:5;10316:66;10332:49;10374:6;10332:49;:::i;:::-;10316:66;:::i;:::-;10307:75;;10405:6;10398:5;10391:21;10443:4;10436:5;10432:16;10481:3;10472:6;10467:3;10463:16;10460:25;10457:112;;;10488:79;;:::i;:::-;10457:112;10578:41;10612:6;10607:3;10602;10578:41;:::i;:::-;10297:328;10213:412;;;;;:::o;10645:340::-;10701:5;10750:3;10743:4;10735:6;10731:17;10727:27;10717:122;;10758:79;;:::i;:::-;10717:122;10875:6;10862:20;10900:79;10975:3;10967:6;10960:4;10952:6;10948:17;10900:79;:::i;:::-;10891:88;;10707:278;10645:340;;;;:::o;10991:509::-;11060:6;11109:2;11097:9;11088:7;11084:23;11080:32;11077:119;;;11115:79;;:::i;:::-;11077:119;11263:1;11252:9;11248:17;11235:31;11293:18;11285:6;11282:30;11279:117;;;11315:79;;:::i;:::-;11279:117;11420:63;11475:7;11466:6;11455:9;11451:22;11420:63;:::i;:::-;11410:73;;11206:287;10991:509;;;;:::o;11506:329::-;11565:6;11614:2;11602:9;11593:7;11589:23;11585:32;11582:119;;;11620:79;;:::i;:::-;11582:119;11740:1;11765:53;11810:7;11801:6;11790:9;11786:22;11765:53;:::i;:::-;11755:63;;11711:117;11506:329;;;;:::o;11841:468::-;11906:6;11914;11963:2;11951:9;11942:7;11938:23;11934:32;11931:119;;;11969:79;;:::i;:::-;11931:119;12089:1;12114:53;12159:7;12150:6;12139:9;12135:22;12114:53;:::i;:::-;12104:63;;12060:117;12216:2;12242:50;12284:7;12275:6;12264:9;12260:22;12242:50;:::i;:::-;12232:60;;12187:115;11841:468;;;;;:::o;12315:474::-;12383:6;12391;12440:2;12428:9;12419:7;12415:23;12411:32;12408:119;;;12446:79;;:::i;:::-;12408:119;12566:1;12591:53;12636:7;12627:6;12616:9;12612:22;12591:53;:::i;:::-;12581:63;;12537:117;12693:2;12719:53;12764:7;12755:6;12744:9;12740:22;12719:53;:::i;:::-;12709:63;;12664:118;12315:474;;;;;:::o;12795:180::-;12843:77;12840:1;12833:88;12940:4;12937:1;12930:15;12964:4;12961:1;12954:15;12981:320;13025:6;13062:1;13056:4;13052:12;13042:22;;13109:1;13103:4;13099:12;13130:18;13120:81;;13186:4;13178:6;13174:17;13164:27;;13120:81;13248:2;13240:6;13237:14;13217:18;13214:38;13211:84;;;13267:18;;:::i;:::-;13211:84;13032:269;12981:320;;;:::o;13307:232::-;13447:34;13443:1;13435:6;13431:14;13424:58;13516:15;13511:2;13503:6;13499:15;13492:40;13307:232;:::o;13545:366::-;13687:3;13708:67;13772:2;13767:3;13708:67;:::i;:::-;13701:74;;13784:93;13873:3;13784:93;:::i;:::-;13902:2;13897:3;13893:12;13886:19;;13545:366;;;:::o;13917:419::-;14083:4;14121:2;14110:9;14106:18;14098:26;;14170:9;14164:4;14160:20;14156:1;14145:9;14141:17;14134:47;14198:131;14324:4;14198:131;:::i;:::-;14190:139;;13917:419;;;:::o;14342:221::-;14482:34;14478:1;14470:6;14466:14;14459:58;14551:4;14546:2;14538:6;14534:15;14527:29;14342:221;:::o;14569:366::-;14711:3;14732:67;14796:2;14791:3;14732:67;:::i;:::-;14725:74;;14808:93;14897:3;14808:93;:::i;:::-;14926:2;14921:3;14917:12;14910:19;;14569:366;;;:::o;14941:419::-;15107:4;15145:2;15134:9;15130:18;15122:26;;15194:9;15188:4;15184:20;15180:1;15169:9;15165:17;15158:47;15222:131;15348:4;15222:131;:::i;:::-;15214:139;;14941:419;;;:::o;15366:244::-;15506:34;15502:1;15494:6;15490:14;15483:58;15575:27;15570:2;15562:6;15558:15;15551:52;15366:244;:::o;15616:366::-;15758:3;15779:67;15843:2;15838:3;15779:67;:::i;:::-;15772:74;;15855:93;15944:3;15855:93;:::i;:::-;15973:2;15968:3;15964:12;15957:19;;15616:366;;;:::o;15988:419::-;16154:4;16192:2;16181:9;16177:18;16169:26;;16241:9;16235:4;16231:20;16227:1;16216:9;16212:17;16205:47;16269:131;16395:4;16269:131;:::i;:::-;16261:139;;15988:419;;;:::o;16413:182::-;16553:34;16549:1;16541:6;16537:14;16530:58;16413:182;:::o;16601:366::-;16743:3;16764:67;16828:2;16823:3;16764:67;:::i;:::-;16757:74;;16840:93;16929:3;16840:93;:::i;:::-;16958:2;16953:3;16949:12;16942:19;;16601:366;;;:::o;16973:419::-;17139:4;17177:2;17166:9;17162:18;17154:26;;17226:9;17220:4;17216:20;17212:1;17201:9;17197:17;17190:47;17254:131;17380:4;17254:131;:::i;:::-;17246:139;;16973:419;;;:::o;17398:221::-;17538:34;17534:1;17526:6;17522:14;17515:58;17607:4;17602:2;17594:6;17590:15;17583:29;17398:221;:::o;17625:366::-;17767:3;17788:67;17852:2;17847:3;17788:67;:::i;:::-;17781:74;;17864:93;17953:3;17864:93;:::i;:::-;17982:2;17977:3;17973:12;17966:19;;17625:366;;;:::o;17997:419::-;18163:4;18201:2;18190:9;18186:18;18178:26;;18250:9;18244:4;18240:20;18236:1;18225:9;18221:17;18214:47;18278:131;18404:4;18278:131;:::i;:::-;18270:139;;17997:419;;;:::o;18422:180::-;18470:77;18467:1;18460:88;18567:4;18564:1;18557:15;18591:4;18588:1;18581:15;18608:233;18647:3;18670:24;18688:5;18670:24;:::i;:::-;18661:33;;18716:66;18709:5;18706:77;18703:103;;;18786:18;;:::i;:::-;18703:103;18833:1;18826:5;18822:13;18815:20;;18608:233;;;:::o;18847:::-;18987:34;18983:1;18975:6;18971:14;18964:58;19056:16;19051:2;19043:6;19039:15;19032:41;18847:233;:::o;19086:366::-;19228:3;19249:67;19313:2;19308:3;19249:67;:::i;:::-;19242:74;;19325:93;19414:3;19325:93;:::i;:::-;19443:2;19438:3;19434:12;19427:19;;19086:366;;;:::o;19458:419::-;19624:4;19662:2;19651:9;19647:18;19639:26;;19711:9;19705:4;19701:20;19697:1;19686:9;19682:17;19675:47;19739:131;19865:4;19739:131;:::i;:::-;19731:139;;19458:419;;;:::o;19883:158::-;20023:10;20019:1;20011:6;20007:14;20000:34;19883:158;:::o;20047:365::-;20189:3;20210:66;20274:1;20269:3;20210:66;:::i;:::-;20203:73;;20285:93;20374:3;20285:93;:::i;:::-;20403:2;20398:3;20394:12;20387:19;;20047:365;;;:::o;20418:419::-;20584:4;20622:2;20611:9;20607:18;20599:26;;20671:9;20665:4;20661:20;20657:1;20646:9;20642:17;20635:47;20699:131;20825:4;20699:131;:::i;:::-;20691:139;;20418:419;;;:::o;20843:222::-;20983:34;20979:1;20971:6;20967:14;20960:58;21052:5;21047:2;21039:6;21035:15;21028:30;20843:222;:::o;21071:366::-;21213:3;21234:67;21298:2;21293:3;21234:67;:::i;:::-;21227:74;;21310:93;21399:3;21310:93;:::i;:::-;21428:2;21423:3;21419:12;21412:19;;21071:366;;;:::o;21443:419::-;21609:4;21647:2;21636:9;21632:18;21624:26;;21696:9;21690:4;21686:20;21682:1;21671:9;21667:17;21660:47;21724:131;21850:4;21724:131;:::i;:::-;21716:139;;21443:419;;;:::o;21868:181::-;22008:33;22004:1;21996:6;21992:14;21985:57;21868:181;:::o;22055:366::-;22197:3;22218:67;22282:2;22277:3;22218:67;:::i;:::-;22211:74;;22294:93;22383:3;22294:93;:::i;:::-;22412:2;22407:3;22403:12;22396:19;;22055:366;;;:::o;22427:419::-;22593:4;22631:2;22620:9;22616:18;22608:26;;22680:9;22674:4;22670:20;22666:1;22655:9;22651:17;22644:47;22708:131;22834:4;22708:131;:::i;:::-;22700:139;;22427:419;;;:::o;22852:164::-;22992:16;22988:1;22980:6;22976:14;22969:40;22852:164;:::o;23022:366::-;23164:3;23185:67;23249:2;23244:3;23185:67;:::i;:::-;23178:74;;23261:93;23350:3;23261:93;:::i;:::-;23379:2;23374:3;23370:12;23363:19;;23022:366;;;:::o;23394:419::-;23560:4;23598:2;23587:9;23583:18;23575:26;;23647:9;23641:4;23637:20;23633:1;23622:9;23618:17;23611:47;23675:131;23801:4;23675:131;:::i;:::-;23667:139;;23394:419;;;:::o;23819:305::-;23859:3;23878:20;23896:1;23878:20;:::i;:::-;23873:25;;23912:20;23930:1;23912:20;:::i;:::-;23907:25;;24066:1;23998:66;23994:74;23991:1;23988:81;23985:107;;;24072:18;;:::i;:::-;23985:107;24116:1;24113;24109:9;24102:16;;23819:305;;;;:::o;24130:167::-;24270:19;24266:1;24258:6;24254:14;24247:43;24130:167;:::o;24303:366::-;24445:3;24466:67;24530:2;24525:3;24466:67;:::i;:::-;24459:74;;24542:93;24631:3;24542:93;:::i;:::-;24660:2;24655:3;24651:12;24644:19;;24303:366;;;:::o;24675:419::-;24841:4;24879:2;24868:9;24864:18;24856:26;;24928:9;24922:4;24918:20;24914:1;24903:9;24899:17;24892:47;24956:131;25082:4;24956:131;:::i;:::-;24948:139;;24675:419;;;:::o;25100:222::-;25240:34;25236:1;25228:6;25224:14;25217:58;25309:5;25304:2;25296:6;25292:15;25285:30;25100:222;:::o;25328:366::-;25470:3;25491:67;25555:2;25550:3;25491:67;:::i;:::-;25484:74;;25567:93;25656:3;25567:93;:::i;:::-;25685:2;25680:3;25676:12;25669:19;;25328:366;;;:::o;25700:419::-;25866:4;25904:2;25893:9;25889:18;25881:26;;25953:9;25947:4;25943:20;25939:1;25928:9;25924:17;25917:47;25981:131;26107:4;25981:131;:::i;:::-;25973:139;;25700:419;;;:::o;26125:173::-;26265:25;26261:1;26253:6;26249:14;26242:49;26125:173;:::o;26304:366::-;26446:3;26467:67;26531:2;26526:3;26467:67;:::i;:::-;26460:74;;26543:93;26632:3;26543:93;:::i;:::-;26661:2;26656:3;26652:12;26645:19;;26304:366;;;:::o;26676:419::-;26842:4;26880:2;26869:9;26865:18;26857:26;;26929:9;26923:4;26919:20;26915:1;26904:9;26900:17;26893:47;26957:131;27083:4;26957:131;:::i;:::-;26949:139;;26676:419;;;:::o;27101:191::-;27141:4;27161:20;27179:1;27161:20;:::i;:::-;27156:25;;27195:20;27213:1;27195:20;:::i;:::-;27190:25;;27234:1;27231;27228:8;27225:34;;;27239:18;;:::i;:::-;27225:34;27284:1;27281;27277:9;27269:17;;27101:191;;;;:::o;27298:230::-;27438:34;27434:1;27426:6;27422:14;27415:58;27507:13;27502:2;27494:6;27490:15;27483:38;27298:230;:::o;27534:366::-;27676:3;27697:67;27761:2;27756:3;27697:67;:::i;:::-;27690:74;;27773:93;27862:3;27773:93;:::i;:::-;27891:2;27886:3;27882:12;27875:19;;27534:366;;;:::o;27906:419::-;28072:4;28110:2;28099:9;28095:18;28087:26;;28159:9;28153:4;28149:20;28145:1;28134:9;28130:17;28123:47;28187:131;28313:4;28187:131;:::i;:::-;28179:139;;27906:419;;;:::o;28331:166::-;28471:18;28467:1;28459:6;28455:14;28448:42;28331:166;:::o;28503:366::-;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:419::-;29041:4;29079:2;29068:9;29064:18;29056:26;;29128:9;29122:4;29118:20;29114:1;29103:9;29099:17;29092:47;29156:131;29282:4;29156:131;:::i;:::-;29148:139;;28875:419;;;:::o;29300:348::-;29340:7;29363:20;29381:1;29363:20;:::i;:::-;29358:25;;29397:20;29415:1;29397:20;:::i;:::-;29392:25;;29585:1;29517:66;29513:74;29510:1;29507:81;29502:1;29495:9;29488:17;29484:105;29481:131;;;29592:18;;:::i;:::-;29481:131;29640:1;29637;29633:9;29622:20;;29300:348;;;;:::o;29654:167::-;29794:19;29790:1;29782:6;29778:14;29771:43;29654:167;:::o;29827:366::-;29969:3;29990:67;30054:2;30049:3;29990:67;:::i;:::-;29983:74;;30066:93;30155:3;30066:93;:::i;:::-;30184:2;30179:3;30175:12;30168:19;;29827:366;;;:::o;30199:419::-;30365:4;30403:2;30392:9;30388:18;30380:26;;30452:9;30446:4;30442:20;30438:1;30427:9;30423:17;30416:47;30480:131;30606:4;30480:131;:::i;:::-;30472:139;;30199:419;;;:::o;30624:176::-;30764:28;30760:1;30752:6;30748:14;30741:52;30624:176;:::o;30806:366::-;30948:3;30969:67;31033:2;31028:3;30969:67;:::i;:::-;30962:74;;31045:93;31134:3;31045:93;:::i;:::-;31163:2;31158:3;31154:12;31147:19;;30806:366;;;:::o;31178:419::-;31344:4;31382:2;31371:9;31367:18;31359:26;;31431:9;31425:4;31421:20;31417:1;31406:9;31402:17;31395:47;31459:131;31585:4;31459:131;:::i;:::-;31451:139;;31178:419;;;:::o;31603:238::-;31743:34;31739:1;31731:6;31727:14;31720:58;31812:21;31807:2;31799:6;31795:15;31788:46;31603:238;:::o;31847:366::-;31989:3;32010:67;32074:2;32069:3;32010:67;:::i;:::-;32003:74;;32086:93;32175:3;32086:93;:::i;:::-;32204:2;32199:3;32195:12;32188:19;;31847:366;;;:::o;32219:419::-;32385:4;32423:2;32412:9;32408:18;32400:26;;32472:9;32466:4;32462:20;32458:1;32447:9;32443:17;32436:47;32500:131;32626:4;32500:131;:::i;:::-;32492:139;;32219:419;;;:::o;32644:234::-;32784:34;32780:1;32772:6;32768:14;32761:58;32853:17;32848:2;32840:6;32836:15;32829:42;32644:234;:::o;32884:366::-;33026:3;33047:67;33111:2;33106:3;33047:67;:::i;:::-;33040:74;;33123:93;33212:3;33123:93;:::i;:::-;33241:2;33236:3;33232:12;33225:19;;32884:366;;;:::o;33256:419::-;33422:4;33460:2;33449:9;33445:18;33437:26;;33509:9;33503:4;33499:20;33495:1;33484:9;33480:17;33473:47;33537:131;33663:4;33537:131;:::i;:::-;33529:139;;33256:419;;;:::o;33681:148::-;33783:11;33820:3;33805:18;;33681:148;;;;:::o;33835:377::-;33941:3;33969:39;34002:5;33969:39;:::i;:::-;34024:89;34106:6;34101:3;34024:89;:::i;:::-;34017:96;;34122:52;34167:6;34162:3;34155:4;34148:5;34144:16;34122:52;:::i;:::-;34199:6;34194:3;34190:16;34183:23;;33945:267;33835:377;;;;:::o;34218:435::-;34398:3;34420:95;34511:3;34502:6;34420:95;:::i;:::-;34413:102;;34532:95;34623:3;34614:6;34532:95;:::i;:::-;34525:102;;34644:3;34637:10;;34218:435;;;;;:::o;34659:225::-;34799:34;34795:1;34787:6;34783:14;34776:58;34868:8;34863:2;34855:6;34851:15;34844:33;34659:225;:::o;34890:366::-;35032:3;35053:67;35117:2;35112:3;35053:67;:::i;:::-;35046:74;;35129:93;35218:3;35129:93;:::i;:::-;35247:2;35242:3;35238:12;35231:19;;34890:366;;;:::o;35262:419::-;35428:4;35466:2;35455:9;35451:18;35443:26;;35515:9;35509:4;35505:20;35501:1;35490:9;35486:17;35479:47;35543:131;35669:4;35543:131;:::i;:::-;35535:139;;35262:419;;;:::o;35687:237::-;35827:34;35823:1;35815:6;35811:14;35804:58;35896:20;35891:2;35883:6;35879:15;35872:45;35687:237;:::o;35930:366::-;36072:3;36093:67;36157:2;36152:3;36093:67;:::i;:::-;36086:74;;36169:93;36258:3;36169:93;:::i;:::-;36287:2;36282:3;36278:12;36271:19;;35930:366;;;:::o;36302:419::-;36468:4;36506:2;36495:9;36491:18;36483:26;;36555:9;36549:4;36545:20;36541:1;36530:9;36526:17;36519:47;36583:131;36709:4;36583:131;:::i;:::-;36575:139;;36302:419;;;:::o;36727:225::-;36867:34;36863:1;36855:6;36851:14;36844:58;36936:8;36931:2;36923:6;36919:15;36912:33;36727:225;:::o;36958:366::-;37100:3;37121:67;37185:2;37180:3;37121:67;:::i;:::-;37114:74;;37197:93;37286:3;37197:93;:::i;:::-;37315:2;37310:3;37306:12;37299:19;;36958:366;;;:::o;37330:419::-;37496:4;37534:2;37523:9;37519:18;37511:26;;37583:9;37577:4;37573:20;37569:1;37558:9;37554:17;37547:47;37611:131;37737:4;37611:131;:::i;:::-;37603:139;;37330:419;;;:::o;37755:224::-;37895:34;37891:1;37883:6;37879:14;37872:58;37964:7;37959:2;37951:6;37947:15;37940:32;37755:224;:::o;37985:366::-;38127:3;38148:67;38212:2;38207:3;38148:67;:::i;:::-;38141:74;;38224:93;38313:3;38224:93;:::i;:::-;38342:2;38337:3;38333:12;38326:19;;37985:366;;;:::o;38357:419::-;38523:4;38561:2;38550:9;38546:18;38538:26;;38610:9;38604:4;38600:20;38596:1;38585:9;38581:17;38574:47;38638:131;38764:4;38638:131;:::i;:::-;38630:139;;38357:419;;;:::o;38782:118::-;38819:7;38859:34;38852:5;38848:46;38837:57;;38782:118;;;:::o;38906:191::-;38946:4;38966:20;38984:1;38966:20;:::i;:::-;38961:25;;39000:20;39018:1;39000:20;:::i;:::-;38995:25;;39039:1;39036;39033:8;39030:34;;;39044:18;;:::i;:::-;39030:34;39089:1;39086;39082:9;39074:17;;38906:191;;;;:::o;39103:273::-;39143:3;39162:20;39180:1;39162:20;:::i;:::-;39157:25;;39196:20;39214:1;39196:20;:::i;:::-;39191:25;;39318:1;39282:34;39278:42;39275:1;39272:49;39269:75;;;39324:18;;:::i;:::-;39269:75;39368:1;39365;39361:9;39354:16;;39103:273;;;;:::o;39382:229::-;39522:34;39518:1;39510:6;39506:14;39499:58;39591:12;39586:2;39578:6;39574:15;39567:37;39382:229;:::o;39617:366::-;39759:3;39780:67;39844:2;39839:3;39780:67;:::i;:::-;39773:74;;39856:93;39945:3;39856:93;:::i;:::-;39974:2;39969:3;39965:12;39958:19;;39617:366;;;:::o;39989:419::-;40155:4;40193:2;40182:9;40178:18;40170:26;;40242:9;40236:4;40232:20;40228:1;40217:9;40213:17;40206:47;40270:131;40396:4;40270:131;:::i;:::-;40262:139;;39989:419;;;:::o;40414:171::-;40453:3;40476:24;40494:5;40476:24;:::i;:::-;40467:33;;40522:4;40515:5;40512:15;40509:41;;;40530:18;;:::i;:::-;40509:41;40577:1;40570:5;40566:13;40559:20;;40414:171;;;:::o;40591:234::-;40731:34;40727:1;40719:6;40715:14;40708:58;40800:17;40795:2;40787:6;40783:15;40776:42;40591:234;:::o;40831:366::-;40973:3;40994:67;41058:2;41053:3;40994:67;:::i;:::-;40987:74;;41070:93;41159:3;41070:93;:::i;:::-;41188:2;41183:3;41179:12;41172:19;;40831:366;;;:::o;41203:419::-;41369:4;41407:2;41396:9;41392:18;41384:26;;41456:9;41450:4;41446:20;41442:1;41431:9;41427:17;41420:47;41484:131;41610:4;41484:131;:::i;:::-;41476:139;;41203:419;;;:::o;41628:98::-;41679:6;41713:5;41707:12;41697:22;;41628:98;;;:::o;41732:168::-;41815:11;41849:6;41844:3;41837:19;41889:4;41884:3;41880:14;41865:29;;41732:168;;;;:::o;41906:360::-;41992:3;42020:38;42052:5;42020:38;:::i;:::-;42074:70;42137:6;42132:3;42074:70;:::i;:::-;42067:77;;42153:52;42198:6;42193:3;42186:4;42179:5;42175:16;42153:52;:::i;:::-;42230:29;42252:6;42230:29;:::i;:::-;42225:3;42221:39;42214:46;;41996:270;41906:360;;;;:::o;42272:640::-;42467:4;42505:3;42494:9;42490:19;42482:27;;42519:71;42587:1;42576:9;42572:17;42563:6;42519:71;:::i;:::-;42600:72;42668:2;42657:9;42653:18;42644:6;42600:72;:::i;:::-;42682;42750:2;42739:9;42735:18;42726:6;42682:72;:::i;:::-;42801:9;42795:4;42791:20;42786:2;42775:9;42771:18;42764:48;42829:76;42900:4;42891:6;42829:76;:::i;:::-;42821:84;;42272:640;;;;;;;:::o;42918:141::-;42974:5;43005:6;42999:13;42990:22;;43021:32;43047:5;43021:32;:::i;:::-;42918:141;;;;:::o;43065:349::-;43134:6;43183:2;43171:9;43162:7;43158:23;43154:32;43151:119;;;43189:79;;:::i;:::-;43151:119;43309:1;43334:63;43389:7;43380:6;43369:9;43365:22;43334:63;:::i;:::-;43324:73;;43280:127;43065:349;;;;:::o;43420:180::-;43468:77;43465:1;43458:88;43565:4;43562:1;43555:15;43589:4;43586:1;43579:15;43606:185;43646:1;43663:20;43681:1;43663:20;:::i;:::-;43658:25;;43697:20;43715:1;43697:20;:::i;:::-;43692:25;;43736:1;43726:35;;43741:18;;:::i;:::-;43726:35;43783:1;43780;43776:9;43771:14;;43606:185;;;;:::o;43797:176::-;43829:1;43846:20;43864:1;43846:20;:::i;:::-;43841:25;;43880:20;43898:1;43880:20;:::i;:::-;43875:25;;43919:1;43909:35;;43924:18;;:::i;:::-;43909:35;43965:1;43962;43958:9;43953:14;;43797:176;;;;:::o;43979:180::-;44027:77;44024:1;44017:88;44124:4;44121:1;44114:15;44148:4;44145:1;44138:15;44165:220;44305:34;44301:1;44293:6;44289:14;44282:58;44374:3;44369:2;44361:6;44357:15;44350:28;44165:220;:::o;44391:366::-;44533:3;44554:67;44618:2;44613:3;44554:67;:::i;:::-;44547:74;;44630:93;44719:3;44630:93;:::i;:::-;44748:2;44743:3;44739:12;44732:19;;44391:366;;;:::o;44763:419::-;44929:4;44967:2;44956:9;44952:18;44944:26;;45016:9;45010:4;45006:20;45002:1;44991:9;44987:17;44980:47;45044:131;45170:4;45044:131;:::i;:::-;45036:139;;44763:419;;;:::o;45188:179::-;45328:31;45324:1;45316:6;45312:14;45305:55;45188:179;:::o;45373:366::-;45515:3;45536:67;45600:2;45595:3;45536:67;:::i;:::-;45529:74;;45612:93;45701:3;45612:93;:::i;:::-;45730:2;45725:3;45721:12;45714:19;;45373:366;;;:::o;45745:419::-;45911:4;45949:2;45938:9;45934:18;45926:26;;45998:9;45992:4;45988:20;45984:1;45973:9;45969:17;45962:47;46026:131;46152:4;46026:131;:::i;:::-;46018:139;;45745:419;;;:::o;46170:221::-;46310:34;46306:1;46298:6;46294:14;46287:58;46379:4;46374:2;46366:6;46362:15;46355:29;46170:221;:::o;46397:366::-;46539:3;46560:67;46624:2;46619:3;46560:67;:::i;:::-;46553:74;;46636:93;46725:3;46636:93;:::i;:::-;46754:2;46749:3;46745:12;46738:19;;46397:366;;;:::o;46769:419::-;46935:4;46973:2;46962:9;46958:18;46950:26;;47022:9;47016:4;47012:20;47008:1;46997:9;46993:17;46986:47;47050:131;47176:4;47050:131;:::i;:::-;47042:139;;46769:419;;;:::o
Swarm Source
ipfs://e4857ab6d89c5fef6be89b034e2366529b0428cb43cd1be7a880959c7b805c35
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.