ERC-721
Overview
Max Total Supply
864 RK
Holders
296
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 RKLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RichKidz
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; contract RichKidz is ERC721 { event Mint(address indexed from, uint256 indexed tokenId); modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } modifier onlyCollaborator() { bool isCollaborator = false; for (uint256 i; i < collaborators.length; i++) { if (collaborators[i].addr == msg.sender) { isCollaborator = true; break; } } require( owner() == _msgSender() || isCollaborator, "Ownable: caller is not the owner nor a collaborator" ); _; } modifier claimStarted() { require( startClaimDate != 0 && startClaimDate <= block.timestamp, "You are too early" ); _; } struct Collaborators { address addr; uint256 cut; } uint256 private startClaimDate = 1629475200; uint256 private mintPrice = 30000000000000000; uint256 private totalTokens = 10000; uint256 private totalMintedTokens = 0; uint256 private maxKidzPerWallet = 200; uint256 private maxKidzPerTransaction = 10; uint128 private basisPoints = 10000; string private baseURI = "https://richkidztest.s3.us-west-1.amazonaws.com/"; bool public premintingComplete = false; uint256 public giveawayCount = 269; mapping(address => uint256) private claimedKidzPerWallet; uint16[] availableKidz; Collaborators[] private collaborators; constructor() ERC721("RichKidz", "RK") {} // ONLY OWNER /** * Sets the collaborators of the project with their cuts */ function addCollaborators(Collaborators[] memory _collaborators) external onlyOwner { require(collaborators.length == 0, "Collaborators were already set"); uint128 totalCut; for (uint256 i; i < _collaborators.length; i++) { collaborators.push(_collaborators[i]); totalCut += uint128(_collaborators[i].cut); } require(totalCut == basisPoints, "Total cut does not add to 100%"); } // ONLY COLLABORATORS /** * @dev Allows to withdraw the Ether in the contract and split it among the collaborators */ function withdraw() external onlyCollaborator { uint256 totalBalance = address(this).balance; for (uint256 i; i < collaborators.length; i++) { payable(collaborators[i].addr).transfer( mulScale(totalBalance, collaborators[i].cut, basisPoints) ); } } /** * @dev Sets the base URI for the API that provides the NFT data. */ function setBaseTokenURI(string memory _uri) external onlyCollaborator { baseURI = _uri; } /** * @dev Sets the claim price for each kid */ function setMintPrice(uint256 _mintPrice) external onlyCollaborator { mintPrice = _mintPrice; } /** * @dev Populates the available kidz */ function addAvailableKidz(uint16 from, uint16 to) external onlyCollaborator { for (uint16 i = from; i <= to; i++) { availableKidz.push(i); } } /** * @dev Removes a chosen kid from the available list */ function removeKidzFromAvailableKidz(uint16 tokenId) external onlyCollaborator { for (uint16 i; i <= availableKidz.length; i++) { if (availableKidz[i] != tokenId) { continue; } availableKidz[i] = availableKidz[availableKidz.length - 1]; availableKidz.pop(); break; } } /** * @dev Allow devs to hand pick some kidz before the available kidz list is created */ function allocateTokens(uint256[] memory tokenIds) external onlyCollaborator { require(availableKidz.length == 0, "Available kidz are already set"); _batchMint(msg.sender, tokenIds); totalMintedTokens += tokenIds.length; } /** * @dev Sets the date that users can start claiming kidz */ function setStartClaimDate(uint256 _startClaimDate) external onlyCollaborator { startClaimDate = _startClaimDate; } /** * @dev Checks if an kid is in the available list */ function isKidAvailable(uint16 tokenId) external view onlyCollaborator returns (bool) { for (uint16 i; i < availableKidz.length; i++) { if (availableKidz[i] == tokenId) { return true; } } return false; } /** * @dev Give random kidz to the provided address */ function reserveKidz(address _address) external onlyCollaborator { require(availableKidz.length >= giveawayCount, "No kidz left to be claimed"); require(!premintingComplete,"Kidz were already reserved for giveaways!"); totalMintedTokens += giveawayCount; uint256[] memory tokenIds = new uint256[](giveawayCount); for (uint256 i; i < giveawayCount; i++) { tokenIds[i] = getKidToBeClaimed(); } _batchMint(_address, tokenIds); premintingComplete = true; } // END ONLY COLLABORATORS /** * @dev Claim a single kid */ function claimKid() external payable callerIsUser claimStarted { require(msg.value >= mintPrice, "Not enough Ether to claim an kid"); require( claimedKidzPerWallet[msg.sender] < maxKidzPerWallet, "You cannot claim more kidz" ); require(availableKidz.length > 0, "No kidz left to be claimed"); claimedKidzPerWallet[msg.sender]++; totalMintedTokens++; _mint(msg.sender, getKidToBeClaimed()); } /** * @dev Claim up to 10 kidz at once */ function claimKidz(uint256 amount) external payable callerIsUser claimStarted { require( msg.value >= mintPrice * amount, "Not enough Ether to claim the kidz" ); require(amount <= maxKidzPerTransaction, "You can only claim 10 Kidz per transactions"); require( claimedKidzPerWallet[msg.sender] + amount <= maxKidzPerWallet, "You cannot claim more kidz" ); require(availableKidz.length >= amount, "No kidz left to be claimed"); uint256[] memory tokenIds = new uint256[](amount); claimedKidzPerWallet[msg.sender] += amount; totalMintedTokens += amount; for (uint256 i; i < amount; i++) { tokenIds[i] = getKidToBeClaimed(); } _batchMint(msg.sender, tokenIds); } /** * @dev Returns the tokenId by index */ function tokenByIndex(uint256 tokenId) external view returns (uint256) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); return tokenId; } /** * @dev Returns the base URI for the tokens API. */ function baseTokenURI() external view returns (string memory) { return baseURI; } /** * @dev Returns how many kidz are still available to be claimed */ function getAvailableKidz() external view returns (uint256) { return availableKidz.length; } /** * @dev Returns the claim price */ function getmintPrice() external view returns (uint256) { return mintPrice; } /** * @dev Returns the total supply */ function totalSupply() external view virtual returns (uint256) { return totalMintedTokens; } // Private and Internal functions /** * @dev Returns a random available kid to be claimed */ function getKidToBeClaimed() private returns (uint256) { uint256 random = _getRandomNumber(availableKidz.length); uint256 tokenId = uint256(availableKidz[random]); availableKidz[random] = availableKidz[availableKidz.length - 1]; availableKidz.pop(); return tokenId; } /** * @dev Generates a pseudo-random number. */ function _getRandomNumber(uint256 _upper) private view returns (uint256) { uint256 random = uint256( keccak256( abi.encodePacked( availableKidz.length, blockhash(block.number - 1), block.coinbase, block.difficulty, msg.sender ) ) ); return random % _upper; } /** * @dev See {ERC721}. */ function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mulScale( uint256 x, uint256 y, uint128 scale ) internal pure returns (uint256) { uint256 a = x / scale; uint256 b = x % scale; uint256 c = y / scale; uint256 d = y % scale; return a * c * scale + a * d + b * c + (b * d) / scale; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./IERC721Enumerable.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; import "./Ownable.sol"; import "./Ownable.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, Ownable { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) internal _owners; // Mapping owner address to token count mapping(address => uint256) internal _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _batchMint(address to, uint256[] memory tokenIds) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); _balances[to] += tokenIds.length; for (uint256 i; i < tokenIds.length; i++) { require(!_exists(tokenIds[i]), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenIds[i]); _owners[tokenIds[i]] = to; emit Transfer(address(0), to, tokenIds[i]); } } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
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":"from","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint16","name":"from","type":"uint16"},{"internalType":"uint16","name":"to","type":"uint16"}],"name":"addAvailableKidz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"cut","type":"uint256"}],"internalType":"struct RichKidz.Collaborators[]","name":"_collaborators","type":"tuple[]"}],"name":"addCollaborators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"allocateTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimKid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimKidz","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAvailableKidz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getmintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveawayCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"isKidAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premintingComplete","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"removeKidzFromAvailableKidz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"reserveKidz","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":"_uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startClaimDate","type":"uint256"}],"name":"setStartClaimDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
63611fd180600755666a94d74f43000060085561271060098190556000600a90815560c8600b55600c55600d80546001600160801b031916909117905560e060405260306080818152906200359960a03980516200006691600e9160209091019062000155565b50600f805460ff1916905561010d6010553480156200008457600080fd5b50604051806040016040528060088152602001672934b1b425b4b23d60c11b81525060405180604001604052806002815260200161524b60f01b8152506000620000d36200015160201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200013290600190602085019062000155565b5080516200014890600290602084019062000155565b50505062000238565b3390565b8280546200016390620001fb565b90600052602060002090601f016020900481019282620001875760008555620001d2565b82601f10620001a257805160ff1916838001178555620001d2565b82800160010185558215620001d2579182015b82811115620001d2578251825591602001919060010190620001b5565b50620001e0929150620001e4565b5090565b5b80821115620001e05760008155600101620001e5565b600181811c908216806200021057607f821691505b602082108114156200023257634e487b7160e01b600052602260045260246000fd5b50919050565b61335180620002486000396000f3fe6080604052600436106102045760003560e01c80636352211e11610118578063c87b56dd116100a0578063e985e9c51161006f578063e985e9c51461058a578063e9be0f3f146105d3578063f2fde38b146105e9578063f4a0a52814610609578063fc14ba491461062957600080fd5b8063c87b56dd14610522578063c9783c0214610542578063d547cfb714610562578063e91a92261461057757600080fd5b80638d482354116100e75780638d4823541461049a5780638da5cb5b146104af57806395d89b41146104cd578063a22cb465146104e2578063b88d4fde1461050257600080fd5b80636352211e1461043057806370a0823114610450578063715018a61461047057806384fd33711461048557600080fd5b806323ab18f11161019b5780633ccfd60b1161016a5780633ccfd60b146103b357806342842e0e146103c85780634f6ccce7146103e8578063502006ff1461040857806360251cd11461042857600080fd5b806323ab18f11461033357806323b872dd1461035357806328e27bf51461037357806330176e131461039357600080fd5b80630955f63c116101d75780630955f63c146102ba578063095ea7b3146102da57806318160ddd146102fa5780632344e9181461031957600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc1461026057806308b6d26714610298575b600080fd5b34801561021557600080fd5b50610229610224366004612dda565b610649565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025361069b565b6040516102359190612f4b565b34801561026c57600080fd5b5061028061027b366004612e9b565b61072d565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004612e58565b6107ba565b005b3480156102c657600080fd5b506102b86102d5366004612c93565b6109d4565b3480156102e657600080fd5b506102b86102f5366004612c6a565b610b75565b34801561030657600080fd5b50600a545b604051908152602001610235565b34801561032557600080fd5b50600f546102299060ff1681565b34801561033f57600080fd5b506102b861034e366004612e9b565b610c86565b34801561035f57600080fd5b506102b861036e366004612b7c565b610d33565b34801561037f57600080fd5b506102b861038e366004612e72565b610d64565b34801561039f57600080fd5b506102b86103ae366004612e12565b610e8c565b3480156103bf57600080fd5b506102b8610f46565b3480156103d457600080fd5b506102b86103e3366004612b7c565b6110d2565b3480156103f457600080fd5b5061030b610403366004612e9b565b6110ed565b34801561041457600080fd5b506102b8610423366004612b30565b611118565b6102b8611328565b34801561043c57600080fd5b5061028061044b366004612e9b565b6114e3565b34801561045c57600080fd5b5061030b61046b366004612b30565b61155a565b34801561047c57600080fd5b506102b86115e1565b34801561049157600080fd5b5060125461030b565b3480156104a657600080fd5b5060085461030b565b3480156104bb57600080fd5b506000546001600160a01b0316610280565b3480156104d957600080fd5b50610253611655565b3480156104ee57600080fd5b506102b86104fd366004612c30565b611664565b34801561050e57600080fd5b506102b861051d366004612bb7565b611729565b34801561052e57600080fd5b5061025361053d366004612e9b565b61175b565b34801561054e57600080fd5b5061022961055d366004612e58565b611826565b34801561056e57600080fd5b50610253611959565b6102b8610585366004612e9b565b611968565b34801561059657600080fd5b506102296105a5366004612b4a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105df57600080fd5b5061030b60105481565b3480156105f557600080fd5b506102b8610604366004612b30565b611c57565b34801561061557600080fd5b506102b8610624366004612e9b565b611d41565b34801561063557600080fd5b506102b8610644366004612d53565b611dee565b60006001600160e01b031982166380ac58cd60e01b148061067a57506001600160e01b03198216635b5e139f60e01b145b8061069557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546106aa9061323a565b80601f01602080910402602001604051908101604052809291908181526020018280546106d69061323a565b80156107235780601f106106f857610100808354040283529160200191610723565b820191906000526020600020905b81548152906001019060200180831161070657829003601f168201915b5050505050905090565b600061073882611f0b565b61079e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000805b60135481101561082e57336001600160a01b0316601382815481106107f357634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561081c576001915061082e565b8061082681613291565b9150506107be565b506000546001600160a01b03163314806108455750805b6108615760405162461bcd60e51b815260040161079590613031565b60005b60125461ffff8216116109cf578261ffff1660128261ffff168154811061089b57634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16146108c7576109bd565b601280546108d7906001906131f7565b815481106108f557634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660128261ffff168154811061093e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550601280548061098c57634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a02191690559055505050565b806109c78161326f565b915050610864565b505050565b6000546001600160a01b031633146109fe5760405162461bcd60e51b815260040161079590612ffc565b60135415610a4e5760405162461bcd60e51b815260206004820152601e60248201527f436f6c6c61626f7261746f7273207765726520616c72656164792073657400006044820152606401610795565b6000805b8251811015610b13576013838281518110610a7d57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b039092169190911781559101519101558251839082908110610ae857634e487b7160e01b600052603260045260246000fd5b60200260200101516020015182610aff919061318a565b915080610b0b81613291565b915050610a52565b50600d546001600160801b03828116911614610b715760405162461bcd60e51b815260206004820152601e60248201527f546f74616c2063757420646f6573206e6f742061646420746f203130302500006044820152606401610795565b5050565b6000610b80826114e3565b9050806001600160a01b0316836001600160a01b03161415610bee5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610795565b336001600160a01b0382161480610c0a5750610c0a81336105a5565b610c7c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610795565b6109cf8383611f28565b6000805b601354811015610cfa57336001600160a01b031660138281548110610cbf57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610ce85760019150610cfa565b80610cf281613291565b915050610c8a565b506000546001600160a01b0316331480610d115750805b610d2d5760405162461bcd60e51b815260040161079590613031565b50600755565b610d3d3382611f96565b610d595760405162461bcd60e51b815260040161079590613084565b6109cf83838361203b565b6000805b601354811015610dd857336001600160a01b031660138281548110610d9d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610dc65760019150610dd8565b80610dd081613291565b915050610d68565b506000546001600160a01b0316331480610def5750805b610e0b5760405162461bcd60e51b815260040161079590613031565b825b8261ffff168161ffff1611610e8657601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344460108204018054600f9092166002026101000a61ffff818102199093169284160291909117905580610e7e8161326f565b915050610e0d565b50505050565b6000805b601354811015610f0057336001600160a01b031660138281548110610ec557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610eee5760019150610f00565b80610ef881613291565b915050610e90565b506000546001600160a01b0316331480610f175750805b610f335760405162461bcd60e51b815260040161079590613031565b81516109cf90600e906020850190612a1a565b6000805b601354811015610fba57336001600160a01b031660138281548110610f7f57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610fa85760019150610fba565b80610fb281613291565b915050610f4a565b506000546001600160a01b0316331480610fd15750805b610fed5760405162461bcd60e51b815260040161079590613031565b4760005b6013548110156109cf576013818154811061101c57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000160009054906101000a90046001600160a01b03166001600160a01b03166108fc611097846013858154811061107257634e487b7160e01b600052603260045260246000fd5b6000918252602090912060016002909202010154600d546001600160801b03166121db565b6040518115909202916000818181858888f193505050501580156110bf573d6000803e3d6000fd5b50806110ca81613291565b915050610ff1565b6109cf83838360405180602001604052806000815250611729565b60006110f882611f0b565b6111145760405162461bcd60e51b815260040161079590612fb0565b5090565b6000805b60135481101561118c57336001600160a01b03166013828154811061115157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561117a576001915061118c565b8061118481613291565b91505061111c565b506000546001600160a01b03163314806111a35750805b6111bf5760405162461bcd60e51b815260040161079590613031565b60105460125410156111e35760405162461bcd60e51b8152600401610795906130d5565b600f5460ff16156112485760405162461bcd60e51b815260206004820152602960248201527f4b69647a207765726520616c726561647920726573657276656420666f72206760448201526869766561776179732160b81b6064820152608401610795565b601054600a600082825461125c91906131ac565b909155505060105460009067ffffffffffffffff81111561128d57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156112b6578160200160208202803683370190505b50905060005b60105481101561130b576112ce6122b2565b8282815181106112ee57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061130381613291565b9150506112bc565b506113168382612409565b5050600f805460ff1916600117905550565b3233146113775760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610795565b6007541580159061138a57504260075411155b6113ca5760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610795565b60085434101561141c5760405162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d20616e206b69646044820152606401610795565b600b54336000908152601160205260409020541061147c5760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f7265206b69647a0000000000006044820152606401610795565b60125461149b5760405162461bcd60e51b8152600401610795906130d5565b3360009081526011602052604081208054916114b683613291565b9091555050600a80549060006114cb83613291565b91905055506114e1336114dc6122b2565b612618565b565b6000818152600360205260408120546001600160a01b0316806106955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610795565b60006001600160a01b0382166115c55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610795565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b0316331461160b5760405162461bcd60e51b815260040161079590612ffc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600280546106aa9061323a565b6001600160a01b0382163314156116bd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610795565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117333383611f96565b61174f5760405162461bcd60e51b815260040161079590613084565b610e868484848461274b565b606061176682611f0b565b6117ca5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610795565b60006117d4611959565b905060008151116117f4576040518060200160405280600081525061181f565b806117fe8461277e565b60405160200161180f929190612edf565b6040516020818303038152906040525b9392505050565b600080805b60135481101561189b57336001600160a01b03166013828154811061186057634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611889576001915061189b565b8061189381613291565b91505061182b565b506000546001600160a01b03163314806118b25750805b6118ce5760405162461bcd60e51b815260040161079590613031565b60005b60125461ffff8216101561194d578361ffff1660128261ffff168154811061190957634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16141561193b576001925050611953565b806119458161326f565b9150506118d1565b50600091505b50919050565b6060600e80546106aa9061323a565b3233146119b75760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610795565b600754158015906119ca57504260075411155b611a0a5760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610795565b80600854611a1891906131d8565b341015611a725760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d20746865206b69604482015261323d60f11b6064820152608401610795565b600c54811115611ad85760405162461bcd60e51b815260206004820152602b60248201527f596f752063616e206f6e6c7920636c61696d203130204b69647a20706572207460448201526a72616e73616374696f6e7360a81b6064820152608401610795565b600b5433600090815260116020526040902054611af69083906131ac565b1115611b445760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f7265206b69647a0000000000006044820152606401610795565b601254811115611b665760405162461bcd60e51b8152600401610795906130d5565b60008167ffffffffffffffff811115611b8f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611bb8578160200160208202803683370190505b5033600090815260116020526040812080549293508492909190611bdd9084906131ac565b9250508190555081600a6000828254611bf691906131ac565b90915550600090505b82811015611c4c57611c0f6122b2565b828281518110611c2f57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280611c4481613291565b915050611bff565b50610b713382612409565b6000546001600160a01b03163314611c815760405162461bcd60e51b815260040161079590612ffc565b6001600160a01b038116611ce65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b601354811015611db557336001600160a01b031660138281548110611d7a57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611da35760019150611db5565b80611dad81613291565b915050611d45565b506000546001600160a01b0316331480611dcc5750805b611de85760405162461bcd60e51b815260040161079590613031565b50600855565b6000805b601354811015611e6257336001600160a01b031660138281548110611e2757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611e505760019150611e62565b80611e5a81613291565b915050611df2565b506000546001600160a01b0316331480611e795750805b611e955760405162461bcd60e51b815260040161079590613031565b60125415611ee55760405162461bcd60e51b815260206004820152601e60248201527f417661696c61626c65206b69647a2061726520616c72656164792073657400006044820152606401610795565b611eef3383612409565b8151600a6000828254611f0291906131ac565b90915550505050565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f5d826114e3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fa182611f0b565b611fbd5760405162461bcd60e51b815260040161079590612fb0565b6000611fc8836114e3565b9050806001600160a01b0316846001600160a01b031614806120035750836001600160a01b0316611ff88461072d565b6001600160a01b0316145b8061203357506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661204e826114e3565b6001600160a01b0316146120b65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610795565b6001600160a01b0382166121185760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610795565b612123600082611f28565b6001600160a01b038316600090815260046020526040812080546001929061214c9084906131f7565b90915550506001600160a01b038216600090815260046020526040812080546001929061217a9084906131ac565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000806121f16001600160801b038416866131c4565b905060006122086001600160801b038516876132ac565b9050600061221f6001600160801b038616876131c4565b905060006122366001600160801b038716886132ac565b90506001600160801b03861661224c82856131d8565b61225691906131c4565b61226083856131d8565b61226a83876131d8565b6001600160801b03891661227e86896131d8565b61228891906131d8565b61229291906131ac565b61229c91906131ac565b6122a691906131ac565b98975050505050505050565b6000806122c3601280549050612898565b90506000601282815481106122e857634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1690506012600160128054905061232691906131f7565b8154811061234457634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff166012838154811061238957634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060128054806123d757634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905592915050565b6001600160a01b03821661245f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610795565b80516001600160a01b038316600090815260046020526040812080549091906124899084906131ac565b90915550600090505b81518110156109cf576124cb8282815181106124be57634e487b7160e01b600052603260045260246000fd5b6020026020010151611f0b565b156125185760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610795565b61253e600084848481518110610e8657634e487b7160e01b600052603260045260246000fd5b826003600084848151811061256357634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508181815181106125bd57634e487b7160e01b600052603260045260246000fd5b6020026020010151836001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48061261081613291565b915050612492565b6001600160a01b03821661266e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610795565b61267781611f0b565b156126c45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610795565b6001600160a01b03821660009081526004602052604081208054600192906126ed9084906131ac565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61275684848461203b565b6127628484848461290d565b610e865760405162461bcd60e51b815260040161079590612f5e565b6060816127a25750506040805180820190915260018152600360fc1b602082015290565b8160005b81156127cc57806127b681613291565b91506127c59050600a836131c4565b91506127a6565b60008167ffffffffffffffff8111156127f557634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561281f576020820181803683370190505b5090505b8415612033576128346001836131f7565b9150612841600a866132ac565b61284c9060306131ac565b60f81b81838151811061286f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612891600a866131c4565b9450612823565b60125460009081906128ab6001436131f7565b6040805160208101939093529040908201526bffffffffffffffffffffffff1941606090811b82168184015244607484015233901b16609482015260a80160408051601f198184030181529190528051602090910120905061181f83826132ac565b60006001600160a01b0384163b15612a0f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612951903390899088908890600401612f0e565b602060405180830381600087803b15801561296b57600080fd5b505af192505050801561299b575060408051601f3d908101601f1916820190925261299891810190612df6565b60015b6129f5573d8080156129c9576040519150601f19603f3d011682016040523d82523d6000602084013e6129ce565b606091505b5080516129ed5760405162461bcd60e51b815260040161079590612f5e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612033565b506001949350505050565b828054612a269061323a565b90600052602060002090601f016020900481019282612a485760008555612a8e565b82601f10612a6157805160ff1916838001178555612a8e565b82800160010185558215612a8e579182015b82811115612a8e578251825591602001919060010190612a73565b506111149291505b808211156111145760008155600101612a96565b600067ffffffffffffffff831115612ac457612ac46132ec565b612ad7601f8401601f1916602001613135565b9050828152838383011115612aeb57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612b1957600080fd5b919050565b803561ffff81168114612b1957600080fd5b600060208284031215612b41578081fd5b61181f82612b02565b60008060408385031215612b5c578081fd5b612b6583612b02565b9150612b7360208401612b02565b90509250929050565b600080600060608486031215612b90578081fd5b612b9984612b02565b9250612ba760208501612b02565b9150604084013590509250925092565b60008060008060808587031215612bcc578081fd5b612bd585612b02565b9350612be360208601612b02565b925060408501359150606085013567ffffffffffffffff811115612c05578182fd5b8501601f81018713612c15578182fd5b612c2487823560208401612aaa565b91505092959194509250565b60008060408385031215612c42578182fd5b612c4b83612b02565b915060208301358015158114612c5f578182fd5b809150509250929050565b60008060408385031215612c7c578182fd5b612c8583612b02565b946020939093013593505050565b60006020808385031215612ca5578182fd5b823567ffffffffffffffff811115612cbb578283fd5b8301601f81018513612ccb578283fd5b8035612cde612cd982613166565b613135565b80828252848201915084840188868560061b8701011115612cfd578687fd5b8694505b83851015612d4757604080828b031215612d19578788fd5b612d2161310c565b612d2a83612b02565b815282880135888201528452600195909501949286019201612d01565b50979650505050505050565b60006020808385031215612d65578182fd5b823567ffffffffffffffff811115612d7b578283fd5b8301601f81018513612d8b578283fd5b8035612d99612cd982613166565b80828252848201915084840188868560051b8701011115612db8578687fd5b8694505b83851015612d47578035835260019490940193918501918501612dbc565b600060208284031215612deb578081fd5b813561181f81613302565b600060208284031215612e07578081fd5b815161181f81613302565b600060208284031215612e23578081fd5b813567ffffffffffffffff811115612e39578182fd5b8201601f81018413612e49578182fd5b61203384823560208401612aaa565b600060208284031215612e69578081fd5b61181f82612b1e565b60008060408385031215612e84578182fd5b612e8d83612b1e565b9150612b7360208401612b1e565b600060208284031215612eac578081fd5b5035919050565b60008151808452612ecb81602086016020860161320e565b601f01601f19169290920160200192915050565b60008351612ef181846020880161320e565b835190830190612f0581836020880161320e565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4190830184612eb3565b9695505050505050565b60208152600061181f6020830184612eb3565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015272103737b910309031b7b63630b137b930ba37b960691b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601a908201527f4e6f206b69647a206c65667420746f20626520636c61696d6564000000000000604082015260600190565b6040805190810167ffffffffffffffff8111828210171561312f5761312f6132ec565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561315e5761315e6132ec565b604052919050565b600067ffffffffffffffff821115613180576131806132ec565b5060051b60200190565b60006001600160801b03808316818516808303821115612f0557612f056132c0565b600082198211156131bf576131bf6132c0565b500190565b6000826131d3576131d36132d6565b500490565b60008160001904831182151516156131f2576131f26132c0565b500290565b600082821015613209576132096132c0565b500390565b60005b83811015613229578181015183820152602001613211565b83811115610e865750506000910152565b600181811c9082168061324e57607f821691505b6020821081141561195357634e487b7160e01b600052602260045260246000fd5b600061ffff80831681811415613287576132876132c0565b6001019392505050565b60006000198214156132a5576132a56132c0565b5060010190565b6000826132bb576132bb6132d6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461331857600080fd5b5056fea26469706673582212200bbad6c088bf2d62cd5734bdba011719526b13ab55e4f18d3cb3fba0996f10e864736f6c6343000804003368747470733a2f2f726963686b69647a746573742e73332e75732d776573742d312e616d617a6f6e6177732e636f6d2f
Deployed Bytecode
0x6080604052600436106102045760003560e01c80636352211e11610118578063c87b56dd116100a0578063e985e9c51161006f578063e985e9c51461058a578063e9be0f3f146105d3578063f2fde38b146105e9578063f4a0a52814610609578063fc14ba491461062957600080fd5b8063c87b56dd14610522578063c9783c0214610542578063d547cfb714610562578063e91a92261461057757600080fd5b80638d482354116100e75780638d4823541461049a5780638da5cb5b146104af57806395d89b41146104cd578063a22cb465146104e2578063b88d4fde1461050257600080fd5b80636352211e1461043057806370a0823114610450578063715018a61461047057806384fd33711461048557600080fd5b806323ab18f11161019b5780633ccfd60b1161016a5780633ccfd60b146103b357806342842e0e146103c85780634f6ccce7146103e8578063502006ff1461040857806360251cd11461042857600080fd5b806323ab18f11461033357806323b872dd1461035357806328e27bf51461037357806330176e131461039357600080fd5b80630955f63c116101d75780630955f63c146102ba578063095ea7b3146102da57806318160ddd146102fa5780632344e9181461031957600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc1461026057806308b6d26714610298575b600080fd5b34801561021557600080fd5b50610229610224366004612dda565b610649565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025361069b565b6040516102359190612f4b565b34801561026c57600080fd5b5061028061027b366004612e9b565b61072d565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004612e58565b6107ba565b005b3480156102c657600080fd5b506102b86102d5366004612c93565b6109d4565b3480156102e657600080fd5b506102b86102f5366004612c6a565b610b75565b34801561030657600080fd5b50600a545b604051908152602001610235565b34801561032557600080fd5b50600f546102299060ff1681565b34801561033f57600080fd5b506102b861034e366004612e9b565b610c86565b34801561035f57600080fd5b506102b861036e366004612b7c565b610d33565b34801561037f57600080fd5b506102b861038e366004612e72565b610d64565b34801561039f57600080fd5b506102b86103ae366004612e12565b610e8c565b3480156103bf57600080fd5b506102b8610f46565b3480156103d457600080fd5b506102b86103e3366004612b7c565b6110d2565b3480156103f457600080fd5b5061030b610403366004612e9b565b6110ed565b34801561041457600080fd5b506102b8610423366004612b30565b611118565b6102b8611328565b34801561043c57600080fd5b5061028061044b366004612e9b565b6114e3565b34801561045c57600080fd5b5061030b61046b366004612b30565b61155a565b34801561047c57600080fd5b506102b86115e1565b34801561049157600080fd5b5060125461030b565b3480156104a657600080fd5b5060085461030b565b3480156104bb57600080fd5b506000546001600160a01b0316610280565b3480156104d957600080fd5b50610253611655565b3480156104ee57600080fd5b506102b86104fd366004612c30565b611664565b34801561050e57600080fd5b506102b861051d366004612bb7565b611729565b34801561052e57600080fd5b5061025361053d366004612e9b565b61175b565b34801561054e57600080fd5b5061022961055d366004612e58565b611826565b34801561056e57600080fd5b50610253611959565b6102b8610585366004612e9b565b611968565b34801561059657600080fd5b506102296105a5366004612b4a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105df57600080fd5b5061030b60105481565b3480156105f557600080fd5b506102b8610604366004612b30565b611c57565b34801561061557600080fd5b506102b8610624366004612e9b565b611d41565b34801561063557600080fd5b506102b8610644366004612d53565b611dee565b60006001600160e01b031982166380ac58cd60e01b148061067a57506001600160e01b03198216635b5e139f60e01b145b8061069557506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546106aa9061323a565b80601f01602080910402602001604051908101604052809291908181526020018280546106d69061323a565b80156107235780601f106106f857610100808354040283529160200191610723565b820191906000526020600020905b81548152906001019060200180831161070657829003601f168201915b5050505050905090565b600061073882611f0b565b61079e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000805b60135481101561082e57336001600160a01b0316601382815481106107f357634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561081c576001915061082e565b8061082681613291565b9150506107be565b506000546001600160a01b03163314806108455750805b6108615760405162461bcd60e51b815260040161079590613031565b60005b60125461ffff8216116109cf578261ffff1660128261ffff168154811061089b57634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16146108c7576109bd565b601280546108d7906001906131f7565b815481106108f557634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1660128261ffff168154811061093e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550601280548061098c57634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a02191690559055505050565b806109c78161326f565b915050610864565b505050565b6000546001600160a01b031633146109fe5760405162461bcd60e51b815260040161079590612ffc565b60135415610a4e5760405162461bcd60e51b815260206004820152601e60248201527f436f6c6c61626f7261746f7273207765726520616c72656164792073657400006044820152606401610795565b6000805b8251811015610b13576013838281518110610a7d57634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b039092169190911781559101519101558251839082908110610ae857634e487b7160e01b600052603260045260246000fd5b60200260200101516020015182610aff919061318a565b915080610b0b81613291565b915050610a52565b50600d546001600160801b03828116911614610b715760405162461bcd60e51b815260206004820152601e60248201527f546f74616c2063757420646f6573206e6f742061646420746f203130302500006044820152606401610795565b5050565b6000610b80826114e3565b9050806001600160a01b0316836001600160a01b03161415610bee5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610795565b336001600160a01b0382161480610c0a5750610c0a81336105a5565b610c7c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610795565b6109cf8383611f28565b6000805b601354811015610cfa57336001600160a01b031660138281548110610cbf57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610ce85760019150610cfa565b80610cf281613291565b915050610c8a565b506000546001600160a01b0316331480610d115750805b610d2d5760405162461bcd60e51b815260040161079590613031565b50600755565b610d3d3382611f96565b610d595760405162461bcd60e51b815260040161079590613084565b6109cf83838361203b565b6000805b601354811015610dd857336001600160a01b031660138281548110610d9d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610dc65760019150610dd8565b80610dd081613291565b915050610d68565b506000546001600160a01b0316331480610def5750805b610e0b5760405162461bcd60e51b815260040161079590613031565b825b8261ffff168161ffff1611610e8657601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344460108204018054600f9092166002026101000a61ffff818102199093169284160291909117905580610e7e8161326f565b915050610e0d565b50505050565b6000805b601354811015610f0057336001600160a01b031660138281548110610ec557634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610eee5760019150610f00565b80610ef881613291565b915050610e90565b506000546001600160a01b0316331480610f175750805b610f335760405162461bcd60e51b815260040161079590613031565b81516109cf90600e906020850190612a1a565b6000805b601354811015610fba57336001600160a01b031660138281548110610f7f57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415610fa85760019150610fba565b80610fb281613291565b915050610f4a565b506000546001600160a01b0316331480610fd15750805b610fed5760405162461bcd60e51b815260040161079590613031565b4760005b6013548110156109cf576013818154811061101c57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160000160009054906101000a90046001600160a01b03166001600160a01b03166108fc611097846013858154811061107257634e487b7160e01b600052603260045260246000fd5b6000918252602090912060016002909202010154600d546001600160801b03166121db565b6040518115909202916000818181858888f193505050501580156110bf573d6000803e3d6000fd5b50806110ca81613291565b915050610ff1565b6109cf83838360405180602001604052806000815250611729565b60006110f882611f0b565b6111145760405162461bcd60e51b815260040161079590612fb0565b5090565b6000805b60135481101561118c57336001600160a01b03166013828154811061115157634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b0316141561117a576001915061118c565b8061118481613291565b91505061111c565b506000546001600160a01b03163314806111a35750805b6111bf5760405162461bcd60e51b815260040161079590613031565b60105460125410156111e35760405162461bcd60e51b8152600401610795906130d5565b600f5460ff16156112485760405162461bcd60e51b815260206004820152602960248201527f4b69647a207765726520616c726561647920726573657276656420666f72206760448201526869766561776179732160b81b6064820152608401610795565b601054600a600082825461125c91906131ac565b909155505060105460009067ffffffffffffffff81111561128d57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156112b6578160200160208202803683370190505b50905060005b60105481101561130b576112ce6122b2565b8282815181106112ee57634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061130381613291565b9150506112bc565b506113168382612409565b5050600f805460ff1916600117905550565b3233146113775760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610795565b6007541580159061138a57504260075411155b6113ca5760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610795565b60085434101561141c5760405162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d20616e206b69646044820152606401610795565b600b54336000908152601160205260409020541061147c5760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f7265206b69647a0000000000006044820152606401610795565b60125461149b5760405162461bcd60e51b8152600401610795906130d5565b3360009081526011602052604081208054916114b683613291565b9091555050600a80549060006114cb83613291565b91905055506114e1336114dc6122b2565b612618565b565b6000818152600360205260408120546001600160a01b0316806106955760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610795565b60006001600160a01b0382166115c55760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610795565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b0316331461160b5760405162461bcd60e51b815260040161079590612ffc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600280546106aa9061323a565b6001600160a01b0382163314156116bd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610795565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6117333383611f96565b61174f5760405162461bcd60e51b815260040161079590613084565b610e868484848461274b565b606061176682611f0b565b6117ca5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610795565b60006117d4611959565b905060008151116117f4576040518060200160405280600081525061181f565b806117fe8461277e565b60405160200161180f929190612edf565b6040516020818303038152906040525b9392505050565b600080805b60135481101561189b57336001600160a01b03166013828154811061186057634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611889576001915061189b565b8061189381613291565b91505061182b565b506000546001600160a01b03163314806118b25750805b6118ce5760405162461bcd60e51b815260040161079590613031565b60005b60125461ffff8216101561194d578361ffff1660128261ffff168154811061190957634e487b7160e01b600052603260045260246000fd5b60009182526020909120601082040154600f9091166002026101000a900461ffff16141561193b576001925050611953565b806119458161326f565b9150506118d1565b50600091505b50919050565b6060600e80546106aa9061323a565b3233146119b75760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610795565b600754158015906119ca57504260075411155b611a0a5760405162461bcd60e51b8152602060048201526011602482015270596f752061726520746f6f206561726c7960781b6044820152606401610795565b80600854611a1891906131d8565b341015611a725760405162461bcd60e51b815260206004820152602260248201527f4e6f7420656e6f75676820457468657220746f20636c61696d20746865206b69604482015261323d60f11b6064820152608401610795565b600c54811115611ad85760405162461bcd60e51b815260206004820152602b60248201527f596f752063616e206f6e6c7920636c61696d203130204b69647a20706572207460448201526a72616e73616374696f6e7360a81b6064820152608401610795565b600b5433600090815260116020526040902054611af69083906131ac565b1115611b445760405162461bcd60e51b815260206004820152601a60248201527f596f752063616e6e6f7420636c61696d206d6f7265206b69647a0000000000006044820152606401610795565b601254811115611b665760405162461bcd60e51b8152600401610795906130d5565b60008167ffffffffffffffff811115611b8f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611bb8578160200160208202803683370190505b5033600090815260116020526040812080549293508492909190611bdd9084906131ac565b9250508190555081600a6000828254611bf691906131ac565b90915550600090505b82811015611c4c57611c0f6122b2565b828281518110611c2f57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280611c4481613291565b915050611bff565b50610b713382612409565b6000546001600160a01b03163314611c815760405162461bcd60e51b815260040161079590612ffc565b6001600160a01b038116611ce65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b601354811015611db557336001600160a01b031660138281548110611d7a57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611da35760019150611db5565b80611dad81613291565b915050611d45565b506000546001600160a01b0316331480611dcc5750805b611de85760405162461bcd60e51b815260040161079590613031565b50600855565b6000805b601354811015611e6257336001600160a01b031660138281548110611e2757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546001600160a01b03161415611e505760019150611e62565b80611e5a81613291565b915050611df2565b506000546001600160a01b0316331480611e795750805b611e955760405162461bcd60e51b815260040161079590613031565b60125415611ee55760405162461bcd60e51b815260206004820152601e60248201527f417661696c61626c65206b69647a2061726520616c72656164792073657400006044820152606401610795565b611eef3383612409565b8151600a6000828254611f0291906131ac565b90915550505050565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f5d826114e3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fa182611f0b565b611fbd5760405162461bcd60e51b815260040161079590612fb0565b6000611fc8836114e3565b9050806001600160a01b0316846001600160a01b031614806120035750836001600160a01b0316611ff88461072d565b6001600160a01b0316145b8061203357506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661204e826114e3565b6001600160a01b0316146120b65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610795565b6001600160a01b0382166121185760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610795565b612123600082611f28565b6001600160a01b038316600090815260046020526040812080546001929061214c9084906131f7565b90915550506001600160a01b038216600090815260046020526040812080546001929061217a9084906131ac565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000806121f16001600160801b038416866131c4565b905060006122086001600160801b038516876132ac565b9050600061221f6001600160801b038616876131c4565b905060006122366001600160801b038716886132ac565b90506001600160801b03861661224c82856131d8565b61225691906131c4565b61226083856131d8565b61226a83876131d8565b6001600160801b03891661227e86896131d8565b61228891906131d8565b61229291906131ac565b61229c91906131ac565b6122a691906131ac565b98975050505050505050565b6000806122c3601280549050612898565b90506000601282815481106122e857634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff1661ffff1690506012600160128054905061232691906131f7565b8154811061234457634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002029054906101000a900461ffff166012838154811061238957634e487b7160e01b600052603260045260246000fd5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff16021790555060128054806123d757634e487b7160e01b600052603160045260246000fd5b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905592915050565b6001600160a01b03821661245f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610795565b80516001600160a01b038316600090815260046020526040812080549091906124899084906131ac565b90915550600090505b81518110156109cf576124cb8282815181106124be57634e487b7160e01b600052603260045260246000fd5b6020026020010151611f0b565b156125185760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610795565b61253e600084848481518110610e8657634e487b7160e01b600052603260045260246000fd5b826003600084848151811061256357634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508181815181106125bd57634e487b7160e01b600052603260045260246000fd5b6020026020010151836001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48061261081613291565b915050612492565b6001600160a01b03821661266e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610795565b61267781611f0b565b156126c45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610795565b6001600160a01b03821660009081526004602052604081208054600192906126ed9084906131ac565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61275684848461203b565b6127628484848461290d565b610e865760405162461bcd60e51b815260040161079590612f5e565b6060816127a25750506040805180820190915260018152600360fc1b602082015290565b8160005b81156127cc57806127b681613291565b91506127c59050600a836131c4565b91506127a6565b60008167ffffffffffffffff8111156127f557634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561281f576020820181803683370190505b5090505b8415612033576128346001836131f7565b9150612841600a866132ac565b61284c9060306131ac565b60f81b81838151811061286f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612891600a866131c4565b9450612823565b60125460009081906128ab6001436131f7565b6040805160208101939093529040908201526bffffffffffffffffffffffff1941606090811b82168184015244607484015233901b16609482015260a80160408051601f198184030181529190528051602090910120905061181f83826132ac565b60006001600160a01b0384163b15612a0f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612951903390899088908890600401612f0e565b602060405180830381600087803b15801561296b57600080fd5b505af192505050801561299b575060408051601f3d908101601f1916820190925261299891810190612df6565b60015b6129f5573d8080156129c9576040519150601f19603f3d011682016040523d82523d6000602084013e6129ce565b606091505b5080516129ed5760405162461bcd60e51b815260040161079590612f5e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612033565b506001949350505050565b828054612a269061323a565b90600052602060002090601f016020900481019282612a485760008555612a8e565b82601f10612a6157805160ff1916838001178555612a8e565b82800160010185558215612a8e579182015b82811115612a8e578251825591602001919060010190612a73565b506111149291505b808211156111145760008155600101612a96565b600067ffffffffffffffff831115612ac457612ac46132ec565b612ad7601f8401601f1916602001613135565b9050828152838383011115612aeb57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114612b1957600080fd5b919050565b803561ffff81168114612b1957600080fd5b600060208284031215612b41578081fd5b61181f82612b02565b60008060408385031215612b5c578081fd5b612b6583612b02565b9150612b7360208401612b02565b90509250929050565b600080600060608486031215612b90578081fd5b612b9984612b02565b9250612ba760208501612b02565b9150604084013590509250925092565b60008060008060808587031215612bcc578081fd5b612bd585612b02565b9350612be360208601612b02565b925060408501359150606085013567ffffffffffffffff811115612c05578182fd5b8501601f81018713612c15578182fd5b612c2487823560208401612aaa565b91505092959194509250565b60008060408385031215612c42578182fd5b612c4b83612b02565b915060208301358015158114612c5f578182fd5b809150509250929050565b60008060408385031215612c7c578182fd5b612c8583612b02565b946020939093013593505050565b60006020808385031215612ca5578182fd5b823567ffffffffffffffff811115612cbb578283fd5b8301601f81018513612ccb578283fd5b8035612cde612cd982613166565b613135565b80828252848201915084840188868560061b8701011115612cfd578687fd5b8694505b83851015612d4757604080828b031215612d19578788fd5b612d2161310c565b612d2a83612b02565b815282880135888201528452600195909501949286019201612d01565b50979650505050505050565b60006020808385031215612d65578182fd5b823567ffffffffffffffff811115612d7b578283fd5b8301601f81018513612d8b578283fd5b8035612d99612cd982613166565b80828252848201915084840188868560051b8701011115612db8578687fd5b8694505b83851015612d47578035835260019490940193918501918501612dbc565b600060208284031215612deb578081fd5b813561181f81613302565b600060208284031215612e07578081fd5b815161181f81613302565b600060208284031215612e23578081fd5b813567ffffffffffffffff811115612e39578182fd5b8201601f81018413612e49578182fd5b61203384823560208401612aaa565b600060208284031215612e69578081fd5b61181f82612b1e565b60008060408385031215612e84578182fd5b612e8d83612b1e565b9150612b7360208401612b1e565b600060208284031215612eac578081fd5b5035919050565b60008151808452612ecb81602086016020860161320e565b601f01601f19169290920160200192915050565b60008351612ef181846020880161320e565b835190830190612f0581836020880161320e565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4190830184612eb3565b9695505050505050565b60208152600061181f6020830184612eb3565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015272103737b910309031b7b63630b137b930ba37b960691b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601a908201527f4e6f206b69647a206c65667420746f20626520636c61696d6564000000000000604082015260600190565b6040805190810167ffffffffffffffff8111828210171561312f5761312f6132ec565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561315e5761315e6132ec565b604052919050565b600067ffffffffffffffff821115613180576131806132ec565b5060051b60200190565b60006001600160801b03808316818516808303821115612f0557612f056132c0565b600082198211156131bf576131bf6132c0565b500190565b6000826131d3576131d36132d6565b500490565b60008160001904831182151516156131f2576131f26132c0565b500290565b600082821015613209576132096132c0565b500390565b60005b83811015613229578181015183820152602001613211565b83811115610e865750506000910152565b600181811c9082168061324e57607f821691505b6020821081141561195357634e487b7160e01b600052602260045260246000fd5b600061ffff80831681811415613287576132876132c0565b6001019392505050565b60006000198214156132a5576132a56132c0565b5060010190565b6000826132bb576132bb6132d6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461331857600080fd5b5056fea26469706673582212200bbad6c088bf2d62cd5734bdba011719526b13ab55e4f18d3cb3fba0996f10e864736f6c63430008040033
Deployed Bytecode Sourcemap
81:9199:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1524:344:3;;;;;;;;;;-1:-1:-1;1524:344:3;;;;;:::i;:::-;;:::i;:::-;;;8963:14:12;;8956:22;8938:41;;8926:2;8911:18;1524:344:3;;;;;;;;2642:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4188:295::-;;;;;;;;;;-1:-1:-1;4188:295:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8261:32:12;;;8243:51;;8231:2;8216:18;4188:295:3;8198:102:12;3400:386:10;;;;;;;;;;-1:-1:-1;3400:386:10;;;;;:::i;:::-;;:::i;:::-;;1767:468;;;;;;;;;;-1:-1:-1;1767:468:10;;;;;:::i;:::-;;:::i;3703:424:3:-;;;;;;;;;;-1:-1:-1;3703:424:3;;;;;:::i;:::-;;:::i;7759:104:10:-;;;;;;;;;;-1:-1:-1;7839:17:10;;7759:104;;;20240:25:12;;;20228:2;20213:18;7759:104:10;20195:76:12;1404:38:10;;;;;;;;;;-1:-1:-1;1404:38:10;;;;;;;;4251:147;;;;;;;;;;-1:-1:-1;4251:147:10;;;;;:::i;:::-;;:::i;5202:364:3:-;;;;;;;;;;-1:-1:-1;5202:364:3;;;;;:::i;:::-;;:::i;3127:194:10:-;;;;;;;;;;-1:-1:-1;3127:194:10;;;;;:::i;:::-;;:::i;2787:102::-;;;;;;;;;;-1:-1:-1;2787:102:10;;;;;:::i;:::-;;:::i;2378:317::-;;;;;;;;;;;;;:::i;5632:179:3:-;;;;;;;;;;-1:-1:-1;5632:179:3;;;;;:::i;:::-;;:::i;6971:220:10:-;;;;;;;;;;-1:-1:-1;6971:220:10;;;;;:::i;:::-;;:::i;4859:555::-;;;;;;;;;;-1:-1:-1;4859:555:10;;;;;:::i;:::-;;:::i;5498:479::-;;;:::i;2267:313:3:-;;;;;;;;;;-1:-1:-1;2267:313:3;;;;;:::i;:::-;;:::i;1927:283::-;;;;;;;;;;-1:-1:-1;1927:283:3;;;;;:::i;:::-;;:::i;1693:145:9:-;;;;;;;;;;;;;:::i;7449:104:10:-;;;;;;;;;;-1:-1:-1;7526:13:10;:20;7449:104;;7611:89;;;;;;;;;;-1:-1:-1;7684:9:10;;7611:89;;1061:85:9;;;;;;;;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;1061:85;;2804:102:3;;;;;;;;;;;;;:::i;4550:318::-;;;;;;;;;;-1:-1:-1;4550:318:3;;;;;:::i;:::-;;:::i;5877:354::-;;;;;;;;;;-1:-1:-1;5877:354:3;;;;;:::i;:::-;;:::i;2972:451::-;;;;;;;;;;-1:-1:-1;2972:451:3;;;;;:::i;:::-;;:::i;4475:308:10:-;;;;;;;;;;-1:-1:-1;4475:308:10;;;;;:::i;:::-;;:::i;7266:93::-;;;;;;;;;;;;;:::i;6039:868::-;;;;;;:::i;:::-;;:::i;4934:206:3:-;;;;;;;;;;-1:-1:-1;4934:206:3;;;;;:::i;:::-;-1:-1:-1;;;;;5098:25:3;;;5071:4;5098:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4934:206;1448:34:10;;;;;;;;;;;;;;;;1987:240:9;;;;;;;;;;-1:-1:-1;1987:240:9;;;;;:::i;:::-;;:::i;2957:107:10:-;;;;;;;;;;-1:-1:-1;2957:107:10;;;;;:::i;:::-;;:::i;3896:272::-;;;;;;;;;;-1:-1:-1;3896:272:10;;;;;:::i;:::-;;:::i;1524:344:3:-;1666:4;-1:-1:-1;;;;;;1705:40:3;;-1:-1:-1;;;1705:40:3;;:104;;-1:-1:-1;;;;;;;1761:48:3;;-1:-1:-1;;;1761:48:3;1705:104;:156;;;-1:-1:-1;;;;;;;;;;871:40:2;;;1825:36:3;1686:175;1524:344;-1:-1:-1;;1524:344:3:o;2642:98::-;2696:13;2728:5;2721:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2642:98;:::o;4188:295::-;4304:7;4348:16;4356:7;4348;:16::i;:::-;4327:107;;;;-1:-1:-1;;;4327:107:3;;15162:2:12;4327:107:3;;;15144:21:12;15201:2;15181:18;;;15174:30;15240:34;15220:18;;;15213:62;-1:-1:-1;;;15291:18:12;;;15284:42;15343:19;;4327:107:3;;;;;;;;;-1:-1:-1;4452:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4452:24:3;;4188:295::o;3400:386:10:-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;3514:8:::1;3509:271;3529:13;:20:::0;3524:25:::1;::::0;::::1;;3509:271;;3594:7;3574:27;;:13;3588:1;3574:16;;;;;;;;-1:-1:-1::0;;;3574:16:10::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:27;3570:74;;3621:8;;3570:74;3677:13;3691:20:::0;;:24:::1;::::0;3714:1:::1;::::0;3691:24:::1;:::i;:::-;3677:39;;;;;;-1:-1:-1::0;;;3677:39:10::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3658:13;3672:1;3658:16;;;;;;;;-1:-1:-1::0;;;3658:16:10::1;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;3730:13;:19;;;;;-1:-1:-1::0;;;3730:19:10::1;;;;;;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;3730:19:10;;;;;::::1;;::::0;;::::1;;::::0;;;::::1;;;;;;::::0;;;;3509:271:::1;3400:386:::0;;:::o;3509:271::-:1;3551:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3509:271;;;;3400:386:::0;;:::o;1767:468::-;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;1273:23:9;1265:68;;;;-1:-1:-1;;;1265:68:9;;;;;;;:::i;:::-;1889:13:10::1;:20:::0;:25;1881:68:::1;;;::::0;-1:-1:-1;;;1881:68:10;;10599:2:12;1881:68:10::1;::::0;::::1;10581:21:12::0;10638:2;10618:18;;;10611:30;10677:32;10657:18;;;10650:60;10727:18;;1881:68:10::1;10571:180:12::0;1881:68:10::1;1960:16;1991:9:::0;1986:166:::1;2006:14;:21;2002:1;:25;1986:166;;;2048:13;2067:14;2082:1;2067:17;;;;;;-1:-1:-1::0;;;2067:17:10::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;2048:37;;::::1;::::0;;::::1;::::0;;-1:-1:-1;2048:37:10;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;2048:37:10::1;-1:-1:-1::0;;;;;2048:37:10;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;2119:17;;;;2134:1;;2119:17;::::1;;;-1:-1:-1::0;;;2119:17:10::1;;;;;;;;;;;;;;;:21;;;2099:42;;;;;:::i;:::-;::::0;-1:-1:-1;2029:3:10;::::1;::::0;::::1;:::i;:::-;;;;1986:166;;;-1:-1:-1::0;2182:11:10::1;::::0;-1:-1:-1;;;;;2170:23:10;;::::1;2182:11:::0;::::1;2170:23;2162:66;;;::::0;-1:-1:-1;;;2162:66:10;;12078:2:12;2162:66:10::1;::::0;::::1;12060:21:12::0;12117:2;12097:18;;;12090:30;12156:32;12136:18;;;12129:60;12206:18;;2162:66:10::1;12050:180:12::0;2162:66:10::1;1343:1:9;1767:468:10::0;:::o;3703:424:3:-;3783:13;3799:23;3814:7;3799:14;:23::i;:::-;3783:39;;3846:5;-1:-1:-1;;;;;3840:11:3;:2;-1:-1:-1;;;;;3840:11:3;;;3832:57;;;;-1:-1:-1;;;3832:57:3;;17182:2:12;3832:57:3;;;17164:21:12;17221:2;17201:18;;;17194:30;17260:34;17240:18;;;17233:62;-1:-1:-1;;;17311:18:12;;;17304:31;17352:19;;3832:57:3;17154:223:12;3832:57:3;665:10:1;-1:-1:-1;;;;;3921:21:3;;;;:85;;-1:-1:-1;3962:44:3;3986:5;665:10:1;4934:206:3;:::i;3962:44::-;3900:188;;;;-1:-1:-1;;;3900:188:3;;13209:2:12;3900:188:3;;;13191:21:12;13248:2;13228:18;;;13221:30;13287:34;13267:18;;;13260:62;13358:26;13338:18;;;13331:54;13402:19;;3900:188:3;13181:246:12;3900:188:3;4099:21;4108:2;4112:7;4099:8;:21::i;4251:147:10:-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;-1:-1:-1;4359:14:10::1;:32:::0;4251:147::o;5202:364:3:-;5404:41;665:10:1;5437:7:3;5404:18;:41::i;:::-;5383:137;;;;-1:-1:-1;;;5383:137:3;;;;;;;:::i;:::-;5531:28;5541:4;5547:2;5551:7;5531:9;:28::i;3127:194:10:-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;3249:4;3233:82:::1;3260:2;3255:7;;:1;:7;;;3233:82;;3283:13;:21:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;3283:21:10;;;;;::::1;::::0;::::1;;::::0;;;;;;::::1;;;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;;::::0;;;::::1;::::0;;;3264:3:::1;3283:21:::0;3264:3:::1;:::i;:::-;;;;3233:82;;;;3127:194:::0;;;:::o;2787:102::-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;2868:14;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;2378:317::-:0;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;2457:21:::1;2434:20;2489:200;2509:13;:20:::0;2505:24;::::1;2489:200;;;2558:13;2572:1;2558:16;;;;;;-1:-1:-1::0;;;2558:16:10::1;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;-1:-1:-1::0;;;;;2558:21:10::1;-1:-1:-1::0;;;;;2550:39:10::1;:128;2607:57;2616:12;2630:13;2644:1;2630:16;;;;;;-1:-1:-1::0;;;2630:16:10::1;;;;;;;;;;::::0;;;::::1;::::0;;;:20:::1;:16;::::0;;::::1;;:20;::::0;2652:11:::1;::::0;-1:-1:-1;;;;;2652:11:10::1;2607:8;:57::i;:::-;2550:128;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;2531:3:10;::::1;::::0;::::1;:::i;:::-;;;;2489:200;;5632:179:3::0;5765:39;5782:4;5788:2;5792:7;5765:39;;;;;;;;;;;;:16;:39::i;6971:220:10:-;7033:7;7073:16;7081:7;7073;:16::i;:::-;7052:107;;;;-1:-1:-1;;;7052:107:10;;;;;;;:::i;:::-;-1:-1:-1;7177:7:10;6971:220::o;4859:555::-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;4986:13:::1;::::0;4962::::1;:20:::0;:37:::1;;4954:76;;;;-1:-1:-1::0;;;4954:76:10::1;;;;;;;:::i;:::-;5049:18;::::0;::::1;;5048:19;5040:72;;;::::0;-1:-1:-1;;;5040:72:10;;19531:2:12;5040:72:10::1;::::0;::::1;19513:21:12::0;19570:2;19550:18;;;19543:30;19609:34;19589:18;;;19582:62;-1:-1:-1;;;19660:18:12;;;19653:39;19709:19;;5040:72:10::1;19503:231:12::0;5040:72:10::1;5143:13;;5122:17;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;5209:13:10::1;::::0;5167:25:::1;::::0;5195:28:::1;::::0;::::1;;;;-1:-1:-1::0;;;5195:28:10::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;5195:28:10::1;;5167:56;;5239:9;5234:98;5254:13;;5250:1;:17;5234:98;;;5302:19;:17;:19::i;:::-;5288:8;5297:1;5288:11;;;;;;-1:-1:-1::0;;;5288:11:10::1;;;;;;;;;;::::0;;::::1;::::0;;;;;:33;5269:3;::::1;::::0;::::1;:::i;:::-;;;;5234:98;;;;5342:30;5353:8;5363;5342:10;:30::i;:::-;-1:-1:-1::0;;5382:18:10::1;:25:::0;;-1:-1:-1;;5382:25:10::1;5403:4;5382:25;::::0;;-1:-1:-1;4859:555:10:o;5498:479::-;221:9;234:10;221:23;213:66;;;;-1:-1:-1;;;213:66:10;;12850:2:12;213:66:10;;;12832:21:12;12889:2;12869:18;;;12862:30;12928:32;12908:18;;;12901:60;12978:18;;213:66:10;12822:180:12;213:66:10;797:14:::1;::::0;:19;;::::1;::::0;:56:::1;;;838:15;820:14;;:33;;797:56;776:120;;;::::0;-1:-1:-1;;;776:120:10;;13634:2:12;776:120:10::1;::::0;::::1;13616:21:12::0;13673:2;13653:18;;;13646:30;-1:-1:-1;;;13692:18:12;;;13685:47;13749:18;;776:120:10::1;13606:167:12::0;776:120:10::1;5592:9:::2;;5579;:22;;5571:67;;;::::0;-1:-1:-1;;;5571:67:10;;10958:2:12;5571:67:10::2;::::0;::::2;10940:21:12::0;;;10977:18;;;10970:30;11036:34;11016:18;;;11009:62;11088:18;;5571:67:10::2;10930:182:12::0;5571:67:10::2;5705:16;::::0;5691:10:::2;5670:32;::::0;;;:20:::2;:32;::::0;;;;;:51:::2;5649:124;;;::::0;-1:-1:-1;;;5649:124:10;;18002:2:12;5649:124:10::2;::::0;::::2;17984:21:12::0;18041:2;18021:18;;;18014:30;18080:28;18060:18;;;18053:56;18126:18;;5649:124:10::2;17974:176:12::0;5649:124:10::2;5792:13;:20:::0;5784:63:::2;;;;-1:-1:-1::0;;;5784:63:10::2;;;;;;;:::i;:::-;5879:10;5858:32;::::0;;;:20:::2;:32;::::0;;;;:34;;;::::2;::::0;::::2;:::i;:::-;::::0;;;-1:-1:-1;;5902:17:10::2;:19:::0;;;:17:::2;:19;::::0;::::2;:::i;:::-;;;;;;5932:38;5938:10;5950:19;:17;:19::i;:::-;5932:5;:38::i;:::-;5498:479::o:0;2267:313:3:-;2379:7;2418:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2418:16:3;2465:19;2444:107;;;;-1:-1:-1;;;2444:107:3;;14391:2:12;2444:107:3;;;14373:21:12;14430:2;14410:18;;;14403:30;14469:34;14449:18;;;14442:62;-1:-1:-1;;;14520:18:12;;;14513:39;14569:19;;2444:107:3;14363:231:12;1927:283:3;2039:7;-1:-1:-1;;;;;2083:19:3;;2062:108;;;;-1:-1:-1;;;2062:108:3;;13980:2:12;2062:108:3;;;13962:21:12;14019:2;13999:18;;;13992:30;14058:34;14038:18;;;14031:62;-1:-1:-1;;;14109:18:12;;;14102:40;14159:19;;2062:108:3;13952:232:12;2062:108:3;-1:-1:-1;;;;;;2187:16:3;;;;;:9;:16;;;;;;;1927:283::o;1693:145:9:-;1107:7;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;1273:23:9;1265:68;;;;-1:-1:-1;;;1265:68:9;;;;;;;:::i;:::-;1799:1:::1;1783:6:::0;;1762:40:::1;::::0;-1:-1:-1;;;;;1783:6:9;;::::1;::::0;1762:40:::1;::::0;1799:1;;1762:40:::1;1829:1;1812:19:::0;;-1:-1:-1;;;;;;1812:19:9::1;::::0;;1693:145::o;2804:102:3:-;2860:13;2892:7;2885:14;;;;;:::i;4550:318::-;-1:-1:-1;;;;;4680:24:3;;665:10:1;4680:24:3;;4672:62;;;;-1:-1:-1;;;4672:62:3;;11724:2:12;4672:62:3;;;11706:21:12;11763:2;11743:18;;;11736:30;11802:27;11782:18;;;11775:55;11847:18;;4672:62:3;11696:175:12;4672:62:3;665:10:1;4745:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4745:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;4745:53:3;;;;;;;;;;4813:48;;8938:41:12;;;4745:42:3;;665:10:1;4813:48:3;;8911:18:12;4813:48:3;;;;;;;4550:318;;:::o;5877:354::-;6059:41;665:10:1;6092:7:3;6059:18;:41::i;:::-;6038:137;;;;-1:-1:-1;;;6038:137:3;;;;;;;:::i;:::-;6185:39;6199:4;6205:2;6209:7;6218:5;6185:13;:39::i;2972:451::-;3085:13;3135:16;3143:7;3135;:16::i;:::-;3114:110;;;;-1:-1:-1;;;3114:110:3;;16346:2:12;3114:110:3;;;16328:21:12;16385:2;16365:18;;;16358:30;16424:34;16404:18;;;16397:62;-1:-1:-1;;;16475:18:12;;;16468:45;16530:19;;3114:110:3;16318:237:12;3114:110:3;3235:21;3259:10;:8;:10::i;:::-;3235:34;;3322:1;3304:7;3298:21;:25;:118;;;;;;;;;;;;;;;;;3366:7;3375:18;:7;:16;:18::i;:::-;3349:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3298:118;3279:137;2972:451;-1:-1:-1;;;2972:451:3:o;4475:308:10:-;4587:4;;;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;4612:8:::1;4607:147;4626:13;:20:::0;4622:24:::1;::::0;::::1;;4607:147;;;4691:7;4671:27;;:13;4685:1;4671:16;;;;;;;;-1:-1:-1::0;;;4671:16:10::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:27;4667:77;;;4725:4;4718:11;;;;;4667:77;4648:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4607:147;;;;4771:5;4764:12;;728:1;4475:308:::0;;;;:::o;7266:93::-;7313:13;7345:7;7338:14;;;;;:::i;6039:868::-;221:9;234:10;221:23;213:66;;;;-1:-1:-1;;;213:66:10;;12850:2:12;213:66:10;;;12832:21:12;12889:2;12869:18;;;12862:30;12928:32;12908:18;;;12901:60;12978:18;;213:66:10;12822:180:12;213:66:10;797:14:::1;::::0;:19;;::::1;::::0;:56:::1;;;838:15;820:14;;:33;;797:56;776:120;;;::::0;-1:-1:-1;;;776:120:10;;13634:2:12;776:120:10::1;::::0;::::1;13616:21:12::0;13673:2;13653:18;;;13646:30;-1:-1:-1;;;13692:18:12;;;13685:47;13749:18;;776:120:10::1;13606:167:12::0;776:120:10::1;6209:6:::2;6197:9;;:18;;;;:::i;:::-;6184:9;:31;;6163:112;;;::::0;-1:-1:-1;;;6163:112:10;;19128:2:12;6163:112:10::2;::::0;::::2;19110:21:12::0;19167:2;19147:18;;;19140:30;19206:34;19186:18;;;19179:62;-1:-1:-1;;;19257:18:12;;;19250:32;19299:19;;6163:112:10::2;19100:224:12::0;6163:112:10::2;6312:21;;6302:6;:31;;6294:87;;;::::0;-1:-1:-1;;;6294:87:10;;18716:2:12;6294:87:10::2;::::0;::::2;18698:21:12::0;18755:2;18735:18;;;18728:30;18794:34;18774:18;;;18767:62;-1:-1:-1;;;18845:18:12;;;18838:41;18896:19;;6294:87:10::2;18688:233:12::0;6294:87:10::2;6458:16;::::0;6434:10:::2;6413:32;::::0;;;:20:::2;:32;::::0;;;;;:41:::2;::::0;6448:6;;6413:41:::2;:::i;:::-;:61;;6392:134;;;::::0;-1:-1:-1;;;6392:134:10;;18002:2:12;6392:134:10::2;::::0;::::2;17984:21:12::0;18041:2;18021:18;;;18014:30;18080:28;18060:18;;;18053:56;18126:18;;6392:134:10::2;17974:176:12::0;6392:134:10::2;6545:13;:20:::0;:30;-1:-1:-1;6545:30:10::2;6537:69;;;;-1:-1:-1::0;;;6537:69:10::2;;;;;;;:::i;:::-;6617:25;6659:6;6645:21;;;;;;-1:-1:-1::0;;;6645:21:10::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;6645:21:10::2;-1:-1:-1::0;6698:10:10::2;6677:32;::::0;;;:20:::2;:32;::::0;;;;:42;;6617:49;;-1:-1:-1;6713:6:10;;6677:32;;;:42:::2;::::0;6713:6;;6677:42:::2;:::i;:::-;;;;;;;;6750:6;6729:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;6772:9:10::2;::::0;-1:-1:-1;6767:91:10::2;6787:6;6783:1;:10;6767:91;;;6828:19;:17;:19::i;:::-;6814:8;6823:1;6814:11;;;;;;-1:-1:-1::0;;;6814:11:10::2;;;;;;;;;;::::0;;::::2;::::0;;;;;:33;6795:3;::::2;::::0;::::2;:::i;:::-;;;;6767:91;;;;6868:32;6879:10;6891:8;6868:10;:32::i;1987:240:9:-:0;1107:7;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;1273:23:9;1265:68;;;;-1:-1:-1;;;1265:68:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;2075:22:9;::::1;2067:73;;;::::0;-1:-1:-1;;;2067:73:9;;9835:2:12;2067:73:9::1;::::0;::::1;9817:21:12::0;9874:2;9854:18;;;9847:30;9913:34;9893:18;;;9886:62;-1:-1:-1;;;9964:18:12;;;9957:36;10010:19;;2067:73:9::1;9807:228:12::0;2067:73:9::1;2176:6;::::0;;2155:38:::1;::::0;-1:-1:-1;;;;;2155:38:9;;::::1;::::0;2176:6;::::1;::::0;2155:38:::1;::::0;::::1;2203:6;:17:::0;;-1:-1:-1;;;;;;2203:17:9::1;-1:-1:-1::0;;;;;2203:17:9;;;::::1;::::0;;;::::1;::::0;;1987:240::o;2957:107:10:-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;-1:-1:-1;3035:9:10::1;:22:::0;2957:107::o;3896:272::-;341:19;383:9;378:190;398:13;:20;394:24;;378:190;;;468:10;-1:-1:-1;;;;;443:35:10;:13;457:1;443:16;;;;;;-1:-1:-1;;;443:16:10;;;;;;;;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;443:21:10;:35;439:119;;;515:4;498:21;;538:5;;439:119;420:3;;;;:::i;:::-;;;;378:190;;;-1:-1:-1;1107:7:9;1133:6;-1:-1:-1;;;;;1133:6:9;665:10:1;599:23:10;;:41;;;626:14;599:41;578:139;;;;-1:-1:-1;;;578:139:10;;;;;;;:::i;:::-;4011:13:::1;:20:::0;:25;4003:68:::1;;;::::0;-1:-1:-1;;;4003:68:10;;18357:2:12;4003:68:10::1;::::0;::::1;18339:21:12::0;18396:2;18376:18;;;18369:30;18435:32;18415:18;;;18408:60;18485:18;;4003:68:10::1;18329:180:12::0;4003:68:10::1;4082:32;4093:10;4105:8;4082:10;:32::i;:::-;4146:8;:15;4125:17;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;3896:272:10:o;7737:125:3:-;7802:4;7825:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7825:16:3;:30;;;7737:125::o;12245:171::-;12319:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;12319:29:3;-1:-1:-1;;;;;12319:29:3;;;;;;;;:24;;12372:23;12319:24;12372:14;:23::i;:::-;-1:-1:-1;;;;;12363:46:3;;;;;;;;;;;12245:171;;:::o;8020:445::-;8145:4;8186:16;8194:7;8186;:16::i;:::-;8165:107;;;;-1:-1:-1;;;8165:107:3;;;;;;;:::i;:::-;8282:13;8298:23;8313:7;8298:14;:23::i;:::-;8282:39;;8350:5;-1:-1:-1;;;;;8339:16:3;:7;-1:-1:-1;;;;;8339:16:3;;:63;;;;8395:7;-1:-1:-1;;;;;8371:31:3;:20;8383:7;8371:11;:20::i;:::-;-1:-1:-1;;;;;8371:31:3;;8339:63;:118;;;-1:-1:-1;;;;;;5098:25:3;;;5071:4;5098:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;8418:39;8331:127;8020:445;-1:-1:-1;;;;8020:445:3:o;11540:594::-;11707:4;-1:-1:-1;;;;;11680:31:3;:23;11695:7;11680:14;:23::i;:::-;-1:-1:-1;;;;;11680:31:3;;11659:119;;;;-1:-1:-1;;;11659:119:3;;15936:2:12;11659:119:3;;;15918:21:12;15975:2;15955:18;;;15948:30;16014:34;15994:18;;;15987:62;-1:-1:-1;;;16065:18:12;;;16058:39;16114:19;;11659:119:3;15908:231:12;11659:119:3;-1:-1:-1;;;;;11796:16:3;;11788:65;;;;-1:-1:-1;;;11788:65:3;;11319:2:12;11788:65:3;;;11301:21:12;11358:2;11338:18;;;11331:30;11397:34;11377:18;;;11370:62;-1:-1:-1;;;11448:18:12;;;11441:34;11492:19;;11788:65:3;11291:226:12;11788:65:3;11965:29;11982:1;11986:7;11965:8;:29::i;:::-;-1:-1:-1;;;;;12005:15:3;;;;;;:9;:15;;;;;:20;;12024:1;;12005:15;:20;;12024:1;;12005:20;:::i;:::-;;;;-1:-1:-1;;;;;;;12035:13:3;;;;;;:9;:13;;;;;:18;;12052:1;;12035:13;:18;;12052:1;;12035:18;:::i;:::-;;;;-1:-1:-1;;12063:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;12063:21:3;-1:-1:-1;;;;;12063:21:3;;;;;;;;;12100:27;;12063:16;;12100:27;;;;;;;11540:594;;;:::o;8965:313:10:-;9073:7;;9104:9;-1:-1:-1;;;;;9104:9:10;;:1;:9;:::i;:::-;9092:21;-1:-1:-1;9123:9:10;9135;-1:-1:-1;;;;;9135:9:10;;:1;:9;:::i;:::-;9123:21;-1:-1:-1;9154:9:10;9166;-1:-1:-1;;;;;9166:9:10;;:1;:9;:::i;:::-;9154:21;-1:-1:-1;9185:9:10;9197;-1:-1:-1;;;;;9197:9:10;;:1;:9;:::i;:::-;9185:21;-1:-1:-1;;;;;;9256:15:10;;9257:5;9185:21;9257:1;:5;:::i;:::-;9256:15;;;;:::i;:::-;9248:5;9252:1;9248;:5;:::i;:::-;9240;9244:1;9240;:5;:::i;:::-;-1:-1:-1;;;;;9224:13:10;;:5;9228:1;9224;:5;:::i;:::-;:13;;;;:::i;:::-;:21;;;;:::i;:::-;:29;;;;:::i;:::-;:47;;;;:::i;:::-;9217:54;8965:313;-1:-1:-1;;;;;;;;8965:313:10:o;7981:::-;8027:7;8046:14;8063:38;8080:13;:20;;;;8063:16;:38::i;:::-;8046:55;;8111:15;8137:13;8151:6;8137:21;;;;;;-1:-1:-1;;;8137:21:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8129:30;;8111:48;;8194:13;8231:1;8208:13;:20;;;;:24;;;;:::i;:::-;8194:39;;;;;;-1:-1:-1;;;8194:39:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8170:13;8184:6;8170:21;;;;;;-1:-1:-1;;;8170:21:10;;;;;;;;;;;;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;8243:13;:19;;;;;-1:-1:-1;;;8243:19:10;;;;;;;;;;;;;;;;;-1:-1:-1;;8243:19:10;;;;;;;;;;;;;;;;;;;;;;;;8280:7;7981:313;-1:-1:-1;;7981:313:10:o;10135:516:3:-;-1:-1:-1;;;;;10249:16:3;;10241:61;;;;-1:-1:-1;;;10241:61:3;;14801:2:12;10241:61:3;;;14783:21:12;;;14820:18;;;14813:30;14879:34;14859:18;;;14852:62;14931:18;;10241:61:3;14773:182:12;10241:61:3;10329:15;;-1:-1:-1;;;;;10312:13:3;;;;;;:9;:13;;;;;:32;;:13;;;:32;;10329:15;;10312:32;:::i;:::-;;;;-1:-1:-1;10360:9:3;;-1:-1:-1;10355:290:3;10375:8;:15;10371:1;:19;10355:290;;;10420:20;10428:8;10437:1;10428:11;;;;;;-1:-1:-1;;;10428:11:3;;;;;;;;;;;;;;;10420:7;:20::i;:::-;10419:21;10411:62;;;;-1:-1:-1;;;10411:62:3;;10242:2:12;10411:62:3;;;10224:21:12;10281:2;10261:18;;;10254:30;10320;10300:18;;;10293:58;10368:18;;10411:62:3;10214:178:12;10411:62:3;10488:49;10517:1;10521:2;10525:8;10534:1;10525:11;;;;;;-1:-1:-1;;;10525:11:3;;;;;;;;10488:49;10575:2;10552:7;:20;10560:8;10569:1;10560:11;;;;;;-1:-1:-1;;;10560:11:3;;;;;;;;;;;;;;;10552:20;;;;;;;;;;;;:25;;;;;-1:-1:-1;;;;;10552:25:3;;;;;-1:-1:-1;;;;;10552:25:3;;;;;;10622:8;10631:1;10622:11;;;;;;-1:-1:-1;;;10622:11:3;;;;;;;;;;;;;;;10618:2;-1:-1:-1;;;;;10597:37:3;10614:1;-1:-1:-1;;;;;10597:37:3;;;;;;;;;;;10392:3;;;;:::i;:::-;;;;10355:290;;9757:372;-1:-1:-1;;;;;9836:16:3;;9828:61;;;;-1:-1:-1;;;9828:61:3;;14801:2:12;9828:61:3;;;14783:21:12;;;14820:18;;;14813:30;14879:34;14859:18;;;14852:62;14931:18;;9828:61:3;14773:182:12;9828:61:3;9908:16;9916:7;9908;:16::i;:::-;9907:17;9899:58;;;;-1:-1:-1;;;9899:58:3;;10242:2:12;9899:58:3;;;10224:21:12;10281:2;10261:18;;;10254:30;10320;10300:18;;;10293:58;10368:18;;9899:58:3;10214:178:12;9899:58:3;-1:-1:-1;;;;;10024:13:3;;;;;;:9;:13;;;;;:18;;10041:1;;10024:13;:18;;10041:1;;10024:18;:::i;:::-;;;;-1:-1:-1;;10052:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10052:21:3;-1:-1:-1;;;;;10052:21:3;;;;;;;;10089:33;;10052:16;;;10089:33;;10052:16;;10089:33;9757:372;;:::o;7093:341::-;7244:28;7254:4;7260:2;7264:7;7244:9;:28::i;:::-;7303:48;7326:4;7332:2;7336:7;7345:5;7303:22;:48::i;:::-;7282:145;;;;-1:-1:-1;;;7282:145:3;;;;;;;:::i;271:703:11:-;327:13;544:10;540:51;;-1:-1:-1;;570:10:11;;;;;;;;;;;;-1:-1:-1;;;570:10:11;;;;;271:703::o;540:51::-;615:5;600:12;654:75;661:9;;654:75;;686:8;;;;:::i;:::-;;-1:-1:-1;708:10:11;;-1:-1:-1;716:2:11;708:10;;:::i;:::-;;;654:75;;;738:19;770:6;760:17;;;;;;-1:-1:-1;;;760:17:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;760:17:11;;738:39;;787:150;794:10;;787:150;;820:11;830:1;820:11;;:::i;:::-;;-1:-1:-1;888:10:11;896:2;888:5;:10;:::i;:::-;875:24;;:2;:24;:::i;:::-;862:39;;845:6;852;845:14;;;;;;-1:-1:-1;;;845:14:11;;;;;;;;;;;;:56;-1:-1:-1;;;;;845:56:11;;;;;;;;-1:-1:-1;915:11:11;924:2;915:11;;:::i;:::-;;;787:150;;8362:443:10;8548:13;:20;8426:7;;;;8600:16;8615:1;8600:12;:16;:::i;:::-;8510:231;;;;;;7803:19:12;;;;8590:27:10;;7838:12:12;;;7831:28;-1:-1:-1;;8639:14:10;7947:2:12;7943:15;;;7939:24;;7925:12;;;7918:46;8675:16:10;7980:12:12;;;7973:28;8713:10:10;8036:15:12;;8032:24;8017:13;;;8010:47;8073:13;;8510:231:10;;;-1:-1:-1;;8510:231:10;;;;;;;;;8483:272;;8510:231;8483:272;;;;;-1:-1:-1;8783:15:10;8792:6;8483:272;8783:15;:::i;12969:1022:3:-;13119:4;-1:-1:-1;;;;;13139:13:3;;1078:20:0;1116:8;13135:850:3;;13190:170;;-1:-1:-1;;;13190:170:3;;-1:-1:-1;;;;;13190:36:3;;;;;:170;;665:10:1;;13282:4:3;;13308:7;;13337:5;;13190:170;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13190:170:3;;;;;;;;-1:-1:-1;;13190:170:3;;;;;;;;;;;;:::i;:::-;;;13170:763;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13543:13:3;;13539:380;;13585:106;;-1:-1:-1;;;13585:106:3;;;;;;;:::i;13539:380::-;13871:6;13865:13;13856:6;13852:2;13848:15;13841:38;13170:763;-1:-1:-1;;;;;;13422:55:3;-1:-1:-1;;;13422:55:3;;-1:-1:-1;13415:62:3;;13135:850;-1:-1:-1;13970:4:3;12969:1022;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:12;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:12;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:12;;532:42;;522:2;;588:1;585;578:12;522:2;474:124;;;:::o;603:159::-;670:20;;730:6;719:18;;709:29;;699:2;;752:1;749;742:12;767:196;826:6;879:2;867:9;858:7;854:23;850:32;847:2;;;900:6;892;885:22;847:2;928:29;947:9;928:29;:::i;968:270::-;1036:6;1044;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1146:29;1165:9;1146:29;:::i;:::-;1136:39;;1194:38;1228:2;1217:9;1213:18;1194:38;:::i;:::-;1184:48;;1055:183;;;;;:::o;1243:338::-;1320:6;1328;1336;1389:2;1377:9;1368:7;1364:23;1360:32;1357:2;;;1410:6;1402;1395:22;1357:2;1438:29;1457:9;1438:29;:::i;:::-;1428:39;;1486:38;1520:2;1509:9;1505:18;1486:38;:::i;:::-;1476:48;;1571:2;1560:9;1556:18;1543:32;1533:42;;1347:234;;;;;:::o;1586:696::-;1681:6;1689;1697;1705;1758:3;1746:9;1737:7;1733:23;1729:33;1726:2;;;1780:6;1772;1765:22;1726:2;1808:29;1827:9;1808:29;:::i;:::-;1798:39;;1856:38;1890:2;1879:9;1875:18;1856:38;:::i;:::-;1846:48;;1941:2;1930:9;1926:18;1913:32;1903:42;;1996:2;1985:9;1981:18;1968:32;2023:18;2015:6;2012:30;2009:2;;;2060:6;2052;2045:22;2009:2;2088:22;;2141:4;2133:13;;2129:27;-1:-1:-1;2119:2:12;;2175:6;2167;2160:22;2119:2;2203:73;2268:7;2263:2;2250:16;2245:2;2241;2237:11;2203:73;:::i;:::-;2193:83;;;1716:566;;;;;;;:::o;2287:367::-;2352:6;2360;2413:2;2401:9;2392:7;2388:23;2384:32;2381:2;;;2434:6;2426;2419:22;2381:2;2462:29;2481:9;2462:29;:::i;:::-;2452:39;;2541:2;2530:9;2526:18;2513:32;2588:5;2581:13;2574:21;2567:5;2564:32;2554:2;;2615:6;2607;2600:22;2554:2;2643:5;2633:15;;;2371:283;;;;;:::o;2659:264::-;2727:6;2735;2788:2;2776:9;2767:7;2763:23;2759:32;2756:2;;;2809:6;2801;2794:22;2756:2;2837:29;2856:9;2837:29;:::i;:::-;2827:39;2913:2;2898:18;;;;2885:32;;-1:-1:-1;;;2746:177:12:o;2928:1237::-;3043:6;3074:2;3117;3105:9;3096:7;3092:23;3088:32;3085:2;;;3138:6;3130;3123:22;3085:2;3183:9;3170:23;3216:18;3208:6;3205:30;3202:2;;;3253:6;3245;3238:22;3202:2;3281:22;;3334:4;3326:13;;3322:27;-1:-1:-1;3312:2:12;;3368:6;3360;3353:22;3312:2;3409;3396:16;3432:73;3448:56;3501:2;3448:56;:::i;:::-;3432:73;:::i;:::-;3527:3;3551:2;3546:3;3539:15;3579:2;3574:3;3570:12;3563:19;;3610:2;3606;3602:11;3658:7;3653:2;3647;3644:1;3640:10;3636:2;3632:19;3628:28;3625:41;3622:2;;;3684:6;3676;3669:22;3622:2;3711:6;3702:15;;3726:409;3740:2;3737:1;3734:9;3726:409;;;3795:4;3838:2;3832:3;3823:7;3819:17;3815:26;3812:2;;;3859:6;3851;3844:22;3812:2;3894:22;;:::i;:::-;3943:23;3962:3;3943:23;:::i;:::-;3929:38;;4016:12;;;4003:26;3987:14;;;3980:50;4043:18;;3758:1;3751:9;;;;;4081:12;;;;4113;3726:409;;;-1:-1:-1;4154:5:12;3054:1111;-1:-1:-1;;;;;;;3054:1111:12:o;4170:960::-;4254:6;4285:2;4328;4316:9;4307:7;4303:23;4299:32;4296:2;;;4349:6;4341;4334:22;4296:2;4394:9;4381:23;4427:18;4419:6;4416:30;4413:2;;;4464:6;4456;4449:22;4413:2;4492:22;;4545:4;4537:13;;4533:27;-1:-1:-1;4523:2:12;;4579:6;4571;4564:22;4523:2;4620;4607:16;4643:73;4659:56;4712:2;4659:56;:::i;4643:73::-;4738:3;4762:2;4757:3;4750:15;4790:2;4785:3;4781:12;4774:19;;4821:2;4817;4813:11;4869:7;4864:2;4858;4855:1;4851:10;4847:2;4843:19;4839:28;4836:41;4833:2;;;4895:6;4887;4880:22;4833:2;4922:6;4913:15;;4937:163;4951:2;4948:1;4945:9;4937:163;;;5008:17;;4996:30;;4969:1;4962:9;;;;;5046:12;;;;5078;;4937:163;;5135:255;5193:6;5246:2;5234:9;5225:7;5221:23;5217:32;5214:2;;;5267:6;5259;5252:22;5214:2;5311:9;5298:23;5330:30;5354:5;5330:30;:::i;5395:259::-;5464:6;5517:2;5505:9;5496:7;5492:23;5488:32;5485:2;;;5538:6;5530;5523:22;5485:2;5575:9;5569:16;5594:30;5618:5;5594:30;:::i;5659:480::-;5728:6;5781:2;5769:9;5760:7;5756:23;5752:32;5749:2;;;5802:6;5794;5787:22;5749:2;5847:9;5834:23;5880:18;5872:6;5869:30;5866:2;;;5917:6;5909;5902:22;5866:2;5945:22;;5998:4;5990:13;;5986:27;-1:-1:-1;5976:2:12;;6032:6;6024;6017:22;5976:2;6060:73;6125:7;6120:2;6107:16;6102:2;6098;6094:11;6060:73;:::i;6144:194::-;6202:6;6255:2;6243:9;6234:7;6230:23;6226:32;6223:2;;;6276:6;6268;6261:22;6223:2;6304:28;6322:9;6304:28;:::i;6343:266::-;6409:6;6417;6470:2;6458:9;6449:7;6445:23;6441:32;6438:2;;;6491:6;6483;6476:22;6438:2;6519:28;6537:9;6519:28;:::i;:::-;6509:38;;6566:37;6599:2;6588:9;6584:18;6566:37;:::i;6614:190::-;6673:6;6726:2;6714:9;6705:7;6701:23;6697:32;6694:2;;;6747:6;6739;6732:22;6694:2;-1:-1:-1;6775:23:12;;6684:120;-1:-1:-1;6684:120:12:o;6809:257::-;6850:3;6888:5;6882:12;6915:6;6910:3;6903:19;6931:63;6987:6;6980:4;6975:3;6971:14;6964:4;6957:5;6953:16;6931:63;:::i;:::-;7048:2;7027:15;-1:-1:-1;;7023:29:12;7014:39;;;;7055:4;7010:50;;6858:208;-1:-1:-1;;6858:208:12:o;7071:470::-;7250:3;7288:6;7282:13;7304:53;7350:6;7345:3;7338:4;7330:6;7326:17;7304:53;:::i;:::-;7420:13;;7379:16;;;;7442:57;7420:13;7379:16;7476:4;7464:17;;7442:57;:::i;:::-;7515:20;;7258:283;-1:-1:-1;;;;7258:283:12:o;8305:488::-;-1:-1:-1;;;;;8574:15:12;;;8556:34;;8626:15;;8621:2;8606:18;;8599:43;8673:2;8658:18;;8651:34;;;8721:3;8716:2;8701:18;;8694:31;;;8499:4;;8742:45;;8767:19;;8759:6;8742:45;:::i;:::-;8734:53;8508:285;-1:-1:-1;;;;;;8508:285:12:o;8990:219::-;9139:2;9128:9;9121:21;9102:4;9159:44;9199:2;9188:9;9184:18;9176:6;9159:44;:::i;9214:414::-;9416:2;9398:21;;;9455:2;9435:18;;;9428:30;9494:34;9489:2;9474:18;;9467:62;-1:-1:-1;;;9560:2:12;9545:18;;9538:48;9618:3;9603:19;;9388:240::o;12235:408::-;12437:2;12419:21;;;12476:2;12456:18;;;12449:30;12515:34;12510:2;12495:18;;12488:62;-1:-1:-1;;;12581:2:12;12566:18;;12559:42;12633:3;12618:19;;12409:234::o;15373:356::-;15575:2;15557:21;;;15594:18;;;15587:30;15653:34;15648:2;15633:18;;15626:62;15720:2;15705:18;;15547:182::o;16560:415::-;16762:2;16744:21;;;16801:2;16781:18;;;16774:30;16840:34;16835:2;16820:18;;16813:62;-1:-1:-1;;;16906:2:12;16891:18;;16884:49;16965:3;16950:19;;16734:241::o;17382:413::-;17584:2;17566:21;;;17623:2;17603:18;;;17596:30;17662:34;17657:2;17642:18;;17635:62;-1:-1:-1;;;17728:2:12;17713:18;;17706:47;17785:3;17770:19;;17556:239::o;19739:350::-;19941:2;19923:21;;;19980:2;19960:18;;;19953:30;20019:28;20014:2;19999:18;;19992:56;20080:2;20065:18;;19913:176::o;20276:257::-;20348:4;20342:11;;;20380:17;;20427:18;20412:34;;20448:22;;;20409:62;20406:2;;;20474:18;;:::i;:::-;20510:4;20503:24;20322:211;:::o;20538:275::-;20609:2;20603:9;20674:2;20655:13;;-1:-1:-1;;20651:27:12;20639:40;;20709:18;20694:34;;20730:22;;;20691:62;20688:2;;;20756:18;;:::i;:::-;20792:2;20785:22;20583:230;;-1:-1:-1;20583:230:12:o;20818:196::-;20891:4;20924:18;20916:6;20913:30;20910:2;;;20946:18;;:::i;:::-;-1:-1:-1;20991:1:12;20987:14;21003:4;20983:25;;20900:114::o;21019:253::-;21059:3;-1:-1:-1;;;;;21148:2:12;21145:1;21141:10;21178:2;21175:1;21171:10;21209:3;21205:2;21201:12;21196:3;21193:21;21190:2;;;21217:18;;:::i;21277:128::-;21317:3;21348:1;21344:6;21341:1;21338:13;21335:2;;;21354:18;;:::i;:::-;-1:-1:-1;21390:9:12;;21325:80::o;21410:120::-;21450:1;21476;21466:2;;21481:18;;:::i;:::-;-1:-1:-1;21515:9:12;;21456:74::o;21535:168::-;21575:7;21641:1;21637;21633:6;21629:14;21626:1;21623:21;21618:1;21611:9;21604:17;21600:45;21597:2;;;21648:18;;:::i;:::-;-1:-1:-1;21688:9:12;;21587:116::o;21708:125::-;21748:4;21776:1;21773;21770:8;21767:2;;;21781:18;;:::i;:::-;-1:-1:-1;21818:9:12;;21757:76::o;21838:258::-;21910:1;21920:113;21934:6;21931:1;21928:13;21920:113;;;22010:11;;;22004:18;21991:11;;;21984:39;21956:2;21949:10;21920:113;;;22051:6;22048:1;22045:13;22042:2;;;-1:-1:-1;;22086:1:12;22068:16;;22061:27;21891:205::o;22101:380::-;22180:1;22176:12;;;;22223;;;22244:2;;22298:4;22290:6;22286:17;22276:27;;22244:2;22351;22343:6;22340:14;22320:18;22317:38;22314:2;;;22397:10;22392:3;22388:20;22385:1;22378:31;22432:4;22429:1;22422:15;22460:4;22457:1;22450:15;22486:197;22524:3;22552:6;22593:2;22586:5;22582:14;22620:2;22611:7;22608:15;22605:2;;;22626:18;;:::i;:::-;22675:1;22662:15;;22532:151;-1:-1:-1;;;22532:151:12:o;22688:135::-;22727:3;-1:-1:-1;;22748:17:12;;22745:2;;;22768:18;;:::i;:::-;-1:-1:-1;22815:1:12;22804:13;;22735:88::o;22828:112::-;22860:1;22886;22876:2;;22891:18;;:::i;:::-;-1:-1:-1;22925:9:12;;22866:74::o;22945:127::-;23006:10;23001:3;22997:20;22994:1;22987:31;23037:4;23034:1;23027:15;23061:4;23058:1;23051:15;23077:127;23138:10;23133:3;23129:20;23126:1;23119:31;23169:4;23166:1;23159:15;23193:4;23190:1;23183:15;23209:127;23270:10;23265:3;23261:20;23258:1;23251:31;23301:4;23298:1;23291:15;23325:4;23322:1;23315:15;23341:131;-1:-1:-1;;;;;;23415:32:12;;23405:43;;23395:2;;23462:1;23459;23452:12;23395:2;23385:87;:::o
Swarm Source
ipfs://0bbad6c088bf2d62cd5734bdba011719526b13ab55e4f18d3cb3fba0996f10e8
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.