ERC-20
Overview
Max Total Supply
100,000,000 WCA
Holders
5
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WorldCupApesToken
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-01 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } // File: contracts/WCAToken.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.13; contract WorldCupApesToken is ERC20Burnable, Ownable { uint256 public constant maxWalletStaked = 30; uint256 public constant emissionRate = 462962962962960; // 11574074074074 * 40 uint256 public endTimestamp = 1659312000; uint256 public startUnstakeTimestamp = 1654041600; address public WCAAddress; bool private _stakingLive = false; mapping(uint256 => uint256) internal tokenIdTimeStaked; mapping(uint256 => address) internal tokenIdToStaker; mapping(address => uint256[]) internal stakerToTokenIds; IERC721Enumerable private WCAIERC721; constructor(address _WCAAddress) ERC20("World Cup Apes", "WCA") { _mint(msg.sender, 100000000*10**18); WCAAddress = _WCAAddress; WCAIERC721 = IERC721Enumerable(WCAAddress); } modifier stakingEnabled { require(_stakingLive && block.timestamp < endTimestamp, "Staking not live"); _; } function setEndTimestamp(uint256 timestamp) external onlyOwner { endTimestamp = timestamp; } function setStartUnstakeTimestamp(uint256 timestamp) external onlyOwner { startUnstakeTimestamp = timestamp; } function getStaked(address staker) public view returns (uint256[] memory) { return stakerToTokenIds[staker]; } function getStakedCount(address staker) public view returns (uint256) { return stakerToTokenIds[staker].length; } function removeTokenIdFromArray(uint256[] storage array, uint256 tokenId) internal { uint256 length = array.length; for (uint256 i = 0; i < length; i++) { if (array[i] == tokenId) { length--; if (i < length) { array[i] = array[length]; } array.pop(); break; } } } function stakeByIds(uint256[] memory tokenIds) public stakingEnabled { require(getStakedCount(msg.sender) + tokenIds.length <= maxWalletStaked, "You have reached the maximum number of NFTs in stake"); for (uint256 i = 0; i < tokenIds.length; i++) { uint256 id = tokenIds[i]; require(WCAIERC721.ownerOf(id) == msg.sender && tokenIdToStaker[id] == address(0), "NFT is not yours"); WCAIERC721.transferFrom(msg.sender, address(this), id); stakerToTokenIds[msg.sender].push(id); tokenIdTimeStaked[id] = block.timestamp; tokenIdToStaker[id] = msg.sender; } } function unstakeAll() public { require(getStakedCount(msg.sender) > 0, "No NFTs in stake"); require(block.timestamp >= startUnstakeTimestamp, "You can't already unstake NFTs"); uint256 totalRewards = 0; for (uint256 i = stakerToTokenIds[msg.sender].length; i > 0; i--) { uint256 tokenId = stakerToTokenIds[msg.sender][i - 1]; WCAIERC721.transferFrom(address(this), msg.sender, tokenId); uint256 timestamp = block.timestamp; if(timestamp > endTimestamp){ timestamp = endTimestamp; } totalRewards += ((timestamp - tokenIdTimeStaked[tokenId]) * emissionRate); stakerToTokenIds[msg.sender].pop(); tokenIdToStaker[tokenId] = address(0); } _transfer(owner(), msg.sender, totalRewards); } function unstakeByIds(uint256[] memory tokenIds) public { require(block.timestamp >= startUnstakeTimestamp, "You can't already unstake NFTs"); uint256 totalRewards = 0; for (uint256 i = 0; i < tokenIds.length; i++) { uint256 id = tokenIds[i]; require(tokenIdToStaker[id] == msg.sender, "Not in stake"); WCAIERC721.transferFrom(address(this), msg.sender, id); uint256 timestamp = block.timestamp; if(timestamp > endTimestamp){ timestamp = endTimestamp; } totalRewards += ((timestamp - tokenIdTimeStaked[id]) * emissionRate); removeTokenIdFromArray(stakerToTokenIds[msg.sender], id); tokenIdToStaker[id] = address(0); } _transfer(owner(), msg.sender, totalRewards); } function claimByTokenId(uint256 tokenId) public { require(tokenIdToStaker[tokenId] == msg.sender, "Not staked by you"); require(block.timestamp >= startUnstakeTimestamp, "You can't already claim your rewards"); uint256 timestamp = block.timestamp; if(timestamp > endTimestamp){ timestamp = endTimestamp; } uint256 totalRewards = ((timestamp - tokenIdTimeStaked[tokenId]) * emissionRate); tokenIdTimeStaked[tokenId] = timestamp; _transfer(owner(), msg.sender, totalRewards); } function claimAll() public { require(block.timestamp >= startUnstakeTimestamp, "You can't already claim your rewards"); uint256 totalRewards = 0; uint256[] memory tokenIds = stakerToTokenIds[msg.sender]; for (uint256 i = 0; i < tokenIds.length; i++) { uint256 id = tokenIds[i]; require(tokenIdToStaker[id] == msg.sender, "Not staked by you"); uint256 timestamp = block.timestamp; if(timestamp > endTimestamp){ timestamp = endTimestamp; } totalRewards += ((timestamp - tokenIdTimeStaked[id]) * emissionRate); tokenIdTimeStaked[id] = timestamp; } _transfer(owner(), msg.sender, totalRewards); } function getAllRewards(address staker) public view returns (uint256) { uint256 totalRewards = 0; uint256[] memory tokenIds = stakerToTokenIds[staker]; for (uint256 i = 0; i < tokenIds.length; i++) { uint256 timestamp = block.timestamp; if(timestamp > endTimestamp){ timestamp = endTimestamp; } totalRewards += ((timestamp - tokenIdTimeStaked[tokenIds[i]]) * emissionRate); } return totalRewards; } function getRewardsByTokenId(uint256 tokenId) public view returns (uint256) { require(tokenIdToStaker[tokenId] != address(0), "NFT is not in stake"); uint256 timestamp = block.timestamp; if(timestamp > endTimestamp){ timestamp = endTimestamp; } uint256 secondsStaked = timestamp - tokenIdTimeStaked[tokenId]; return secondsStaked * emissionRate; } function getStaker(uint256 tokenId) public view returns (address) { return tokenIdToStaker[tokenId]; } function toggleStakingLive() external onlyOwner { _stakingLive = !_stakingLive; } function stakingLive() public view returns (bool){ return _stakingLive && block.timestamp < endTimestamp; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_WCAAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WCAAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimByTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emissionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getAllRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRewardsByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStaked","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getStaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setEndTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setStartUnstakeTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeByIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startUnstakeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleStakingLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeByIds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526362e71780600655636296ac006007556000600860146101000a81548160ff0219169083151502179055503480156200003c57600080fd5b506040516200418938038062004189833981810160405281019062000062919062000554565b6040518060400160405280600e81526020017f576f726c642043757020417065730000000000000000000000000000000000008152506040518060400160405280600381526020017f57434100000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e69291906200043a565b508060049080519060200190620000ff9291906200043a565b5050506200012262000116620001ea60201b60201c565b620001f260201b60201c565b6200013f336a52b7d2dcc80cd2e4000000620002b860201b60201c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000731565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200032a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032190620005e7565b60405180910390fd5b6200033e600083836200043060201b60201c565b806002600082825462000352919062000642565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003a9919062000642565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004109190620006b0565b60405180910390a36200042c600083836200043560201b60201c565b5050565b505050565b505050565b8280546200044890620006fc565b90600052602060002090601f0160209004810192826200046c5760008555620004b8565b82601f106200048757805160ff1916838001178555620004b8565b82800160010185558215620004b8579182015b82811115620004b75782518255916020019190600101906200049a565b5b509050620004c79190620004cb565b5090565b5b80821115620004e6576000816000905550600101620004cc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200051c82620004ef565b9050919050565b6200052e816200050f565b81146200053a57600080fd5b50565b6000815190506200054e8162000523565b92915050565b6000602082840312156200056d576200056c620004ea565b5b60006200057d848285016200053d565b91505092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620005cf601f8362000586565b9150620005dc8262000597565b602082019050919050565b600060208201905081810360008301526200060281620005c0565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200064f8262000609565b91506200065c8362000609565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000694576200069362000613565b5b828201905092915050565b620006aa8162000609565b82525050565b6000602082019050620006c760008301846200069f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200071557607f821691505b6020821081036200072b576200072a620006cd565b5b50919050565b613a4880620007416000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063a457c2d7116100ad578063d92656a71161007c578063d92656a7146105f2578063d9ffad4714610610578063dd62ed3e1461062c578063e3c998fe1461065c578063f2fde38b1461068c57610211565b8063a457c2d71461056a578063a85adeab1461059a578063a9059cbb146105b8578063d1058e59146105e857610211565b806383c13db2116100f457806383c13db2146104d65780638da5cb5b1461050657806395d89b411461052457806396afc450146105425780639903303f1461056057610211565b8063715018a61461047657806376ea2fea1461048057806379cc67901461049e5780637df6a6c8146104ba57610211565b806336ed62eb116101a857806348aa19361161017757806348aa1936146103c0578063515ec105146103dc5780635c1e645a1461040c5780635e1f1e2a1461042a57806370a082311461044657610211565b806336ed62eb146103285780633950935114610344578063399080ec1461037457806342966c68146103a457610211565b806323b872dd116101e457806323b872dd146102a0578063313ce567146102d057806335322f37146102ee578063362a3fad146102f857610211565b806306fdde03146102165780630943791f14610234578063095ea7b31461025257806318160ddd14610282575b600080fd5b61021e6106a8565b60405161022b919061281c565b60405180910390f35b61023c61073a565b604051610249919061287f565b60405180910390f35b61026c60048036038101906102679190612910565b610760565b604051610279919061296b565b60405180910390f35b61028a610783565b6040516102979190612995565b60405180910390f35b6102ba60048036038101906102b591906129b0565b61078d565b6040516102c7919061296b565b60405180910390f35b6102d86107bc565b6040516102e59190612a1f565b60405180910390f35b6102f66107c5565b005b610312600480360381019061030d9190612a3a565b610ada565b60405161031f9190612995565b60405180910390f35b610342600480360381019061033d9190612a67565b610c0b565b005b61035e60048036038101906103599190612910565b610c91565b60405161036b919061296b565b60405180910390f35b61038e60048036038101906103899190612a3a565b610d3b565b60405161039b9190612b52565b60405180910390f35b6103be60048036038101906103b99190612a67565b610dd2565b005b6103da60048036038101906103d59190612cbc565b610de6565b005b6103f660048036038101906103f19190612a67565b6110a3565b6040516104039190612995565b60405180910390f35b61041461119a565b6040516104219190612995565b60405180910390f35b610444600480360381019061043f9190612a67565b6111a0565b005b610460600480360381019061045b9190612a3a565b6112ff565b60405161046d9190612995565b60405180910390f35b61047e611347565b005b6104886113cf565b6040516104959190612995565b60405180910390f35b6104b860048036038101906104b39190612910565b6113d4565b005b6104d460048036038101906104cf9190612a67565b6113f4565b005b6104f060048036038101906104eb9190612a3a565b61147a565b6040516104fd9190612995565b60405180910390f35b61050e6114c6565b60405161051b919061287f565b60405180910390f35b61052c6114f0565b604051610539919061281c565b60405180910390f35b61054a611582565b6040516105579190612995565b60405180910390f35b61056861158d565b005b610584600480360381019061057f9190612910565b611635565b604051610591919061296b565b60405180910390f35b6105a261171f565b6040516105af9190612995565b60405180910390f35b6105d260048036038101906105cd9190612910565b611725565b6040516105df919061296b565b60405180910390f35b6105f0611748565b005b6105fa611983565b604051610607919061296b565b60405180910390f35b61062a60048036038101906106259190612cbc565b6119a7565b005b61064660048036038101906106419190612d05565b611d73565b6040516106539190612995565b60405180910390f35b61067660048036038101906106719190612a67565b611dfa565b604051610683919061287f565b60405180910390f35b6106a660048036038101906106a19190612a3a565b611e37565b005b6060600380546106b790612d74565b80601f01602080910402602001604051908101604052809291908181526020018280546106e390612d74565b80156107305780601f1061070557610100808354040283529160200191610730565b820191906000526020600020905b81548152906001019060200180831161071357829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061076b611f2e565b9050610778818585611f36565b600191505092915050565b6000600254905090565b600080610798611f2e565b90506107a58582856120ff565b6107b085858561218b565b60019150509392505050565b60006012905090565b60006107d03361147a565b11610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080790612df1565b60405180910390fd5b600754421015610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612e5d565b60405180910390fd5b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b6000811115610ac4576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836108f59190612eac565b8154811061090657610905612ee0565b5b90600052602060002001549050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161097293929190612f0f565b600060405180830381600087803b15801561098c57600080fd5b505af11580156109a0573d6000803e3d6000fd5b5050505060004290506006548111156109b95760065490505b6601a50ff6f39a106009600084815260200190815260200160002054826109e09190612eac565b6109ea9190612f46565b846109f59190612fa0565b9350600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610a4657610a45612ff6565b5b600190038181906000526020600020016000905590556000600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610abc90613025565b91505061089e565b50610ad7610ad06114c6565b338361218b565b50565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610b6c57602002820191906000526020600020905b815481526020019060010190808311610b58575b5050505050905060005b8151811015610c00576000429050600654811115610b945760065490505b6601a50ff6f39a1060096000858581518110610bb357610bb2612ee0565b5b602002602001015181526020019081526020016000205482610bd59190612eac565b610bdf9190612f46565b84610bea9190612fa0565b9350508080610bf89061304e565b915050610b76565b508192505050919050565b610c13611f2e565b73ffffffffffffffffffffffffffffffffffffffff16610c316114c6565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e906130e2565b60405180910390fd5b8060078190555050565b600080610c9c611f2e565b9050610d30818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d2b9190612fa0565b611f36565b600191505092915050565b6060600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610dc657602002820191906000526020600020905b815481526020019060010190808311610db2575b50505050509050919050565b610de3610ddd611f2e565b8261240a565b50565b600754421015610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290612e5d565b60405180910390fd5b6000805b825181101561108c576000838281518110610e4d57610e4c612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef9061314e565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610f5793929190612f0f565b600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506000429050600654811115610f9e5760065490505b6601a50ff6f39a10600960008481526020019081526020016000205482610fc59190612eac565b610fcf9190612f46565b84610fda9190612fa0565b9350611024600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836125e0565b6000600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505080806110849061304e565b915050610e2f565b5061109f6110986114c6565b338361218b565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d906131ba565b60405180910390fd5b600042905060065481111561115b5760065490505b600060096000858152602001908152602001600020548261117c9190612eac565b90506601a50ff6f39a10816111919190612f46565b92505050919050565b60075481565b3373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613226565b60405180910390fd5b600754421015611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906132b8565b60405180910390fd5b600042905060065481111561129b5760065490505b60006601a50ff6f39a106009600085815260200190815260200160002054836112c49190612eac565b6112ce9190612f46565b90508160096000858152602001908152602001600020819055506112fa6112f36114c6565b338361218b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61134f611f2e565b73ffffffffffffffffffffffffffffffffffffffff1661136d6114c6565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906130e2565b60405180910390fd5b6113cd60006126b3565b565b601e81565b6113e6826113e0611f2e565b836120ff565b6113f0828261240a565b5050565b6113fc611f2e565b73ffffffffffffffffffffffffffffffffffffffff1661141a6114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611467906130e2565b60405180910390fd5b8060068190555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114ff90612d74565b80601f016020809104026020016040519081016040528092919081815260200182805461152b90612d74565b80156115785780601f1061154d57610100808354040283529160200191611578565b820191906000526020600020905b81548152906001019060200180831161155b57829003601f168201915b5050505050905090565b6601a50ff6f39a1081565b611595611f2e565b73ffffffffffffffffffffffffffffffffffffffff166115b36114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611600906130e2565b60405180910390fd5b600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b600080611640611f2e565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd9061334a565b60405180910390fd5b6117138286868403611f36565b60019250505092915050565b60065481565b600080611730611f2e565b905061173d81858561218b565b600191505092915050565b60075442101561178d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611784906132b8565b60405180910390fd5b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561181957602002820191906000526020600020905b815481526020019060010190808311611805575b5050505050905060005b815181101561196c57600082828151811061184157611840612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390613226565b60405180910390fd5b60004290506006548111156119015760065490505b6601a50ff6f39a106009600084815260200190815260200160002054826119289190612eac565b6119329190612f46565b8561193d9190612fa0565b9450806009600084815260200190815260200160002081905550505080806119649061304e565b915050611823565b5061197f6119786114c6565b338461218b565b5050565b6000600860149054906101000a900460ff1680156119a2575060065442105b905090565b600860149054906101000a900460ff1680156119c4575060065442105b611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906133b6565b60405180910390fd5b601e8151611a103361147a565b611a1a9190612fa0565b1115611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290613448565b60405180910390fd5b60005b8151811015611d6f576000828281518110611a7c57611a7b612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611af89190612995565b602060405180830381865afa158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b39919061347d565b73ffffffffffffffffffffffffffffffffffffffff16148015611bbb5750600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906134f6565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611c5993929190612f0f565b600060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b50505050600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505542600960008381526020019081526020016000208190555033600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080611d679061304e565b915050611a5e565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611e3f611f2e565b73ffffffffffffffffffffffffffffffffffffffff16611e5d6114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613588565b60405180910390fd5b611f2b816126b3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c9061361a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906136ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f29190612995565b60405180910390a3505050565b600061210b8484611d73565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121855781811015612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90613718565b60405180910390fd5b6121848484848403611f36565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f1906137aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061383c565b60405180910390fd5b612274838383612779565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906138ce565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461238d9190612fa0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123f19190612995565b60405180910390a361240484848461277e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090613960565b60405180910390fd5b61248582600083612779565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561250b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612502906139f2565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546125629190612eac565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125c79190612995565b60405180910390a36125db8360008461277e565b505050565b60008280549050905060005b818110156126ad578284828154811061260857612607612ee0565b5b90600052602060002001540361269a57818061262390613025565b9250508181101561266e5783828154811061264157612640612ee0565b5b906000526020600020015484828154811061265f5761265e612ee0565b5b90600052602060002001819055505b8380548061267f5761267e612ff6565b5b600190038181906000526020600020016000905590556126ad565b80806126a59061304e565b9150506125ec565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127bd5780820151818401526020810190506127a2565b838111156127cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006127ee82612783565b6127f8818561278e565b935061280881856020860161279f565b612811816127d2565b840191505092915050565b6000602082019050818103600083015261283681846127e3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128698261283e565b9050919050565b6128798161285e565b82525050565b60006020820190506128946000830184612870565b92915050565b6000604051905090565b600080fd5b600080fd5b6128b78161285e565b81146128c257600080fd5b50565b6000813590506128d4816128ae565b92915050565b6000819050919050565b6128ed816128da565b81146128f857600080fd5b50565b60008135905061290a816128e4565b92915050565b60008060408385031215612927576129266128a4565b5b6000612935858286016128c5565b9250506020612946858286016128fb565b9150509250929050565b60008115159050919050565b61296581612950565b82525050565b6000602082019050612980600083018461295c565b92915050565b61298f816128da565b82525050565b60006020820190506129aa6000830184612986565b92915050565b6000806000606084860312156129c9576129c86128a4565b5b60006129d7868287016128c5565b93505060206129e8868287016128c5565b92505060406129f9868287016128fb565b9150509250925092565b600060ff82169050919050565b612a1981612a03565b82525050565b6000602082019050612a346000830184612a10565b92915050565b600060208284031215612a5057612a4f6128a4565b5b6000612a5e848285016128c5565b91505092915050565b600060208284031215612a7d57612a7c6128a4565b5b6000612a8b848285016128fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612ac9816128da565b82525050565b6000612adb8383612ac0565b60208301905092915050565b6000602082019050919050565b6000612aff82612a94565b612b098185612a9f565b9350612b1483612ab0565b8060005b83811015612b45578151612b2c8882612acf565b9750612b3783612ae7565b925050600181019050612b18565b5085935050505092915050565b60006020820190508181036000830152612b6c8184612af4565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bb1826127d2565b810181811067ffffffffffffffff82111715612bd057612bcf612b79565b5b80604052505050565b6000612be361289a565b9050612bef8282612ba8565b919050565b600067ffffffffffffffff821115612c0f57612c0e612b79565b5b602082029050602081019050919050565b600080fd5b6000612c38612c3384612bf4565b612bd9565b90508083825260208201905060208402830185811115612c5b57612c5a612c20565b5b835b81811015612c845780612c7088826128fb565b845260208401935050602081019050612c5d565b5050509392505050565b600082601f830112612ca357612ca2612b74565b5b8135612cb3848260208601612c25565b91505092915050565b600060208284031215612cd257612cd16128a4565b5b600082013567ffffffffffffffff811115612cf057612cef6128a9565b5b612cfc84828501612c8e565b91505092915050565b60008060408385031215612d1c57612d1b6128a4565b5b6000612d2a858286016128c5565b9250506020612d3b858286016128c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d8c57607f821691505b602082108103612d9f57612d9e612d45565b5b50919050565b7f4e6f204e46547320696e207374616b6500000000000000000000000000000000600082015250565b6000612ddb60108361278e565b9150612de682612da5565b602082019050919050565b60006020820190508181036000830152612e0a81612dce565b9050919050565b7f596f752063616e277420616c726561647920756e7374616b65204e4654730000600082015250565b6000612e47601e8361278e565b9150612e5282612e11565b602082019050919050565b60006020820190508181036000830152612e7681612e3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612eb7826128da565b9150612ec2836128da565b925082821015612ed557612ed4612e7d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000606082019050612f246000830186612870565b612f316020830185612870565b612f3e6040830184612986565b949350505050565b6000612f51826128da565b9150612f5c836128da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f9557612f94612e7d565b5b828202905092915050565b6000612fab826128da565b9150612fb6836128da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612feb57612fea612e7d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000613030826128da565b91506000820361304357613042612e7d565b5b600182039050919050565b6000613059826128da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361308b5761308a612e7d565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130cc60208361278e565b91506130d782613096565b602082019050919050565b600060208201905081810360008301526130fb816130bf565b9050919050565b7f4e6f7420696e207374616b650000000000000000000000000000000000000000600082015250565b6000613138600c8361278e565b915061314382613102565b602082019050919050565b600060208201905081810360008301526131678161312b565b9050919050565b7f4e4654206973206e6f7420696e207374616b6500000000000000000000000000600082015250565b60006131a460138361278e565b91506131af8261316e565b602082019050919050565b600060208201905081810360008301526131d381613197565b9050919050565b7f4e6f74207374616b656420627920796f75000000000000000000000000000000600082015250565b600061321060118361278e565b915061321b826131da565b602082019050919050565b6000602082019050818103600083015261323f81613203565b9050919050565b7f596f752063616e277420616c726561647920636c61696d20796f75722072657760008201527f6172647300000000000000000000000000000000000000000000000000000000602082015250565b60006132a260248361278e565b91506132ad82613246565b604082019050919050565b600060208201905081810360008301526132d181613295565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061333460258361278e565b915061333f826132d8565b604082019050919050565b6000602082019050818103600083015261336381613327565b9050919050565b7f5374616b696e67206e6f74206c69766500000000000000000000000000000000600082015250565b60006133a060108361278e565b91506133ab8261336a565b602082019050919050565b600060208201905081810360008301526133cf81613393565b9050919050565b7f596f752068617665207265616368656420746865206d6178696d756d206e756d60008201527f626572206f66204e46547320696e207374616b65000000000000000000000000602082015250565b600061343260348361278e565b915061343d826133d6565b604082019050919050565b6000602082019050818103600083015261346181613425565b9050919050565b600081519050613477816128ae565b92915050565b600060208284031215613493576134926128a4565b5b60006134a184828501613468565b91505092915050565b7f4e4654206973206e6f7420796f75727300000000000000000000000000000000600082015250565b60006134e060108361278e565b91506134eb826134aa565b602082019050919050565b6000602082019050818103600083015261350f816134d3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061357260268361278e565b915061357d82613516565b604082019050919050565b600060208201905081810360008301526135a181613565565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061360460248361278e565b915061360f826135a8565b604082019050919050565b60006020820190508181036000830152613633816135f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061369660228361278e565b91506136a18261363a565b604082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613702601d8361278e565b915061370d826136cc565b602082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061379460258361278e565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061382660238361278e565b9150613831826137ca565b604082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138b860268361278e565b91506138c38261385c565b604082019050919050565b600060208201905081810360008301526138e7816138ab565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061394a60218361278e565b9150613955826138ee565b604082019050919050565b600060208201905081810360008301526139798161393d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006139dc60228361278e565b91506139e782613980565b604082019050919050565b60006020820190508181036000830152613a0b816139cf565b905091905056fea2646970667358221220fb1987abf722c8bc4a90803f0965d5dc3c5bbc0bd96af48b90f0c5819d6f3bd664736f6c634300080d0033000000000000000000000000709ce875e2bec643b1932e4c9fd22ce113e20e2d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063a457c2d7116100ad578063d92656a71161007c578063d92656a7146105f2578063d9ffad4714610610578063dd62ed3e1461062c578063e3c998fe1461065c578063f2fde38b1461068c57610211565b8063a457c2d71461056a578063a85adeab1461059a578063a9059cbb146105b8578063d1058e59146105e857610211565b806383c13db2116100f457806383c13db2146104d65780638da5cb5b1461050657806395d89b411461052457806396afc450146105425780639903303f1461056057610211565b8063715018a61461047657806376ea2fea1461048057806379cc67901461049e5780637df6a6c8146104ba57610211565b806336ed62eb116101a857806348aa19361161017757806348aa1936146103c0578063515ec105146103dc5780635c1e645a1461040c5780635e1f1e2a1461042a57806370a082311461044657610211565b806336ed62eb146103285780633950935114610344578063399080ec1461037457806342966c68146103a457610211565b806323b872dd116101e457806323b872dd146102a0578063313ce567146102d057806335322f37146102ee578063362a3fad146102f857610211565b806306fdde03146102165780630943791f14610234578063095ea7b31461025257806318160ddd14610282575b600080fd5b61021e6106a8565b60405161022b919061281c565b60405180910390f35b61023c61073a565b604051610249919061287f565b60405180910390f35b61026c60048036038101906102679190612910565b610760565b604051610279919061296b565b60405180910390f35b61028a610783565b6040516102979190612995565b60405180910390f35b6102ba60048036038101906102b591906129b0565b61078d565b6040516102c7919061296b565b60405180910390f35b6102d86107bc565b6040516102e59190612a1f565b60405180910390f35b6102f66107c5565b005b610312600480360381019061030d9190612a3a565b610ada565b60405161031f9190612995565b60405180910390f35b610342600480360381019061033d9190612a67565b610c0b565b005b61035e60048036038101906103599190612910565b610c91565b60405161036b919061296b565b60405180910390f35b61038e60048036038101906103899190612a3a565b610d3b565b60405161039b9190612b52565b60405180910390f35b6103be60048036038101906103b99190612a67565b610dd2565b005b6103da60048036038101906103d59190612cbc565b610de6565b005b6103f660048036038101906103f19190612a67565b6110a3565b6040516104039190612995565b60405180910390f35b61041461119a565b6040516104219190612995565b60405180910390f35b610444600480360381019061043f9190612a67565b6111a0565b005b610460600480360381019061045b9190612a3a565b6112ff565b60405161046d9190612995565b60405180910390f35b61047e611347565b005b6104886113cf565b6040516104959190612995565b60405180910390f35b6104b860048036038101906104b39190612910565b6113d4565b005b6104d460048036038101906104cf9190612a67565b6113f4565b005b6104f060048036038101906104eb9190612a3a565b61147a565b6040516104fd9190612995565b60405180910390f35b61050e6114c6565b60405161051b919061287f565b60405180910390f35b61052c6114f0565b604051610539919061281c565b60405180910390f35b61054a611582565b6040516105579190612995565b60405180910390f35b61056861158d565b005b610584600480360381019061057f9190612910565b611635565b604051610591919061296b565b60405180910390f35b6105a261171f565b6040516105af9190612995565b60405180910390f35b6105d260048036038101906105cd9190612910565b611725565b6040516105df919061296b565b60405180910390f35b6105f0611748565b005b6105fa611983565b604051610607919061296b565b60405180910390f35b61062a60048036038101906106259190612cbc565b6119a7565b005b61064660048036038101906106419190612d05565b611d73565b6040516106539190612995565b60405180910390f35b61067660048036038101906106719190612a67565b611dfa565b604051610683919061287f565b60405180910390f35b6106a660048036038101906106a19190612a3a565b611e37565b005b6060600380546106b790612d74565b80601f01602080910402602001604051908101604052809291908181526020018280546106e390612d74565b80156107305780601f1061070557610100808354040283529160200191610730565b820191906000526020600020905b81548152906001019060200180831161071357829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061076b611f2e565b9050610778818585611f36565b600191505092915050565b6000600254905090565b600080610798611f2e565b90506107a58582856120ff565b6107b085858561218b565b60019150509392505050565b60006012905090565b60006107d03361147a565b11610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080790612df1565b60405180910390fd5b600754421015610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612e5d565b60405180910390fd5b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b6000811115610ac4576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836108f59190612eac565b8154811061090657610905612ee0565b5b90600052602060002001549050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161097293929190612f0f565b600060405180830381600087803b15801561098c57600080fd5b505af11580156109a0573d6000803e3d6000fd5b5050505060004290506006548111156109b95760065490505b6601a50ff6f39a106009600084815260200190815260200160002054826109e09190612eac565b6109ea9190612f46565b846109f59190612fa0565b9350600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610a4657610a45612ff6565b5b600190038181906000526020600020016000905590556000600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610abc90613025565b91505061089e565b50610ad7610ad06114c6565b338361218b565b50565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610b6c57602002820191906000526020600020905b815481526020019060010190808311610b58575b5050505050905060005b8151811015610c00576000429050600654811115610b945760065490505b6601a50ff6f39a1060096000858581518110610bb357610bb2612ee0565b5b602002602001015181526020019081526020016000205482610bd59190612eac565b610bdf9190612f46565b84610bea9190612fa0565b9350508080610bf89061304e565b915050610b76565b508192505050919050565b610c13611f2e565b73ffffffffffffffffffffffffffffffffffffffff16610c316114c6565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e906130e2565b60405180910390fd5b8060078190555050565b600080610c9c611f2e565b9050610d30818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d2b9190612fa0565b611f36565b600191505092915050565b6060600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610dc657602002820191906000526020600020905b815481526020019060010190808311610db2575b50505050509050919050565b610de3610ddd611f2e565b8261240a565b50565b600754421015610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290612e5d565b60405180910390fd5b6000805b825181101561108c576000838281518110610e4d57610e4c612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef9061314e565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610f5793929190612f0f565b600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506000429050600654811115610f9e5760065490505b6601a50ff6f39a10600960008481526020019081526020016000205482610fc59190612eac565b610fcf9190612f46565b84610fda9190612fa0565b9350611024600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836125e0565b6000600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505080806110849061304e565b915050610e2f565b5061109f6110986114c6565b338361218b565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d906131ba565b60405180910390fd5b600042905060065481111561115b5760065490505b600060096000858152602001908152602001600020548261117c9190612eac565b90506601a50ff6f39a10816111919190612f46565b92505050919050565b60075481565b3373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613226565b60405180910390fd5b600754421015611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906132b8565b60405180910390fd5b600042905060065481111561129b5760065490505b60006601a50ff6f39a106009600085815260200190815260200160002054836112c49190612eac565b6112ce9190612f46565b90508160096000858152602001908152602001600020819055506112fa6112f36114c6565b338361218b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61134f611f2e565b73ffffffffffffffffffffffffffffffffffffffff1661136d6114c6565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906130e2565b60405180910390fd5b6113cd60006126b3565b565b601e81565b6113e6826113e0611f2e565b836120ff565b6113f0828261240a565b5050565b6113fc611f2e565b73ffffffffffffffffffffffffffffffffffffffff1661141a6114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611467906130e2565b60405180910390fd5b8060068190555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114ff90612d74565b80601f016020809104026020016040519081016040528092919081815260200182805461152b90612d74565b80156115785780601f1061154d57610100808354040283529160200191611578565b820191906000526020600020905b81548152906001019060200180831161155b57829003601f168201915b5050505050905090565b6601a50ff6f39a1081565b611595611f2e565b73ffffffffffffffffffffffffffffffffffffffff166115b36114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611600906130e2565b60405180910390fd5b600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b600080611640611f2e565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd9061334a565b60405180910390fd5b6117138286868403611f36565b60019250505092915050565b60065481565b600080611730611f2e565b905061173d81858561218b565b600191505092915050565b60075442101561178d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611784906132b8565b60405180910390fd5b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561181957602002820191906000526020600020905b815481526020019060010190808311611805575b5050505050905060005b815181101561196c57600082828151811061184157611840612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390613226565b60405180910390fd5b60004290506006548111156119015760065490505b6601a50ff6f39a106009600084815260200190815260200160002054826119289190612eac565b6119329190612f46565b8561193d9190612fa0565b9450806009600084815260200190815260200160002081905550505080806119649061304e565b915050611823565b5061197f6119786114c6565b338461218b565b5050565b6000600860149054906101000a900460ff1680156119a2575060065442105b905090565b600860149054906101000a900460ff1680156119c4575060065442105b611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906133b6565b60405180910390fd5b601e8151611a103361147a565b611a1a9190612fa0565b1115611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290613448565b60405180910390fd5b60005b8151811015611d6f576000828281518110611a7c57611a7b612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611af89190612995565b602060405180830381865afa158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b39919061347d565b73ffffffffffffffffffffffffffffffffffffffff16148015611bbb5750600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906134f6565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611c5993929190612f0f565b600060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b50505050600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505542600960008381526020019081526020016000208190555033600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080611d679061304e565b915050611a5e565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611e3f611f2e565b73ffffffffffffffffffffffffffffffffffffffff16611e5d6114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613588565b60405180910390fd5b611f2b816126b3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c9061361a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906136ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f29190612995565b60405180910390a3505050565b600061210b8484611d73565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121855781811015612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90613718565b60405180910390fd5b6121848484848403611f36565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f1906137aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061383c565b60405180910390fd5b612274838383612779565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906138ce565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461238d9190612fa0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123f19190612995565b60405180910390a361240484848461277e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090613960565b60405180910390fd5b61248582600083612779565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561250b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612502906139f2565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546125629190612eac565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125c79190612995565b60405180910390a36125db8360008461277e565b505050565b60008280549050905060005b818110156126ad578284828154811061260857612607612ee0565b5b90600052602060002001540361269a57818061262390613025565b9250508181101561266e5783828154811061264157612640612ee0565b5b906000526020600020015484828154811061265f5761265e612ee0565b5b90600052602060002001819055505b8380548061267f5761267e612ff6565b5b600190038181906000526020600020016000905590556126ad565b80806126a59061304e565b9150506125ec565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127bd5780820151818401526020810190506127a2565b838111156127cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006127ee82612783565b6127f8818561278e565b935061280881856020860161279f565b612811816127d2565b840191505092915050565b6000602082019050818103600083015261283681846127e3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128698261283e565b9050919050565b6128798161285e565b82525050565b60006020820190506128946000830184612870565b92915050565b6000604051905090565b600080fd5b600080fd5b6128b78161285e565b81146128c257600080fd5b50565b6000813590506128d4816128ae565b92915050565b6000819050919050565b6128ed816128da565b81146128f857600080fd5b50565b60008135905061290a816128e4565b92915050565b60008060408385031215612927576129266128a4565b5b6000612935858286016128c5565b9250506020612946858286016128fb565b9150509250929050565b60008115159050919050565b61296581612950565b82525050565b6000602082019050612980600083018461295c565b92915050565b61298f816128da565b82525050565b60006020820190506129aa6000830184612986565b92915050565b6000806000606084860312156129c9576129c86128a4565b5b60006129d7868287016128c5565b93505060206129e8868287016128c5565b92505060406129f9868287016128fb565b9150509250925092565b600060ff82169050919050565b612a1981612a03565b82525050565b6000602082019050612a346000830184612a10565b92915050565b600060208284031215612a5057612a4f6128a4565b5b6000612a5e848285016128c5565b91505092915050565b600060208284031215612a7d57612a7c6128a4565b5b6000612a8b848285016128fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612ac9816128da565b82525050565b6000612adb8383612ac0565b60208301905092915050565b6000602082019050919050565b6000612aff82612a94565b612b098185612a9f565b9350612b1483612ab0565b8060005b83811015612b45578151612b2c8882612acf565b9750612b3783612ae7565b925050600181019050612b18565b5085935050505092915050565b60006020820190508181036000830152612b6c8184612af4565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bb1826127d2565b810181811067ffffffffffffffff82111715612bd057612bcf612b79565b5b80604052505050565b6000612be361289a565b9050612bef8282612ba8565b919050565b600067ffffffffffffffff821115612c0f57612c0e612b79565b5b602082029050602081019050919050565b600080fd5b6000612c38612c3384612bf4565b612bd9565b90508083825260208201905060208402830185811115612c5b57612c5a612c20565b5b835b81811015612c845780612c7088826128fb565b845260208401935050602081019050612c5d565b5050509392505050565b600082601f830112612ca357612ca2612b74565b5b8135612cb3848260208601612c25565b91505092915050565b600060208284031215612cd257612cd16128a4565b5b600082013567ffffffffffffffff811115612cf057612cef6128a9565b5b612cfc84828501612c8e565b91505092915050565b60008060408385031215612d1c57612d1b6128a4565b5b6000612d2a858286016128c5565b9250506020612d3b858286016128c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d8c57607f821691505b602082108103612d9f57612d9e612d45565b5b50919050565b7f4e6f204e46547320696e207374616b6500000000000000000000000000000000600082015250565b6000612ddb60108361278e565b9150612de682612da5565b602082019050919050565b60006020820190508181036000830152612e0a81612dce565b9050919050565b7f596f752063616e277420616c726561647920756e7374616b65204e4654730000600082015250565b6000612e47601e8361278e565b9150612e5282612e11565b602082019050919050565b60006020820190508181036000830152612e7681612e3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612eb7826128da565b9150612ec2836128da565b925082821015612ed557612ed4612e7d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000606082019050612f246000830186612870565b612f316020830185612870565b612f3e6040830184612986565b949350505050565b6000612f51826128da565b9150612f5c836128da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f9557612f94612e7d565b5b828202905092915050565b6000612fab826128da565b9150612fb6836128da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612feb57612fea612e7d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000613030826128da565b91506000820361304357613042612e7d565b5b600182039050919050565b6000613059826128da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361308b5761308a612e7d565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130cc60208361278e565b91506130d782613096565b602082019050919050565b600060208201905081810360008301526130fb816130bf565b9050919050565b7f4e6f7420696e207374616b650000000000000000000000000000000000000000600082015250565b6000613138600c8361278e565b915061314382613102565b602082019050919050565b600060208201905081810360008301526131678161312b565b9050919050565b7f4e4654206973206e6f7420696e207374616b6500000000000000000000000000600082015250565b60006131a460138361278e565b91506131af8261316e565b602082019050919050565b600060208201905081810360008301526131d381613197565b9050919050565b7f4e6f74207374616b656420627920796f75000000000000000000000000000000600082015250565b600061321060118361278e565b915061321b826131da565b602082019050919050565b6000602082019050818103600083015261323f81613203565b9050919050565b7f596f752063616e277420616c726561647920636c61696d20796f75722072657760008201527f6172647300000000000000000000000000000000000000000000000000000000602082015250565b60006132a260248361278e565b91506132ad82613246565b604082019050919050565b600060208201905081810360008301526132d181613295565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061333460258361278e565b915061333f826132d8565b604082019050919050565b6000602082019050818103600083015261336381613327565b9050919050565b7f5374616b696e67206e6f74206c69766500000000000000000000000000000000600082015250565b60006133a060108361278e565b91506133ab8261336a565b602082019050919050565b600060208201905081810360008301526133cf81613393565b9050919050565b7f596f752068617665207265616368656420746865206d6178696d756d206e756d60008201527f626572206f66204e46547320696e207374616b65000000000000000000000000602082015250565b600061343260348361278e565b915061343d826133d6565b604082019050919050565b6000602082019050818103600083015261346181613425565b9050919050565b600081519050613477816128ae565b92915050565b600060208284031215613493576134926128a4565b5b60006134a184828501613468565b91505092915050565b7f4e4654206973206e6f7420796f75727300000000000000000000000000000000600082015250565b60006134e060108361278e565b91506134eb826134aa565b602082019050919050565b6000602082019050818103600083015261350f816134d3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061357260268361278e565b915061357d82613516565b604082019050919050565b600060208201905081810360008301526135a181613565565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061360460248361278e565b915061360f826135a8565b604082019050919050565b60006020820190508181036000830152613633816135f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061369660228361278e565b91506136a18261363a565b604082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613702601d8361278e565b915061370d826136cc565b602082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061379460258361278e565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061382660238361278e565b9150613831826137ca565b604082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138b860268361278e565b91506138c38261385c565b604082019050919050565b600060208201905081810360008301526138e7816138ab565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061394a60218361278e565b9150613955826138ee565b604082019050919050565b600060208201905081810360008301526139798161393d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006139dc60228361278e565b91506139e782613980565b604082019050919050565b60006020820190508181036000830152613a0b816139cf565b905091905056fea2646970667358221220fb1987abf722c8bc4a90803f0965d5dc3c5bbc0bd96af48b90f0c5819d6f3bd664736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000709ce875e2bec643b1932e4c9fd22ce113e20e2d
-----Decoded View---------------
Arg [0] : _WCAAddress (address): 0x709ce875E2bec643b1932E4c9fd22Ce113E20e2D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000709ce875e2bec643b1932e4c9fd22ce113e20e2d
Deployed Bytecode Sourcemap
28102:6985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16042:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28400:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18393:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17162:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19174:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17004:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30685:869;;;:::i;:::-;;33779:520;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29173:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19878:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29305:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27420:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31562:865;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34307:421;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28344:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32435:565;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17333:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9465:103;;;:::i;:::-;;28162:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27830:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29059:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29441:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8814:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16261:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28213:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34860:95;;;:::i;:::-;;20621:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28297:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17666:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33008:763;;;:::i;:::-;;34963:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30011:666;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17922:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34736:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9723:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16042:100;16096:13;16129:5;16122:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16042:100;:::o;28400:25::-;;;;;;;;;;;;;:::o;18393:201::-;18476:4;18493:13;18509:12;:10;:12::i;:::-;18493:28;;18532:32;18541:5;18548:7;18557:6;18532:8;:32::i;:::-;18582:4;18575:11;;;18393:201;;;;:::o;17162:108::-;17223:7;17250:12;;17243:19;;17162:108;:::o;19174:295::-;19305:4;19322:15;19340:12;:10;:12::i;:::-;19322:30;;19363:38;19379:4;19385:7;19394:6;19363:15;:38::i;:::-;19412:27;19422:4;19428:2;19432:6;19412:9;:27::i;:::-;19457:4;19450:11;;;19174:295;;;;;:::o;17004:93::-;17062:5;17087:2;17080:9;;17004:93;:::o;30685:869::-;30762:1;30733:26;30748:10;30733:14;:26::i;:::-;:30;30725:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;30822:21;;30803:15;:40;;30795:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30889:20;30931:9;30943:16;:28;30960:10;30943:28;;;;;;;;;;;;;;;:35;;;;30931:47;;30926:564;30984:1;30980;:5;30926:564;;;31007:15;31025:16;:28;31042:10;31025:28;;;;;;;;;;;;;;;31058:1;31054;:5;;;;:::i;:::-;31025:35;;;;;;;;:::i;:::-;;;;;;;;;;31007:53;;31077:10;;;;;;;;;;;:23;;;31109:4;31116:10;31128:7;31077:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31153:17;31173:15;31153:35;;31218:12;;31206:9;:24;31203:87;;;31262:12;;31250:24;;31203:87;28252:15;31334:17;:26;31352:7;31334:26;;;;;;;;;;;;31322:9;:38;;;;:::i;:::-;31321:55;;;;:::i;:::-;31304:73;;;;;:::i;:::-;;;31392:16;:28;31409:10;31392:28;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31476:1;31441:15;:24;31457:7;31441:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30992:498;;30987:3;;;;;:::i;:::-;;;;30926:564;;;;31502:44;31512:7;:5;:7::i;:::-;31521:10;31533:12;31502:9;:44::i;:::-;30714:840;30685:869::o;33779:520::-;33839:7;33859:20;33882:1;33859:24;;33896:25;33924:16;:24;33941:6;33924:24;;;;;;;;;;;;;;;33896:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33964:9;33959:301;33983:8;:15;33979:1;:19;33959:301;;;34020:17;34040:15;34020:35;;34085:12;;34073:9;:24;34070:87;;;34129:12;;34117:24;;34070:87;28252:15;34201:17;:30;34219:8;34228:1;34219:11;;;;;;;;:::i;:::-;;;;;;;;34201:30;;;;;;;;;;;;34189:9;:42;;;;:::i;:::-;34188:59;;;;:::i;:::-;34171:77;;;;;:::i;:::-;;;34005:255;34000:3;;;;;:::i;:::-;;;;33959:301;;;;34279:12;34272:19;;;;33779:520;;;:::o;29173:124::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29280:9:::1;29256:21;:33;;;;29173:124:::0;:::o;19878:240::-;19966:4;19983:13;19999:12;:10;:12::i;:::-;19983:28;;20022:66;20031:5;20038:7;20077:10;20047:11;:18;20059:5;20047:18;;;;;;;;;;;;;;;:27;20066:7;20047:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;20022:8;:66::i;:::-;20106:4;20099:11;;;19878:240;;;;:::o;29305:124::-;29361:16;29397;:24;29414:6;29397:24;;;;;;;;;;;;;;;29390:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29305:124;;;:::o;27420:91::-;27476:27;27482:12;:10;:12::i;:::-;27496:6;27476:5;:27::i;:::-;27420:91;:::o;31562:865::-;31656:21;;31637:15;:40;;31629:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;31723:20;31773:9;31768:595;31792:8;:15;31788:1;:19;31768:595;;;31829:10;31842:8;31851:1;31842:11;;;;;;;;:::i;:::-;;;;;;;;31829:24;;31899:10;31876:33;;:15;:19;31892:2;31876:19;;;;;;;;;;;;;;;;;;;;;:33;;;31868:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31943:10;;;;;;;;;;;:23;;;31975:4;31982:10;31994:2;31943:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32012:17;32032:15;32012:35;;32077:12;;32065:9;:24;32062:87;;;32121:12;;32109:24;;32062:87;28252:15;32193:17;:21;32211:2;32193:21;;;;;;;;;;;;32181:9;:33;;;;:::i;:::-;32180:50;;;;:::i;:::-;32163:68;;;;;:::i;:::-;;;32248:56;32271:16;:28;32288:10;32271:28;;;;;;;;;;;;;;;32301:2;32248:22;:56::i;:::-;32349:1;32319:15;:19;32335:2;32319:19;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;31814:549;;31809:3;;;;;:::i;:::-;;;;31768:595;;;;32375:44;32385:7;:5;:7::i;:::-;32394:10;32406:12;32375:9;:44::i;:::-;31618:809;31562:865;:::o;34307:421::-;34374:7;34438:1;34402:38;;:15;:24;34418:7;34402:24;;;;;;;;;;;;;;;;;;;;;:38;;;34394:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34477:17;34497:15;34477:35;;34538:12;;34526:9;:24;34523:79;;;34578:12;;34566:24;;34523:79;34612:21;34648:17;:26;34666:7;34648:26;;;;;;;;;;;;34636:9;:38;;;;:::i;:::-;34612:62;;28252:15;34692:13;:28;;;;:::i;:::-;34685:35;;;;34307:421;;;:::o;28344:49::-;;;;:::o;32435:565::-;32530:10;32502:38;;:15;:24;32518:7;32502:24;;;;;;;;;;;;;;;;;;;;;:38;;;32494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32600:21;;32581:15;:40;;32573:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;32673:17;32693:15;32673:35;;32734:12;;32722:9;:24;32719:79;;;32774:12;;32762:24;;32719:79;32808:20;28252:15;32845:17;:26;32863:7;32845:26;;;;;;;;;;;;32833:9;:38;;;;:::i;:::-;32832:55;;;;:::i;:::-;32808:80;;32928:9;32899:17;:26;32917:7;32899:26;;;;;;;;;;;:38;;;;32948:44;32958:7;:5;:7::i;:::-;32967:10;32979:12;32948:9;:44::i;:::-;32483:517;;32435:565;:::o;17333:127::-;17407:7;17434:9;:18;17444:7;17434:18;;;;;;;;;;;;;;;;17427:25;;17333:127;;;:::o;9465:103::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9530:30:::1;9557:1;9530:18;:30::i;:::-;9465:103::o:0;28162:44::-;28204:2;28162:44;:::o;27830:164::-;27907:46;27923:7;27932:12;:10;:12::i;:::-;27946:6;27907:15;:46::i;:::-;27964:22;27970:7;27979:6;27964:5;:22::i;:::-;27830:164;;:::o;29059:106::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29148:9:::1;29133:12;:24;;;;29059:106:::0;:::o;29441:127::-;29502:7;29529:16;:24;29546:6;29529:24;;;;;;;;;;;;;;;:31;;;;29522:38;;29441:127;;;:::o;8814:87::-;8860:7;8887:6;;;;;;;;;;;8880:13;;8814:87;:::o;16261:104::-;16317:13;16350:7;16343:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16261:104;:::o;28213:54::-;28252:15;28213:54;:::o;34860:95::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34935:12:::1;;;;;;;;;;;34934:13;34919:12;;:28;;;;;;;;;;;;;;;;;;34860:95::o:0;20621:438::-;20714:4;20731:13;20747:12;:10;:12::i;:::-;20731:28;;20770:24;20797:11;:18;20809:5;20797:18;;;;;;;;;;;;;;;:27;20816:7;20797:27;;;;;;;;;;;;;;;;20770:54;;20863:15;20843:16;:35;;20835:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20956:60;20965:5;20972:7;21000:15;20981:16;:34;20956:8;:60::i;:::-;21047:4;21040:11;;;;20621:438;;;;:::o;28297:40::-;;;;:::o;17666:193::-;17745:4;17762:13;17778:12;:10;:12::i;:::-;17762:28;;17801;17811:5;17818:2;17822:6;17801:9;:28::i;:::-;17847:4;17840:11;;;17666:193;;;;:::o;33008:763::-;33073:21;;33054:15;:40;;33046:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;33146:20;33183:25;33211:16;:28;33228:10;33211:28;;;;;;;;;;;;;;;33183:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33255:9;33250:457;33274:8;:15;33270:1;:19;33250:457;;;33311:10;33324:8;33333:1;33324:11;;;;;;;;:::i;:::-;;;;;;;;33311:24;;33381:10;33358:33;;:15;:19;33374:2;33358:19;;;;;;;;;;;;;;;;;;;;;:33;;;33350:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33428:17;33448:15;33428:35;;33493:12;;33481:9;:24;33478:87;;;33537:12;;33525:24;;33478:87;28252:15;33609:17;:21;33627:2;33609:21;;;;;;;;;;;;33597:9;:33;;;;:::i;:::-;33596:50;;;;:::i;:::-;33579:68;;;;;:::i;:::-;;;33686:9;33662:17;:21;33680:2;33662:21;;;;;;;;;;;:33;;;;33296:411;;33291:3;;;;;:::i;:::-;;;;33250:457;;;;33719:44;33729:7;:5;:7::i;:::-;33738:10;33750:12;33719:9;:44::i;:::-;33035:736;;33008:763::o;34963:121::-;35007:4;35030:12;;;;;;;;;;;:46;;;;;35064:12;;35046:15;:30;35030:46;35023:53;;34963:121;:::o;30011:666::-;28964:12;;;;;;;;;;;:46;;;;;28998:12;;28980:15;:30;28964:46;28956:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28204:2:::1;30128:8;:15;30099:26;30114:10;30099:14;:26::i;:::-;:44;;;;:::i;:::-;:63;;30091:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;30237:9;30232:438;30256:8;:15;30252:1;:19;30232:438;;;30293:10;30306:8;30315:1;30306:11;;;;;;;;:::i;:::-;;;;;;;;30293:24;;30366:10;30340:36;;:10;;;;;;;;;;;:18;;;30359:2;30340:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;:73;;;;;30411:1;30380:33;;:15;:19;30396:2;30380:19;;;;;;;;;;;;;;;;;;;;;:33;;;30340:73;30332:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;30449:10;;;;;;;;;;;:23;;;30473:10;30493:4;30500:2;30449:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30520:16;:28;30537:10;30520:28;;;;;;;;;;;;;;;30554:2;30520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30596:15;30572:17;:21;30590:2;30572:21;;;;;;;;;;;:39;;;;30648:10;30626:15;:19;30642:2;30626:19;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;30278:392;30273:3;;;;;:::i;:::-;;;;30232:438;;;;30011:666:::0;:::o;17922:151::-;18011:7;18038:11;:18;18050:5;18038:18;;;;;;;;;;;;;;;:27;18057:7;18038:27;;;;;;;;;;;;;;;;18031:34;;17922:151;;;;:::o;34736:116::-;34793:7;34820:15;:24;34836:7;34820:24;;;;;;;;;;;;;;;;;;;;;34813:31;;34736:116;;;:::o;9723:201::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9832:1:::1;9812:22;;:8;:22;;::::0;9804:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9888:28;9907:8;9888:18;:28::i;:::-;9723:201:::0;:::o;7538:98::-;7591:7;7618:10;7611:17;;7538:98;:::o;24257:380::-;24410:1;24393:19;;:5;:19;;;24385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24491:1;24472:21;;:7;:21;;;24464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24575:6;24545:11;:18;24557:5;24545:18;;;;;;;;;;;;;;;:27;24564:7;24545:27;;;;;;;;;;;;;;;:36;;;;24613:7;24597:32;;24606:5;24597:32;;;24622:6;24597:32;;;;;;:::i;:::-;;;;;;;;24257:380;;;:::o;24924:453::-;25059:24;25086:25;25096:5;25103:7;25086:9;:25::i;:::-;25059:52;;25146:17;25126:16;:37;25122:248;;25208:6;25188:16;:26;;25180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25292:51;25301:5;25308:7;25336:6;25317:16;:25;25292:8;:51::i;:::-;25122:248;25048:329;24924:453;;;:::o;21538:671::-;21685:1;21669:18;;:4;:18;;;21661:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21762:1;21748:16;;:2;:16;;;21740:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21817:38;21838:4;21844:2;21848:6;21817:20;:38::i;:::-;21868:19;21890:9;:15;21900:4;21890:15;;;;;;;;;;;;;;;;21868:37;;21939:6;21924:11;:21;;21916:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22056:6;22042:11;:20;22024:9;:15;22034:4;22024:15;;;;;;;;;;;;;;;:38;;;;22101:6;22084:9;:13;22094:2;22084:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;22140:2;22125:26;;22134:4;22125:26;;;22144:6;22125:26;;;;;;:::i;:::-;;;;;;;;22164:37;22184:4;22190:2;22194:6;22164:19;:37::i;:::-;21650:559;21538:671;;;:::o;23228:591::-;23331:1;23312:21;;:7;:21;;;23304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23384:49;23405:7;23422:1;23426:6;23384:20;:49::i;:::-;23446:22;23471:9;:18;23481:7;23471:18;;;;;;;;;;;;;;;;23446:43;;23526:6;23508:14;:24;;23500:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23645:6;23628:14;:23;23607:9;:18;23617:7;23607:18;;;;;;;;;;;;;;;:44;;;;23689:6;23673:12;;:22;;;;;;;:::i;:::-;;;;;;;;23739:1;23713:37;;23722:7;23713:37;;;23743:6;23713:37;;;;;;:::i;:::-;;;;;;;;23763:48;23783:7;23800:1;23804:6;23763:19;:48::i;:::-;23293:526;23228:591;;:::o;29576:427::-;29670:14;29687:5;:12;;;;29670:29;;29715:9;29710:286;29734:6;29730:1;:10;29710:286;;;29778:7;29766:5;29772:1;29766:8;;;;;;;;:::i;:::-;;;;;;;;;;:19;29762:223;;29806:8;;;;;:::i;:::-;;;;29841:6;29837:1;:10;29833:83;;;29883:5;29889:6;29883:13;;;;;;;;:::i;:::-;;;;;;;;;;29872:5;29878:1;29872:8;;;;;;;;:::i;:::-;;;;;;;;;:24;;;;29833:83;29934:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29964:5;;29762:223;29742:3;;;;;:::i;:::-;;;;29710:286;;;;29659:344;29576:427;;:::o;10084:191::-;10158:16;10177:6;;;;;;;;;;;10158:25;;10203:8;10194:6;;:17;;;;;;;;;;;;;;;;;;10258:8;10227:40;;10248:8;10227:40;;;;;;;;;;;;10147:128;10084:191;:::o;25977:125::-;;;;:::o;26706:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:126::-;1434:7;1474:42;1467:5;1463:54;1452:65;;1397:126;;;:::o;1529:96::-;1566:7;1595:24;1613:5;1595:24;:::i;:::-;1584:35;;1529:96;;;:::o;1631:118::-;1718:24;1736:5;1718:24;:::i;:::-;1713:3;1706:37;1631:118;;:::o;1755:222::-;1848:4;1886:2;1875:9;1871:18;1863:26;;1899:71;1967:1;1956:9;1952:17;1943:6;1899:71;:::i;:::-;1755:222;;;;:::o;1983:75::-;2016:6;2049:2;2043:9;2033:19;;1983:75;:::o;2064:117::-;2173:1;2170;2163:12;2187:117;2296:1;2293;2286:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:118::-;3933:24;3951:5;3933:24;:::i;:::-;3928:3;3921:37;3846:118;;:::o;3970:222::-;4063:4;4101:2;4090:9;4086:18;4078:26;;4114:71;4182:1;4171:9;4167:17;4158:6;4114:71;:::i;:::-;3970:222;;;;:::o;4198:619::-;4275:6;4283;4291;4340:2;4328:9;4319:7;4315:23;4311:32;4308:119;;;4346:79;;:::i;:::-;4308:119;4466:1;4491:53;4536:7;4527:6;4516:9;4512:22;4491:53;:::i;:::-;4481:63;;4437:117;4593:2;4619:53;4664:7;4655:6;4644:9;4640:22;4619:53;:::i;:::-;4609:63;;4564:118;4721:2;4747:53;4792:7;4783:6;4772:9;4768:22;4747:53;:::i;:::-;4737:63;;4692:118;4198:619;;;;;:::o;4823:86::-;4858:7;4898:4;4891:5;4887:16;4876:27;;4823:86;;;:::o;4915:112::-;4998:22;5014:5;4998:22;:::i;:::-;4993:3;4986:35;4915:112;;:::o;5033:214::-;5122:4;5160:2;5149:9;5145:18;5137:26;;5173:67;5237:1;5226:9;5222:17;5213:6;5173:67;:::i;:::-;5033:214;;;;:::o;5253:329::-;5312:6;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5253:329;;;;:::o;5588:::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:114::-;5990:6;6024:5;6018:12;6008:22;;5923:114;;;:::o;6043:184::-;6142:11;6176:6;6171:3;6164:19;6216:4;6211:3;6207:14;6192:29;;6043:184;;;;:::o;6233:132::-;6300:4;6323:3;6315:11;;6353:4;6348:3;6344:14;6336:22;;6233:132;;;:::o;6371:108::-;6448:24;6466:5;6448:24;:::i;:::-;6443:3;6436:37;6371:108;;:::o;6485:179::-;6554:10;6575:46;6617:3;6609:6;6575:46;:::i;:::-;6653:4;6648:3;6644:14;6630:28;;6485:179;;;;:::o;6670:113::-;6740:4;6772;6767:3;6763:14;6755:22;;6670:113;;;:::o;6819:732::-;6938:3;6967:54;7015:5;6967:54;:::i;:::-;7037:86;7116:6;7111:3;7037:86;:::i;:::-;7030:93;;7147:56;7197:5;7147:56;:::i;:::-;7226:7;7257:1;7242:284;7267:6;7264:1;7261:13;7242:284;;;7343:6;7337:13;7370:63;7429:3;7414:13;7370:63;:::i;:::-;7363:70;;7456:60;7509:6;7456:60;:::i;:::-;7446:70;;7302:224;7289:1;7286;7282:9;7277:14;;7242:284;;;7246:14;7542:3;7535:10;;6943:608;;;6819:732;;;;:::o;7557:373::-;7700:4;7738:2;7727:9;7723:18;7715:26;;7787:9;7781:4;7777:20;7773:1;7762:9;7758:17;7751:47;7815:108;7918:4;7909:6;7815:108;:::i;:::-;7807:116;;7557:373;;;;:::o;7936:117::-;8045:1;8042;8035:12;8059:180;8107:77;8104:1;8097:88;8204:4;8201:1;8194:15;8228:4;8225:1;8218:15;8245:281;8328:27;8350:4;8328:27;:::i;:::-;8320:6;8316:40;8458:6;8446:10;8443:22;8422:18;8410:10;8407:34;8404:62;8401:88;;;8469:18;;:::i;:::-;8401:88;8509:10;8505:2;8498:22;8288:238;8245:281;;:::o;8532:129::-;8566:6;8593:20;;:::i;:::-;8583:30;;8622:33;8650:4;8642:6;8622:33;:::i;:::-;8532:129;;;:::o;8667:311::-;8744:4;8834:18;8826:6;8823:30;8820:56;;;8856:18;;:::i;:::-;8820:56;8906:4;8898:6;8894:17;8886:25;;8966:4;8960;8956:15;8948:23;;8667:311;;;:::o;8984:117::-;9093:1;9090;9083:12;9124:710;9220:5;9245:81;9261:64;9318:6;9261:64;:::i;:::-;9245:81;:::i;:::-;9236:90;;9346:5;9375:6;9368:5;9361:21;9409:4;9402:5;9398:16;9391:23;;9462:4;9454:6;9450:17;9442:6;9438:30;9491:3;9483:6;9480:15;9477:122;;;9510:79;;:::i;:::-;9477:122;9625:6;9608:220;9642:6;9637:3;9634:15;9608:220;;;9717:3;9746:37;9779:3;9767:10;9746:37;:::i;:::-;9741:3;9734:50;9813:4;9808:3;9804:14;9797:21;;9684:144;9668:4;9663:3;9659:14;9652:21;;9608:220;;;9612:21;9226:608;;9124:710;;;;;:::o;9857:370::-;9928:5;9977:3;9970:4;9962:6;9958:17;9954:27;9944:122;;9985:79;;:::i;:::-;9944:122;10102:6;10089:20;10127:94;10217:3;10209:6;10202:4;10194:6;10190:17;10127:94;:::i;:::-;10118:103;;9934:293;9857:370;;;;:::o;10233:539::-;10317:6;10366:2;10354:9;10345:7;10341:23;10337:32;10334:119;;;10372:79;;:::i;:::-;10334:119;10520:1;10509:9;10505:17;10492:31;10550:18;10542:6;10539:30;10536:117;;;10572:79;;:::i;:::-;10536:117;10677:78;10747:7;10738:6;10727:9;10723:22;10677:78;:::i;:::-;10667:88;;10463:302;10233:539;;;;:::o;10778:474::-;10846:6;10854;10903:2;10891:9;10882:7;10878:23;10874:32;10871:119;;;10909:79;;:::i;:::-;10871:119;11029:1;11054:53;11099:7;11090:6;11079:9;11075:22;11054:53;:::i;:::-;11044:63;;11000:117;11156:2;11182:53;11227:7;11218:6;11207:9;11203:22;11182:53;:::i;:::-;11172:63;;11127:118;10778:474;;;;;:::o;11258:180::-;11306:77;11303:1;11296:88;11403:4;11400:1;11393:15;11427:4;11424:1;11417:15;11444:320;11488:6;11525:1;11519:4;11515:12;11505:22;;11572:1;11566:4;11562:12;11593:18;11583:81;;11649:4;11641:6;11637:17;11627:27;;11583:81;11711:2;11703:6;11700:14;11680:18;11677:38;11674:84;;11730:18;;:::i;:::-;11674:84;11495:269;11444:320;;;:::o;11770:166::-;11910:18;11906:1;11898:6;11894:14;11887:42;11770:166;:::o;11942:366::-;12084:3;12105:67;12169:2;12164:3;12105:67;:::i;:::-;12098:74;;12181:93;12270:3;12181:93;:::i;:::-;12299:2;12294:3;12290:12;12283:19;;11942:366;;;:::o;12314:419::-;12480:4;12518:2;12507:9;12503:18;12495:26;;12567:9;12561:4;12557:20;12553:1;12542:9;12538:17;12531:47;12595:131;12721:4;12595:131;:::i;:::-;12587:139;;12314:419;;;:::o;12739:180::-;12879:32;12875:1;12867:6;12863:14;12856:56;12739:180;:::o;12925:366::-;13067:3;13088:67;13152:2;13147:3;13088:67;:::i;:::-;13081:74;;13164:93;13253:3;13164:93;:::i;:::-;13282:2;13277:3;13273:12;13266:19;;12925:366;;;:::o;13297:419::-;13463:4;13501:2;13490:9;13486:18;13478:26;;13550:9;13544:4;13540:20;13536:1;13525:9;13521:17;13514:47;13578:131;13704:4;13578:131;:::i;:::-;13570:139;;13297:419;;;:::o;13722:180::-;13770:77;13767:1;13760:88;13867:4;13864:1;13857:15;13891:4;13888:1;13881:15;13908:191;13948:4;13968:20;13986:1;13968:20;:::i;:::-;13963:25;;14002:20;14020:1;14002:20;:::i;:::-;13997:25;;14041:1;14038;14035:8;14032:34;;;14046:18;;:::i;:::-;14032:34;14091:1;14088;14084:9;14076:17;;13908:191;;;;:::o;14105:180::-;14153:77;14150:1;14143:88;14250:4;14247:1;14240:15;14274:4;14271:1;14264:15;14291:442;14440:4;14478:2;14467:9;14463:18;14455:26;;14491:71;14559:1;14548:9;14544:17;14535:6;14491:71;:::i;:::-;14572:72;14640:2;14629:9;14625:18;14616:6;14572:72;:::i;:::-;14654;14722:2;14711:9;14707:18;14698:6;14654:72;:::i;:::-;14291:442;;;;;;:::o;14739:348::-;14779:7;14802:20;14820:1;14802:20;:::i;:::-;14797:25;;14836:20;14854:1;14836:20;:::i;:::-;14831:25;;15024:1;14956:66;14952:74;14949:1;14946:81;14941:1;14934:9;14927:17;14923:105;14920:131;;;15031:18;;:::i;:::-;14920:131;15079:1;15076;15072:9;15061:20;;14739:348;;;;:::o;15093:305::-;15133:3;15152:20;15170:1;15152:20;:::i;:::-;15147:25;;15186:20;15204:1;15186:20;:::i;:::-;15181:25;;15340:1;15272:66;15268:74;15265:1;15262:81;15259:107;;;15346:18;;:::i;:::-;15259:107;15390:1;15387;15383:9;15376:16;;15093:305;;;;:::o;15404:180::-;15452:77;15449:1;15442:88;15549:4;15546:1;15539:15;15573:4;15570:1;15563:15;15590:171;15629:3;15652:24;15670:5;15652:24;:::i;:::-;15643:33;;15698:4;15691:5;15688:15;15685:41;;15706:18;;:::i;:::-;15685:41;15753:1;15746:5;15742:13;15735:20;;15590:171;;;:::o;15767:233::-;15806:3;15829:24;15847:5;15829:24;:::i;:::-;15820:33;;15875:66;15868:5;15865:77;15862:103;;15945:18;;:::i;:::-;15862:103;15992:1;15985:5;15981:13;15974:20;;15767:233;;;:::o;16006:182::-;16146:34;16142:1;16134:6;16130:14;16123:58;16006:182;:::o;16194:366::-;16336:3;16357:67;16421:2;16416:3;16357:67;:::i;:::-;16350:74;;16433:93;16522:3;16433:93;:::i;:::-;16551:2;16546:3;16542:12;16535:19;;16194:366;;;:::o;16566:419::-;16732:4;16770:2;16759:9;16755:18;16747:26;;16819:9;16813:4;16809:20;16805:1;16794:9;16790:17;16783:47;16847:131;16973:4;16847:131;:::i;:::-;16839:139;;16566:419;;;:::o;16991:162::-;17131:14;17127:1;17119:6;17115:14;17108:38;16991:162;:::o;17159:366::-;17301:3;17322:67;17386:2;17381:3;17322:67;:::i;:::-;17315:74;;17398:93;17487:3;17398:93;:::i;:::-;17516:2;17511:3;17507:12;17500:19;;17159:366;;;:::o;17531:419::-;17697:4;17735:2;17724:9;17720:18;17712:26;;17784:9;17778:4;17774:20;17770:1;17759:9;17755:17;17748:47;17812:131;17938:4;17812:131;:::i;:::-;17804:139;;17531:419;;;:::o;17956:169::-;18096:21;18092:1;18084:6;18080:14;18073:45;17956:169;:::o;18131:366::-;18273:3;18294:67;18358:2;18353:3;18294:67;:::i;:::-;18287:74;;18370:93;18459:3;18370:93;:::i;:::-;18488:2;18483:3;18479:12;18472:19;;18131:366;;;:::o;18503:419::-;18669:4;18707:2;18696:9;18692:18;18684:26;;18756:9;18750:4;18746:20;18742:1;18731:9;18727:17;18720:47;18784:131;18910:4;18784:131;:::i;:::-;18776:139;;18503:419;;;:::o;18928:167::-;19068:19;19064:1;19056:6;19052:14;19045:43;18928:167;:::o;19101:366::-;19243:3;19264:67;19328:2;19323:3;19264:67;:::i;:::-;19257:74;;19340:93;19429:3;19340:93;:::i;:::-;19458:2;19453:3;19449:12;19442:19;;19101:366;;;:::o;19473:419::-;19639:4;19677:2;19666:9;19662:18;19654:26;;19726:9;19720:4;19716:20;19712:1;19701:9;19697:17;19690:47;19754:131;19880:4;19754:131;:::i;:::-;19746:139;;19473:419;;;:::o;19898:223::-;20038:34;20034:1;20026:6;20022:14;20015:58;20107:6;20102:2;20094:6;20090:15;20083:31;19898:223;:::o;20127:366::-;20269:3;20290:67;20354:2;20349:3;20290:67;:::i;:::-;20283:74;;20366:93;20455:3;20366:93;:::i;:::-;20484:2;20479:3;20475:12;20468:19;;20127:366;;;:::o;20499:419::-;20665:4;20703:2;20692:9;20688:18;20680:26;;20752:9;20746:4;20742:20;20738:1;20727:9;20723:17;20716:47;20780:131;20906:4;20780:131;:::i;:::-;20772:139;;20499:419;;;:::o;20924:224::-;21064:34;21060:1;21052:6;21048:14;21041:58;21133:7;21128:2;21120:6;21116:15;21109:32;20924:224;:::o;21154:366::-;21296:3;21317:67;21381:2;21376:3;21317:67;:::i;:::-;21310:74;;21393:93;21482:3;21393:93;:::i;:::-;21511:2;21506:3;21502:12;21495:19;;21154:366;;;:::o;21526:419::-;21692:4;21730:2;21719:9;21715:18;21707:26;;21779:9;21773:4;21769:20;21765:1;21754:9;21750:17;21743:47;21807:131;21933:4;21807:131;:::i;:::-;21799:139;;21526:419;;;:::o;21951:166::-;22091:18;22087:1;22079:6;22075:14;22068:42;21951:166;:::o;22123:366::-;22265:3;22286:67;22350:2;22345:3;22286:67;:::i;:::-;22279:74;;22362:93;22451:3;22362:93;:::i;:::-;22480:2;22475:3;22471:12;22464:19;;22123:366;;;:::o;22495:419::-;22661:4;22699:2;22688:9;22684:18;22676:26;;22748:9;22742:4;22738:20;22734:1;22723:9;22719:17;22712:47;22776:131;22902:4;22776:131;:::i;:::-;22768:139;;22495:419;;;:::o;22920:239::-;23060:34;23056:1;23048:6;23044:14;23037:58;23129:22;23124:2;23116:6;23112:15;23105:47;22920:239;:::o;23165:366::-;23307:3;23328:67;23392:2;23387:3;23328:67;:::i;:::-;23321:74;;23404:93;23493:3;23404:93;:::i;:::-;23522:2;23517:3;23513:12;23506:19;;23165:366;;;:::o;23537:419::-;23703:4;23741:2;23730:9;23726:18;23718:26;;23790:9;23784:4;23780:20;23776:1;23765:9;23761:17;23754:47;23818:131;23944:4;23818:131;:::i;:::-;23810:139;;23537:419;;;:::o;23962:143::-;24019:5;24050:6;24044:13;24035:22;;24066:33;24093:5;24066:33;:::i;:::-;23962:143;;;;:::o;24111:351::-;24181:6;24230:2;24218:9;24209:7;24205:23;24201:32;24198:119;;;24236:79;;:::i;:::-;24198:119;24356:1;24381:64;24437:7;24428:6;24417:9;24413:22;24381:64;:::i;:::-;24371:74;;24327:128;24111:351;;;;:::o;24468:166::-;24608:18;24604:1;24596:6;24592:14;24585:42;24468:166;:::o;24640:366::-;24782:3;24803:67;24867:2;24862:3;24803:67;:::i;:::-;24796:74;;24879:93;24968:3;24879:93;:::i;:::-;24997:2;24992:3;24988:12;24981:19;;24640:366;;;:::o;25012:419::-;25178:4;25216:2;25205:9;25201:18;25193:26;;25265:9;25259:4;25255:20;25251:1;25240:9;25236:17;25229:47;25293:131;25419:4;25293:131;:::i;:::-;25285:139;;25012:419;;;:::o;25437:225::-;25577:34;25573:1;25565:6;25561:14;25554:58;25646:8;25641:2;25633:6;25629:15;25622:33;25437:225;:::o;25668:366::-;25810:3;25831:67;25895:2;25890:3;25831:67;:::i;:::-;25824:74;;25907:93;25996:3;25907:93;:::i;:::-;26025:2;26020:3;26016:12;26009:19;;25668:366;;;:::o;26040:419::-;26206:4;26244:2;26233:9;26229:18;26221:26;;26293:9;26287:4;26283:20;26279:1;26268:9;26264:17;26257:47;26321:131;26447:4;26321:131;:::i;:::-;26313:139;;26040:419;;;:::o;26465:223::-;26605:34;26601:1;26593:6;26589:14;26582:58;26674:6;26669:2;26661:6;26657:15;26650:31;26465:223;:::o;26694:366::-;26836:3;26857:67;26921:2;26916:3;26857:67;:::i;:::-;26850:74;;26933:93;27022:3;26933:93;:::i;:::-;27051:2;27046:3;27042:12;27035:19;;26694:366;;;:::o;27066:419::-;27232:4;27270:2;27259:9;27255:18;27247:26;;27319:9;27313:4;27309:20;27305:1;27294:9;27290:17;27283:47;27347:131;27473:4;27347:131;:::i;:::-;27339:139;;27066:419;;;:::o;27491:221::-;27631:34;27627:1;27619:6;27615:14;27608:58;27700:4;27695:2;27687:6;27683:15;27676:29;27491:221;:::o;27718:366::-;27860:3;27881:67;27945:2;27940:3;27881:67;:::i;:::-;27874:74;;27957:93;28046:3;27957:93;:::i;:::-;28075:2;28070:3;28066:12;28059:19;;27718:366;;;:::o;28090:419::-;28256:4;28294:2;28283:9;28279:18;28271:26;;28343:9;28337:4;28333:20;28329:1;28318:9;28314:17;28307:47;28371:131;28497:4;28371:131;:::i;:::-;28363:139;;28090:419;;;:::o;28515:179::-;28655:31;28651:1;28643:6;28639:14;28632:55;28515:179;:::o;28700:366::-;28842:3;28863:67;28927:2;28922:3;28863:67;:::i;:::-;28856:74;;28939:93;29028:3;28939:93;:::i;:::-;29057:2;29052:3;29048:12;29041:19;;28700:366;;;:::o;29072:419::-;29238:4;29276:2;29265:9;29261:18;29253:26;;29325:9;29319:4;29315:20;29311:1;29300:9;29296:17;29289:47;29353:131;29479:4;29353:131;:::i;:::-;29345:139;;29072:419;;;:::o;29497:224::-;29637:34;29633:1;29625:6;29621:14;29614:58;29706:7;29701:2;29693:6;29689:15;29682:32;29497:224;:::o;29727:366::-;29869:3;29890:67;29954:2;29949:3;29890:67;:::i;:::-;29883:74;;29966:93;30055:3;29966:93;:::i;:::-;30084:2;30079:3;30075:12;30068:19;;29727:366;;;:::o;30099:419::-;30265:4;30303:2;30292:9;30288:18;30280:26;;30352:9;30346:4;30342:20;30338:1;30327:9;30323:17;30316:47;30380:131;30506:4;30380:131;:::i;:::-;30372:139;;30099:419;;;:::o;30524:222::-;30664:34;30660:1;30652:6;30648:14;30641:58;30733:5;30728:2;30720:6;30716:15;30709:30;30524:222;:::o;30752:366::-;30894:3;30915:67;30979:2;30974:3;30915:67;:::i;:::-;30908:74;;30991:93;31080:3;30991:93;:::i;:::-;31109:2;31104:3;31100:12;31093:19;;30752:366;;;:::o;31124:419::-;31290:4;31328:2;31317:9;31313:18;31305:26;;31377:9;31371:4;31367:20;31363:1;31352:9;31348:17;31341:47;31405:131;31531:4;31405:131;:::i;:::-;31397:139;;31124:419;;;:::o;31549:225::-;31689:34;31685:1;31677:6;31673:14;31666:58;31758:8;31753:2;31745:6;31741:15;31734:33;31549:225;:::o;31780:366::-;31922:3;31943:67;32007:2;32002:3;31943:67;:::i;:::-;31936:74;;32019:93;32108:3;32019:93;:::i;:::-;32137:2;32132:3;32128:12;32121:19;;31780:366;;;:::o;32152:419::-;32318:4;32356:2;32345:9;32341:18;32333:26;;32405:9;32399:4;32395:20;32391:1;32380:9;32376:17;32369:47;32433:131;32559:4;32433:131;:::i;:::-;32425:139;;32152:419;;;:::o;32577:220::-;32717:34;32713:1;32705:6;32701:14;32694:58;32786:3;32781:2;32773:6;32769:15;32762:28;32577:220;:::o;32803:366::-;32945:3;32966:67;33030:2;33025:3;32966:67;:::i;:::-;32959:74;;33042:93;33131:3;33042:93;:::i;:::-;33160:2;33155:3;33151:12;33144:19;;32803:366;;;:::o;33175:419::-;33341:4;33379:2;33368:9;33364:18;33356:26;;33428:9;33422:4;33418:20;33414:1;33403:9;33399:17;33392:47;33456:131;33582:4;33456:131;:::i;:::-;33448:139;;33175:419;;;:::o;33600:221::-;33740:34;33736:1;33728:6;33724:14;33717:58;33809:4;33804:2;33796:6;33792:15;33785:29;33600:221;:::o;33827:366::-;33969:3;33990:67;34054:2;34049:3;33990:67;:::i;:::-;33983:74;;34066:93;34155:3;34066:93;:::i;:::-;34184:2;34179:3;34175:12;34168:19;;33827:366;;;:::o;34199:419::-;34365:4;34403:2;34392:9;34388:18;34380:26;;34452:9;34446:4;34442:20;34438:1;34427:9;34423:17;34416:47;34480:131;34606:4;34480:131;:::i;:::-;34472:139;;34199:419;;;:::o
Swarm Source
ipfs://fb1987abf722c8bc4a90803f0965d5dc3c5bbc0bd96af48b90f0c5819d6f3bd6
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.