Contract
0x70e4bfab4d470b9c485634289e8eb27248de12a3
2
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
WOCStaking
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-10-29 */ //Developer Info: //Written by Blockchainguy.net //Email: [email protected] //Instagram: @sheraz.manzoor pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; 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`. * * 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; /** * @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; function totalSupply() external view returns (uint256); /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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); } // 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.6.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, allowance(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 = allowance(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 Updates `owner` s allowance for `spender` based on spent `amount`. * * 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 {} } abstract contract ReentrancyGuard { // word because each write operation emits an extra SLOAD to first read the // back. This is the compiler's defense against contract upgrades and // but in exchange the refund on every call to nonReentrant will be lower in // transaction's gas, it is best to keep them low in cases like this one, to uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: contracts/Gummies/GummiesStaking.sol //SPDX-License-Identifier: MIT pragma solidity 0.8.7; contract WOCStaking is Ownable, ReentrancyGuard{ using SafeMath for uint256; bool paused = false; //Erc20 Variables IERC20 public rewardToken; //Staking Variables uint256 public totalNftStaked = 0; uint256 public totalBoosterStaked = 0; mapping(address => uint256) private _balances; mapping(address => uint256) public lastClaimTime; //Collection Variables IERC721 public nft; uint256 public STAKINGREWARD = 10 ether ; mapping(uint256 => address) public tokenIdOwners; mapping(address => uint256) public numberTokensStaked; mapping(address => mapping(uint256 => uint256)) public ownerTokenIds; //Boosters Variables IERC721 public booster; uint256 public BOOSTERREWARD = 2 ether; mapping(uint256 => address) public tokenIdOwnersBooster; mapping(address => uint256) public numberBoosterCount; mapping(address => mapping(uint256 => uint256)) public ownerTokenIdsBooster; modifier updateReward(address account) { uint256 reward = getRewards(account); lastClaimTime[account] = block.timestamp; _balances[account] += reward; _; } constructor(address _nftAddress, address _rewardToken){ nft = IERC721(_nftAddress); rewardToken = IERC20(_rewardToken); } //Setter Functions function set_Staking_Reward_In_Wei(uint256 val) public onlyOwner{ STAKINGREWARD = val; } function setRewardTokenAddress(address val) public onlyOwner{ rewardToken = IERC20(val); } function setNftAddress(address val) public onlyOwner{ nft = IERC721(val); } function setBoosterAddress(address val) public onlyOwner{ booster = IERC721(val); } function set_Booster_Reward_In_Wei(uint256 val) public onlyOwner{ BOOSTERREWARD = val; } function withdrawTokens(address _to, uint amount_in_wei) public onlyOwner{ rewardToken.transfer(_to, amount_in_wei); } function rewardsPerDay(address account) public view returns (uint256){ uint256 _cReward = numberTokensStaked[account] * STAKINGREWARD; uint256 _boosterReward = numberBoosterCount[account] * BOOSTERREWARD; uint256 totalReward = _cReward + _boosterReward; return totalReward; } function getRewards(address account) internal view returns(uint256) { uint256 _cReward = numberTokensStaked[account] * STAKINGREWARD; uint256 _boosterReward = numberBoosterCount[account] * BOOSTERREWARD; uint256 totalReward = _cReward + _boosterReward; uint256 _lastClaimed = lastClaimTime[account]; return totalReward.mul(block.timestamp.sub(_lastClaimed)).div(86400); } function viewRewards(address account) public view returns(uint256){ // Total Earned Rewards uint256 pendingReward = getRewards(account); return pendingReward + _balances[account]; } function claimRewards() updateReward(msg.sender) external nonReentrant{ uint256 reward = _balances[msg.sender]; require(reward > 0, "Zero Rewards"); require(rewardToken.balanceOf(address(this)) >= reward, "Contract doesnot have enough reward Tokens."); _balances[msg.sender] = 0; rewardToken.transfer(address(msg.sender), reward); } function getNftsIdsbyAddress(address _add) public view returns (uint256[] memory){ uint256 len = nft.balanceOf(_add); uint256[] memory temp = new uint[](len); uint256 temp_count = 0; uint256 totalCollectionSize = nft.totalSupply(); for(uint i=0;i<totalCollectionSize;i++){ if(nft.ownerOf(i) == _add){ temp[temp_count] = i; temp_count++; } } return temp; } function getBoosterIdsbyAddress(address _add) public view returns (uint256[] memory){ uint256 len = booster.balanceOf(_add); uint256[] memory temp = new uint[](len); uint256 temp_count = 0; uint256 totalCollectionSize = booster.totalSupply(); for(uint i=0;i<totalCollectionSize;i++){ if(booster.ownerOf(i) == _add){ temp[temp_count] = i; temp_count++; } } return temp; } function getUserstakedNftIds(address _user) public view returns (uint256[] memory){ uint256 len = numberTokensStaked[_user]; uint256[] memory temp = new uint[](len); for (uint256 i = 0; i < len; ++i) { temp[i] = ownerTokenIds[_user][i]; } return temp; } function getUserstakedBoosterIds(address _user) public view returns (uint256[] memory){ uint256 len = numberBoosterCount[_user]; uint256[] memory temp = new uint[](len); for (uint256 i = 0; i < len; ++i) { temp[i] = ownerTokenIdsBooster[_user][i]; } return temp; } function stakeNfts(uint256[] calldata tokenIds) updateReward(msg.sender) external nonReentrant { require(!paused,"Contract is paused"); require(IERC721(nft).isApprovedForAll(msg.sender, address(this)) , "Approve Nfts First"); require(tokenIds.length > 0, "0 Nfts to Stake"); unchecked { uint256 len = tokenIds.length; uint256 numStaked = numberTokensStaked[msg.sender]; for (uint256 i = 0; i < len; i++) { uint256 tokenId = tokenIds[i]; require(IERC721(nft).ownerOf(tokenId) == msg.sender , "You are not owner of this nft."); tokenIdOwners[tokenId] = msg.sender; ownerTokenIds[msg.sender][numStaked] = tokenId; numStaked++; totalNftStaked++; nft.transferFrom(msg.sender,address(this),tokenId); } numberTokensStaked[msg.sender] = numStaked; } } function stakeBooster(uint256[] calldata tokenIds) updateReward(msg.sender) external nonReentrant{ require(!paused,"Contract is paused"); require(IERC721(booster).isApprovedForAll(msg.sender, address(this)) , "Approve Nfts First"); require(tokenIds.length > 0, "0 Nfts to Stake"); unchecked { uint256 len = tokenIds.length; uint256 numStaked = numberBoosterCount[msg.sender]; for (uint256 i = 0; i < len; i++) { uint256 tokenId = tokenIds[i]; require(IERC721(booster).ownerOf(tokenId) == msg.sender , "You are not owner of this nft."); tokenIdOwnersBooster[tokenId] = msg.sender; ownerTokenIdsBooster[msg.sender][numStaked] = tokenId; numStaked++; totalBoosterStaked++; booster.transferFrom(msg.sender,address(this),tokenId); } numberBoosterCount[msg.sender] = numStaked; } } function unstakeBooster(uint256[] calldata tokenIds) updateReward(msg.sender) external nonReentrant{ require(!paused,"Contract is paused"); require(tokenIds.length > 0, "0 Nfts to Stake"); unchecked { uint256 len = tokenIds.length; for (uint256 i = 0; i < len; i++) { uint256 tokenId = tokenIds[i]; require(tokenIdOwnersBooster[tokenId] == msg.sender, "You dont own this ID"); require(IERC721(booster).ownerOf(tokenId) == address(this) , "Nft not available in the contract"); removeFromUserStakedBooster(msg.sender, tokenId); numberBoosterCount[msg.sender]--; totalBoosterStaked--; delete tokenIdOwnersBooster[tokenId]; booster.transferFrom( address(this), msg.sender, tokenId ); } } } function removeFromUserStakedBooster(address user, uint256 tokenId) internal { uint256 _numStaked = numberBoosterCount[user]; for (uint256 j = 0; j < _numStaked; ++j) { if (ownerTokenIdsBooster[user][j] == tokenId) { uint256 lastIndex = _numStaked - 1; ownerTokenIdsBooster[user][j] = ownerTokenIdsBooster[user][ lastIndex ]; delete ownerTokenIdsBooster[user][lastIndex]; break; } } } function unstakeNfts(uint256[] calldata tokenIds) updateReward(msg.sender) external nonReentrant{ require(!paused,"Contract is paused"); require(tokenIds.length > 0, "0 Nfts to Stake"); unchecked { uint256 len = tokenIds.length; for (uint256 i = 0; i < len; i++) { uint256 tokenId = tokenIds[i]; require(tokenIdOwners[tokenId] == msg.sender, "You dont own this ID"); require(IERC721(nft).ownerOf(tokenId) == address(this) , "Nft not available in the contract"); removeFromUserStakedTokens(msg.sender, tokenId); numberTokensStaked[msg.sender]--; totalNftStaked--; delete tokenIdOwners[tokenId]; nft.transferFrom( address(this), msg.sender, tokenId ); } } } function togglePause() public onlyOwner{ paused = !paused; } function removeFromUserStakedTokens(address user, uint256 tokenId) internal { uint256 _numStaked = numberTokensStaked[user]; for (uint256 j = 0; j < _numStaked; ++j) { if (ownerTokenIds[user][j] == tokenId) { uint256 lastIndex = _numStaked - 1; ownerTokenIds[user][j] = ownerTokenIds[user][ lastIndex ]; delete ownerTokenIds[user][lastIndex]; break; } } } }
[{"inputs":[{"internalType":"address","name":"_nftAddress","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"BOOSTERREWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKINGREWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"booster","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"getBoosterIdsbyAddress","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"getNftsIdsbyAddress","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserstakedBoosterIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserstakedNftIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numberBoosterCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numberTokensStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerTokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerTokenIdsBooster","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rewardsPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"val","type":"address"}],"name":"setBoosterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"val","type":"address"}],"name":"setNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"val","type":"address"}],"name":"setRewardTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"set_Booster_Reward_In_Wei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"set_Staking_Reward_In_Wei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeBooster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdOwnersBooster","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBoosterStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNftStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeBooster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"viewRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"amount_in_wei","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600260006101000a81548160ff02191690831515021790555060006003556000600455678ac7230489e80000600855671bc16d674ec80000600d553480156200004e57600080fd5b50604051620045e6380380620045e6833981810160405281019062000074919062000208565b62000094620000886200012560201b60201c565b6200012d60201b60201c565b6001808190555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620002a2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620002028162000288565b92915050565b6000806040838503121562000222576200022162000283565b5b60006200023285828601620001f1565b92505060206200024585828601620001f1565b9150509250929050565b60006200025c8262000263565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b62000293816200024f565b81146200029f57600080fd5b50565b61433480620002b26000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063903adb3611610125578063c374f67a116100ad578063da40ef801161007c578063da40ef8014610610578063f2fde38b14610640578063f5b200ac1461065c578063f7c618c11461068c578063faaec849146106aa57610211565b8063c374f67a1461059c578063c4ae3168146105b8578063c6def076146105c2578063c9bc0a9a146105e057610211565b80639d0f8a3d116100f45780639d0f8a3d146104d2578063a751c49a14610502578063a8249e761461051e578063b132eb321461054e578063b77cf9c61461056c57610211565b8063903adb361461045e5780639a215e521461047c5780639a36485c1461049a5780639a6acf20146104b657610211565b806347ccca02116101a857806377adfbda1161017757806377adfbda146103bc57806377e628e5146103d85780637d075f0414610408578063822c0eab146104245780638da5cb5b1461044057610211565b806347ccca02146103345780634884254a146103525780635bee33c314610382578063715018a6146103b257610211565b80631bfff8ac116101e45780631bfff8ac1461029a57806322f10836146102ca578063372500ab146102fa5780633f02a8d81461030457610211565b8063068dbfb11461021657806306b091f9146102465780630b102d1a14610262578063134928b01461027e575b600080fd5b610230600480360381019061022b9190613750565b6106c8565b60405161023d9190613ba4565b60405180910390f35b610260600480360381019061025b91906137aa565b6109a3565b005b61027c60048036038101906102779190613750565b610ad3565b005b61029860048036038101906102939190613750565b610b93565b005b6102b460048036038101906102af9190613750565b610c53565b6040516102c19190613d5c565b60405180910390f35b6102e460048036038101906102df91906137aa565b610d11565b6040516102f19190613d5c565b60405180910390f35b610302610d36565b005b61031e60048036038101906103199190613750565b6110a1565b60405161032b9190613ba4565b60405180910390f35b61033c6111cb565b6040516103499190613be1565b60405180910390f35b61036c60048036038101906103679190613864565b6111f1565b6040516103799190613b00565b60405180910390f35b61039c600480360381019061039791906137aa565b611224565b6040516103a99190613d5c565b60405180910390f35b6103ba611249565b005b6103d660048036038101906103d191906137ea565b6112d1565b005b6103f260048036038101906103ed9190613864565b61188a565b6040516103ff9190613b00565b60405180910390f35b610422600480360381019061041d91906137ea565b6118bd565b005b61043e600480360381019061043991906137ea565b611d84565b005b61044861224b565b6040516104559190613b00565b60405180910390f35b610466612274565b6040516104739190613d5c565b60405180910390f35b61048461227a565b6040516104919190613d5c565b60405180910390f35b6104b460048036038101906104af91906137ea565b612280565b005b6104d060048036038101906104cb9190613750565b612839565b005b6104ec60048036038101906104e79190613750565b6128f9565b6040516104f99190613ba4565b60405180910390f35b61051c60048036038101906105179190613864565b612a23565b005b61053860048036038101906105339190613750565b612aa9565b6040516105459190613d5c565b60405180910390f35b610556612ac1565b6040516105639190613d5c565b60405180910390f35b61058660048036038101906105819190613750565b612ac7565b6040516105939190613d5c565b60405180910390f35b6105b660048036038101906105b19190613864565b612adf565b005b6105c0612b65565b005b6105ca612c0d565b6040516105d79190613be1565b60405180910390f35b6105fa60048036038101906105f59190613750565b612c33565b6040516106079190613ba4565b60405180910390f35b61062a60048036038101906106259190613750565b612f0e565b6040516106379190613d5c565b60405180910390f35b61065a60048036038101906106559190613750565b612f6f565b005b61067660048036038101906106719190613750565b613067565b6040516106839190613d5c565b60405180910390f35b61069461307f565b6040516106a19190613bc6565b60405180910390f35b6106b26130a5565b6040516106bf9190613d5c565b60405180910390f35b60606000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016107279190613b00565b60206040518083038186803b15801561073f57600080fd5b505afa158015610753573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107779190613891565b905060008167ffffffffffffffff8111156107955761079461403c565b5b6040519080825280602002602001820160405280156107c35781602001602082028036833780820191505090505b509050600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561083157600080fd5b505afa158015610845573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108699190613891565b905060005b81811015610996578673ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016108e89190613d5c565b60206040518083038186803b15801561090057600080fd5b505afa158015610914573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610938919061377d565b73ffffffffffffffffffffffffffffffffffffffff16141561098357808484815181106109685761096761400d565b5b602002602001018181525050828061097f90613f66565b9350505b808061098e90613f66565b91505061086e565b5082945050505050919050565b6109ab6130ab565b73ffffffffffffffffffffffffffffffffffffffff166109c961224b565b73ffffffffffffffffffffffffffffffffffffffff1614610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1690613c5c565b60405180910390fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610a7c929190613b7b565b602060405180830381600087803b158015610a9657600080fd5b505af1158015610aaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace9190613837565b505050565b610adb6130ab565b73ffffffffffffffffffffffffffffffffffffffff16610af961224b565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613c5c565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b9b6130ab565b73ffffffffffffffffffffffffffffffffffffffff16610bb961224b565b73ffffffffffffffffffffffffffffffffffffffff1614610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690613c5c565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600854600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ca39190613e48565b90506000600d54600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cf49190613e48565b905060008183610d049190613dc1565b9050809350505050919050565b600b602052816000526040600020602052806000526040600020600091509150505481565b336000610d42826130b3565b905042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610dd79190613dc1565b9250508190555060026001541415610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90613cfc565b60405180910390fd5b60026001819055506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90613c1c565b60405180910390fd5b80600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f0f9190613b00565b60206040518083038186803b158015610f2757600080fd5b505afa158015610f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5f9190613891565b1015610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790613d1c565b60405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611042929190613b7b565b602060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110949190613837565b5050600180819055505050565b60606000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008167ffffffffffffffff8111156111035761110261403c565b5b6040519080825280602002602001820160405280156111315781602001602082028036833780820191505090505b50905060005b828110156111c057601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020548282815181106111a3576111a261400d565b5b602002602001018181525050806111b990613f66565b9050611137565b508092505050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6010602052816000526040600020602052806000526040600020600091509150505481565b6112516130ab565b73ffffffffffffffffffffffffffffffffffffffff1661126f61224b565b73ffffffffffffffffffffffffffffffffffffffff16146112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90613c5c565b60405180910390fd5b6112cf60006131ef565b565b3360006112dd826130b3565b905042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113729190613dc1565b92505081905550600260015414156113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690613cfc565b60405180910390fd5b6002600181905550600260009054906101000a900460ff1615611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e90613cdc565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b8152600401611474929190613b1b565b60206040518083038186803b15801561148c57600080fd5b505afa1580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c49190613837565b611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613c7c565b60405180910390fd5b60008484905011611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090613d3c565b60405180910390fd5b60008484905090506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b828110156118365760008787838181106115b5576115b461400d565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016116309190613d5c565b60206040518083038186803b15801561164857600080fd5b505afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611680919061377d565b73ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613c9c565b60405180910390fd5b33600e600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020819055508280600101935050600460008154809291906001019190505550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016117f693929190613b44565b600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b50505050508080600101915050611598565b5080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050506001808190555050505050565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3360006118c9826130b3565b905042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461195e9190613dc1565b92505081905550600260015414156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a290613cfc565b60405180910390fd5b6002600181905550600260009054906101000a900460ff1615611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90613cdc565b60405180910390fd5b60008484905011611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090613d3c565b60405180910390fd5b600084849050905060005b81811015611d75576000868683818110611a7157611a7061400d565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff16600e600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290613c3c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611b8d9190613d5c565b60206040518083038186803b158015611ba557600080fd5b505afa158015611bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdd919061377d565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90613cbc565b60405180910390fd5b611c3d33826132b3565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060019003919050555060046000815480929190600190039190505550600e600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401611d3593929190613b44565b600060405180830381600087803b158015611d4f57600080fd5b505af1158015611d63573d6000803e3d6000fd5b50505050508080600101915050611a54565b50506001808190555050505050565b336000611d90826130b3565b905042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e259190613dc1565b9250508190555060026001541415611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990613cfc565b60405180910390fd5b6002600181905550600260009054906101000a900460ff1615611eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec190613cdc565b60405180910390fd5b60008484905011611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0790613d3c565b60405180910390fd5b600084849050905060005b8181101561223c576000868683818110611f3857611f3761400d565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd990613c3c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016120549190613d5c565b60206040518083038186803b15801561206c57600080fd5b505afa158015612080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a4919061377d565b73ffffffffffffffffffffffffffffffffffffffff16146120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f190613cbc565b60405180910390fd5b6121043382613481565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600360008154809291906001900391905055506009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b81526004016121fc93929190613b44565b600060405180830381600087803b15801561221657600080fd5b505af115801561222a573d6000803e3d6000fd5b50505050508080600101915050611f1b565b50506001808190555050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b60045481565b33600061228c826130b3565b905042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123219190613dc1565b925050819055506002600154141561236e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236590613cfc565b60405180910390fd5b6002600181905550600260009054906101000a900460ff16156123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90613cdc565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b8152600401612423929190613b1b565b60206040518083038186803b15801561243b57600080fd5b505afa15801561244f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124739190613837565b6124b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a990613c7c565b60405180910390fd5b600084849050116124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90613d3c565b60405180910390fd5b60008484905090506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b828110156127e55760008787838181106125645761256361400d565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016125df9190613d5c565b60206040518083038186803b1580156125f757600080fd5b505afa15801561260b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262f919061377d565b73ffffffffffffffffffffffffffffffffffffffff1614612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c90613c9c565b60405180910390fd5b336009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020819055508280600101935050600360008154809291906001019190505550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016127a593929190613b44565b600060405180830381600087803b1580156127bf57600080fd5b505af11580156127d3573d6000803e3d6000fd5b50505050508080600101915050612547565b5080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050506001808190555050505050565b6128416130ab565b73ffffffffffffffffffffffffffffffffffffffff1661285f61224b565b73ffffffffffffffffffffffffffffffffffffffff16146128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac90613c5c565b60405180910390fd5b80600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008167ffffffffffffffff81111561295b5761295a61403c565b5b6040519080825280602002602001820160405280156129895781602001602082028036833780820191505090505b50905060005b82811015612a1857600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020548282815181106129fb576129fa61400d565b5b60200260200101818152505080612a1190613f66565b905061298f565b508092505050919050565b612a2b6130ab565b73ffffffffffffffffffffffffffffffffffffffff16612a4961224b565b73ffffffffffffffffffffffffffffffffffffffff1614612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9690613c5c565b60405180910390fd5b8060088190555050565b600f6020528060005260406000206000915090505481565b60085481565b60066020528060005260406000206000915090505481565b612ae76130ab565b73ffffffffffffffffffffffffffffffffffffffff16612b0561224b565b73ffffffffffffffffffffffffffffffffffffffff1614612b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5290613c5c565b60405180910390fd5b80600d8190555050565b612b6d6130ab565b73ffffffffffffffffffffffffffffffffffffffff16612b8b61224b565b73ffffffffffffffffffffffffffffffffffffffff1614612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd890613c5c565b60405180910390fd5b600260009054906101000a900460ff1615600260006101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401612c929190613b00565b60206040518083038186803b158015612caa57600080fd5b505afa158015612cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce29190613891565b905060008167ffffffffffffffff811115612d0057612cff61403c565b5b604051908082528060200260200182016040528015612d2e5781602001602082028036833780820191505090505b509050600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9c57600080fd5b505afa158015612db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd49190613891565b905060005b81811015612f01578673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401612e539190613d5c565b60206040518083038186803b158015612e6b57600080fd5b505afa158015612e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea3919061377d565b73ffffffffffffffffffffffffffffffffffffffff161415612eee5780848481518110612ed357612ed261400d565b5b6020026020010181815250508280612eea90613f66565b9350505b8080612ef990613f66565b915050612dd9565b5082945050505050919050565b600080612f1a836130b3565b9050600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481612f679190613dc1565b915050919050565b612f776130ab565b73ffffffffffffffffffffffffffffffffffffffff16612f9561224b565b73ffffffffffffffffffffffffffffffffffffffff1614612feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe290613c5c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561305b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305290613bfc565b60405180910390fd5b613064816131ef565b50565b600a6020528060005260406000206000915090505481565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600033905090565b600080600854600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131039190613e48565b90506000600d54600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131549190613e48565b9050600081836131649190613dc1565b90506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506131e4620151806131d66131c7844261364f90919063ffffffff16565b8561366590919063ffffffff16565b61367b90919063ffffffff16565b945050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b8181101561347b5782601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054141561346a5760006001836133699190613ea2565b9050601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020600090555061347b565b8061347490613f66565b90506132fa565b50505050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b818110156136495782600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000205414156136385760006001836135379190613ea2565b9050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000206000905550613649565b8061364290613f66565b90506134c8565b50505050565b6000818361365d9190613ea2565b905092915050565b600081836136739190613e48565b905092915050565b600081836136899190613e17565b905092915050565b6000813590506136a0816142b9565b92915050565b6000815190506136b5816142b9565b92915050565b60008083601f8401126136d1576136d0614070565b5b8235905067ffffffffffffffff8111156136ee576136ed61406b565b5b60208301915083602082028301111561370a57613709614075565b5b9250929050565b600081519050613720816142d0565b92915050565b600081359050613735816142e7565b92915050565b60008151905061374a816142e7565b92915050565b6000602082840312156137665761376561407f565b5b600061377484828501613691565b91505092915050565b6000602082840312156137935761379261407f565b5b60006137a1848285016136a6565b91505092915050565b600080604083850312156137c1576137c061407f565b5b60006137cf85828601613691565b92505060206137e085828601613726565b9150509250929050565b600080602083850312156138015761380061407f565b5b600083013567ffffffffffffffff81111561381f5761381e61407a565b5b61382b858286016136bb565b92509250509250929050565b60006020828403121561384d5761384c61407f565b5b600061385b84828501613711565b91505092915050565b60006020828403121561387a5761387961407f565b5b600061388884828501613726565b91505092915050565b6000602082840312156138a7576138a661407f565b5b60006138b58482850161373b565b91505092915050565b60006138ca8383613ae2565b60208301905092915050565b6138df81613ed6565b82525050565b60006138f082613d87565b6138fa8185613d9f565b935061390583613d77565b8060005b8381101561393657815161391d88826138be565b975061392883613d92565b925050600181019050613909565b5085935050505092915050565b61394c81613f1e565b82525050565b61395b81613f30565b82525050565b600061396e602683613db0565b915061397982614084565b604082019050919050565b6000613991600c83613db0565b915061399c826140d3565b602082019050919050565b60006139b4601483613db0565b91506139bf826140fc565b602082019050919050565b60006139d7602083613db0565b91506139e282614125565b602082019050919050565b60006139fa601283613db0565b9150613a058261414e565b602082019050919050565b6000613a1d601e83613db0565b9150613a2882614177565b602082019050919050565b6000613a40602183613db0565b9150613a4b826141a0565b604082019050919050565b6000613a63601283613db0565b9150613a6e826141ef565b602082019050919050565b6000613a86601f83613db0565b9150613a9182614218565b602082019050919050565b6000613aa9602b83613db0565b9150613ab482614241565b604082019050919050565b6000613acc600f83613db0565b9150613ad782614290565b602082019050919050565b613aeb81613f14565b82525050565b613afa81613f14565b82525050565b6000602082019050613b1560008301846138d6565b92915050565b6000604082019050613b3060008301856138d6565b613b3d60208301846138d6565b9392505050565b6000606082019050613b5960008301866138d6565b613b6660208301856138d6565b613b736040830184613af1565b949350505050565b6000604082019050613b9060008301856138d6565b613b9d6020830184613af1565b9392505050565b60006020820190508181036000830152613bbe81846138e5565b905092915050565b6000602082019050613bdb6000830184613943565b92915050565b6000602082019050613bf66000830184613952565b92915050565b60006020820190508181036000830152613c1581613961565b9050919050565b60006020820190508181036000830152613c3581613984565b9050919050565b60006020820190508181036000830152613c55816139a7565b9050919050565b60006020820190508181036000830152613c75816139ca565b9050919050565b60006020820190508181036000830152613c95816139ed565b9050919050565b60006020820190508181036000830152613cb581613a10565b9050919050565b60006020820190508181036000830152613cd581613a33565b9050919050565b60006020820190508181036000830152613cf581613a56565b9050919050565b60006020820190508181036000830152613d1581613a79565b9050919050565b60006020820190508181036000830152613d3581613a9c565b9050919050565b60006020820190508181036000830152613d5581613abf565b9050919050565b6000602082019050613d716000830184613af1565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613dcc82613f14565b9150613dd783613f14565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e0c57613e0b613faf565b5b828201905092915050565b6000613e2282613f14565b9150613e2d83613f14565b925082613e3d57613e3c613fde565b5b828204905092915050565b6000613e5382613f14565b9150613e5e83613f14565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e9757613e96613faf565b5b828202905092915050565b6000613ead82613f14565b9150613eb883613f14565b925082821015613ecb57613eca613faf565b5b828203905092915050565b6000613ee182613ef4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613f2982613f42565b9050919050565b6000613f3b82613f42565b9050919050565b6000613f4d82613f54565b9050919050565b6000613f5f82613ef4565b9050919050565b6000613f7182613f14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fa457613fa3613faf565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5a65726f20526577617264730000000000000000000000000000000000000000600082015250565b7f596f7520646f6e74206f776e2074686973204944000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f417070726f7665204e6674732046697273740000000000000000000000000000600082015250565b7f596f7520617265206e6f74206f776e6572206f662074686973206e66742e0000600082015250565b7f4e6674206e6f7420617661696c61626c6520696e2074686520636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f436f6e747261637420646f65736e6f74206861766520656e6f7567682072657760008201527f61726420546f6b656e732e000000000000000000000000000000000000000000602082015250565b7f30204e66747320746f205374616b650000000000000000000000000000000000600082015250565b6142c281613ed6565b81146142cd57600080fd5b50565b6142d981613ee8565b81146142e457600080fd5b50565b6142f081613f14565b81146142fb57600080fd5b5056fea2646970667358221220954c2aeb9277a5d893b3533e496e60c494abb7bf726fb2dc261b6550e51c41c264736f6c634300080700330000000000000000000000004ce0b9608006533da056170f1efe8eea771e0d19000000000000000000000000dcb71bd9a246230dc7fcb90090709f0fdea90746
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004ce0b9608006533da056170f1efe8eea771e0d19000000000000000000000000dcb71bd9a246230dc7fcb90090709f0fdea90746
-----Decoded View---------------
Arg [0] : _nftAddress (address): 0x4ce0b9608006533da056170f1efe8eea771e0d19
Arg [1] : _rewardToken (address): 0xdcb71bd9a246230dc7fcb90090709f0fdea90746
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004ce0b9608006533da056170f1efe8eea771e0d19
Arg [1] : 000000000000000000000000dcb71bd9a246230dc7fcb90090709f0fdea90746
Deployed ByteCode Sourcemap
32634:10418:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36572:503;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34534:132;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34228:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34323:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34674:333;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33241:68;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35675:394;;;:::i;:::-;;37407:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33053:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33126:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33553:75;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14367:103;;;:::i;:::-;;38732:1014;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33428:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39752:1041;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41391:1011;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13716:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33378:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32871:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37743:981;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34118:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37084:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34010:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33490:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33079:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32967:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34426:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42410:74;;;:::i;:::-;;33344:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36078:488;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35463:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14625:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33181:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32772:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32831:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36572:503;36639:16;36667:11;36681:7;;;;;;;;;;;:17;;;36699:4;36681:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36667:37;;36715:21;36750:3;36739:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36715:39;;36765:18;36800:27;36830:7;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36800:51;;36868:6;36864:180;36879:19;36877:1;:21;36864:180;;;36943:4;36921:26;;:7;;;;;;;;;;;:15;;;36937:1;36921:18;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;;36918:115;;;36985:1;36966:4;36971:10;36966:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;37005:12;;;;;:::i;:::-;;;;36918:115;36899:3;;;;;:::i;:::-;;;;36864:180;;;;37063:4;37056:11;;;;;;36572:503;;;:::o;34534:132::-;13947:12;:10;:12::i;:::-;13936:23;;:7;:5;:7::i;:::-;:23;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34618:11:::1;;;;;;;;;;;:20;;;34639:3;34644:13;34618:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34534:132:::0;;:::o;34228:89::-;13947:12;:10;:12::i;:::-;13936:23;;:7;:5;:7::i;:::-;:23;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34305:3:::1;34291;;:18;;;;;;;;;;;;;;;;;;34228:89:::0;:::o;34323:97::-;13947:12;:10;:12::i;:::-;13936:23;;:7;:5;:7::i;:::-;:23;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34408:3:::1;34390:7;;:22;;;;;;;;;;;;;;;;;;34323:97:::0;:::o;34674:333::-;34735:7;34758:16;34807:13;;34777:18;:27;34796:7;34777:27;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;34758:62;;34835:22;34890:13;;34860:18;:27;34879:7;34860:27;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;34835:68;;34918:19;34951:14;34940:8;:25;;;;:::i;:::-;34918:47;;34988:11;34981:18;;;;;34674:333;;;:::o;33241:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35675:394::-;35712:10;33689:14;33706:19;33717:7;33706:10;:19::i;:::-;33689:36;;33761:15;33736:13;:22;33750:7;33736:22;;;;;;;;;;;;;;;:40;;;;33809:6;33787:9;:18;33797:7;33787:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;32184:1:::1;32330:7;;:19;;32322:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32184:1;32396:7;:18;;;;35756:14:::2;35773:9;:21;35783:10;35773:21;;;;;;;;;;;;;;;;35756:38;;35822:1;35813:6;:10;35805:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;35899:6;35859:11;;;;;;;;;;;:21;;;35889:4;35859:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;35851:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35988:1;35964:9;:21;35974:10;35964:21;;;;;;;;;;;;;;;:25;;;;36002:11;;;;;;;;;;;:20;;;36031:10;36044:6;36002:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35745:324;32140:1:::1;32492:7:::0;:22:::1;;;;33678:157:::0;35675:394;:::o;37407:328::-;37476:16;37504:11;37518:18;:25;37537:5;37518:25;;;;;;;;;;;;;;;;37504:39;;37554:21;37589:3;37578:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37554:39;;37609:9;37604:102;37628:3;37624:1;:7;37604:102;;;37664:20;:27;37685:5;37664:27;;;;;;;;;;;;;;;:30;37692:1;37664:30;;;;;;;;;;;;37654:4;37659:1;37654:7;;;;;;;;:::i;:::-;;;;;;;:40;;;;;37633:3;;;;:::i;:::-;;;37604:102;;;;37723:4;37716:11;;;;37407:328;;;:::o;33053:18::-;;;;;;;;;;;;;:::o;33126:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;33553:75::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14367:103::-;13947:12;:10;:12::i;:::-;13936:23;;:7;:5;:7::i;:::-;:23;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14432:30:::1;14459:1;14432:18;:30::i;:::-;14367:103::o:0;38732:1014::-;38796:10;33689:14;33706:19;33717:7;33706:10;:19::i;:::-;33689:36;;33761:15;33736:13;:22;33750:7;33736:22;;;;;;;;;;;;;;;:40;;;;33809:6;33787:9;:18;33797:7;33787:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;32184:1:::1;32330:7;;:19;;32322:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32184:1;32396:7;:18;;;;38849:6:::2;;;;;;;;;;;38848:7;38840:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;38904:7;;;;;;;;;;;38896:33;;;38930:10;38950:4;38896:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38888:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;39017:1;38999:8;;:15;;:19;38991:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39076:11;39090:8;;:15;;39076:29;;39120:17;39140:18;:30;39159:10;39140:30;;;;;;;;;;;;;;;;39120:50;;39190:9;39185:486;39209:3;39205:1;:7;39185:486;;;39238:15;39256:8;;39265:1;39256:11;;;;;;;:::i;:::-;;;;;;;;39238:29;;39331:10;39294:47;;39302:7;;;;;;;;;;;39294:24;;;39319:7;39294:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;39286:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;39431:10;39399:20;:29;39420:7;39399:29;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;39506:7;39460:20;:32;39481:10;39460:32;;;;;;;;;;;;;;;:43;39493:9;39460:43;;;;;;;;;;;:53;;;;39532:11;;;;;;;39562:18;;:20;;;;;;;;;;;;;39601:7;;;;;;;;;;;:20;;;39622:10;39641:4;39647:7;39601:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;39219:452;39214:3;;;;;;;39185:486;;;;39718:9;39685:18;:30;39704:10;39685:30;;;;;;;;;;;;;;;:42;;;;39051:688;;32140:1:::1;32492:7:::0;:22:::1;;;;33678:157:::0;38732:1014;;;:::o;33428:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;39752:1041::-;39818:10;33689:14;33706:19;33717:7;33706:10;:19::i;:::-;33689:36;;33761:15;33736:13;:22;33750:7;33736:22;;;;;;;;;;;;;;;:40;;;;33809:6;33787:9;:18;33797:7;33787:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;32184:1:::1;32330:7;;:19;;32322:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32184:1;32396:7;:18;;;;39871:6:::2;;;;;;;;;;;39870:7;39862:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;39936:1;39918:8;;:15;;:19;39910:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39995:11;40009:8;;:15;;39995:29;;40046:9;40041:706;40065:3;40061:1;:7;40041:706;;;40093:15;40111:8;;40120:1;40111:11;;;;;;;:::i;:::-;;;;;;;;40093:29;;40181:10;40148:43;;:20;:29;40169:7;40148:29;;;;;;;;;;;;;;;;;;;;;:43;;;40140:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40287:4;40242:50;;40250:7;;;;;;;;;;;40242:24;;;40267:7;40242:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;40234:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40349:48;40377:10;40389:7;40349:27;:48::i;:::-;40432:18;:30;40451:10;40432:30;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;40482:18;;:20;;;;;;;;;;;;;;40527;:29;40548:7;40527:29;;;;;;;;;;;;40520:36;;;;;;;;;;;40577:7;;;;;;;;;;;:20;;;40632:4;40664:10;40701:7;40577:154;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;40075:672;40070:3;;;;;;;40041:706;;;;39970:816;32140:1:::1;32492:7:::0;:22:::1;;;;33678:157:::0;39752:1041;;;:::o;41391:1011::-;41454:10;33689:14;33706:19;33717:7;33706:10;:19::i;:::-;33689:36;;33761:15;33736:13;:22;33750:7;33736:22;;;;;;;;;;;;;;;:40;;;;33809:6;33787:9;:18;33797:7;33787:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;32184:1:::1;32330:7;;:19;;32322:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32184:1;32396:7;:18;;;;41507:6:::2;;;;;;;;;;;41506:7;41498:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;41572:1;41554:8;;:15;;:19;41546:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;41629:11;41643:8;;:15;;41629:29;;41680:9;41675:681;41699:3;41695:1;:7;41675:681;;;41727:15;41745:8;;41754:1;41745:11;;;;;;;:::i;:::-;;;;;;;;41727:29;;41810:10;41784:36;;:13;:22;41798:7;41784:22;;;;;;;;;;;;;;;;;;;;;:36;;;41776:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41912:4;41871:46;;41879:3;;;;;;;;;;;41871:20;;;41892:7;41871:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;41863:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;41974:47;42001:10;42013:7;41974:26;:47::i;:::-;42056:18;:30;42075:10;42056:30;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;42106:14;;:16;;;;;;;;;;;;;;42147:13;:22;42161:7;42147:22;;;;;;;;;;;;42140:29;;;;;;;;;;;42190:3;;;;;;;;;;;:16;;;42241:4;42273:10;42310:7;42190:150;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;41709:647;41704:3;;;;;;;41675:681;;;;41604:791;32140:1:::1;32492:7:::0;:22:::1;;;;33678:157:::0;41391:1011;;;:::o;13716:87::-;13762:7;13789:6;;;;;;;;;;;13782:13;;13716:87;:::o;33378:39::-;;;;:::o;32871:37::-;;;;:::o;37743:981::-;37804:10;33689:14;33706:19;33717:7;33706:10;:19::i;:::-;33689:36;;33761:15;33736:13;:22;33750:7;33736:22;;;;;;;;;;;;;;;:40;;;;33809:6;33787:9;:18;33797:7;33787:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;32184:1:::1;32330:7;;:19;;32322:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32184:1;32396:7;:18;;;;37858:6:::2;;;;;;;;;;;37857:7;37849:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;37913:3;;;;;;;;;;;37905:29;;;37935:10;37955:4;37905:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37897:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;38022:1;38004:8;;:15;;:19;37996:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;38081:11;38095:8;;:15;;38081:29;;38125:17;38145:18;:30;38164:10;38145:30;;;;;;;;;;;;;;;;38125:50;;38195:9;38190:459;38214:3;38210:1;:7;38190:459;;;38243:15;38261:8;;38270:1;38261:11;;;;;;;:::i;:::-;;;;;;;;38243:29;;38332:10;38299:43;;38307:3;;;;;;;;;;;38299:20;;;38320:7;38299:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;38291:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38424:10;38399:13;:22;38413:7;38399:22;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;38492:7;38453:13;:25;38467:10;38453:25;;;;;;;;;;;;;;;:36;38479:9;38453:36;;;;;;;;;;;:46;;;;38518:11;;;;;;;38548:14;;:16;;;;;;;;;;;;;38583:3;;;;;;;;;;;:16;;;38600:10;38619:4;38625:7;38583:50;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;38224:425;38219:3;;;;;;;38190:459;;;;38696:9;38663:18;:30;38682:10;38663:30;;;;;;;;;;;;;;;:42;;;;38056:661;;32140:1:::1;32492:7:::0;:22:::1;;;;33678:157:::0;37743:981;;;:::o;34118:104::-;13947:12;:10;:12::i;:::-;13936:23;;:7;:5;:7::i;:::-;:23;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34210:3:::1;34189:11;;:25;;;;;;;;;;;;;;;;;;34118:104:::0;:::o;37084:317::-;37149:16;37177:11;37191:18;:25;37210:5;37191:25;;;;;;;;;;;;;;;;37177:39;;37227:21;37262:3;37251:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37227:39;;37282:9;37277:95;37301:3;37297:1;:7;37277:95;;;37337:13;:20;37351:5;37337:20;;;;;;;;;;;;;;;:23;37358:1;37337:23;;;;;;;;;;;;37327:4;37332:1;37327:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;37306:3;;;;:::i;:::-;;;37277:95;;;;37389:4;37382:11;;;;37084:317;;;:::o;34010:102::-;13947:12;:10;:12::i;:::-;13936:23;;:7;:5;:7::i;:::-;:23;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:3:::1;34085:13;:19;;;;34010:102:::0;:::o;33490:53::-;;;;;;;;;;;;;;;;;:::o;33079:39::-;;;;:::o;32967:48::-;;;;;;;;;;;;;;;;;:::o;34426:102::-;13947:12;:10;:12::i;:::-;13936:23;;:7;:5;:7::i;:::-;:23;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34517:3:::1;34501:13;:19;;;;34426:102:::0;:::o;42410:74::-;13947:12;:10;:12::i;:::-;13936:23;;:7;:5;:7::i;:::-;:23;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42470:6:::1;;;;;;;;;;;42469:7;42460:6;;:16;;;;;;;;;;;;;;;;;;42410:74::o:0;33344:22::-;;;;;;;;;;;;;:::o;36078:488::-;36142:16;36170:11;36184:3;;;;;;;;;;;:13;;;36198:4;36184:19;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36170:33;;36214:21;36249:3;36238:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36214:39;;36264:18;36299:27;36329:3;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36299:47;;36363:6;36359:176;36374:19;36372:1;:21;36359:176;;;36434:4;36416:22;;:3;;;;;;;;;;;:11;;;36428:1;36416:14;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:22;;;36413:111;;;36476:1;36457:4;36462:10;36457:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;36496:12;;;;;:::i;:::-;;;;36413:111;36394:3;;;;;:::i;:::-;;;;36359:176;;;;36554:4;36547:11;;;;;;36078:488;;;:::o;35463:204::-;35521:7;35564:21;35588:19;35599:7;35588:10;:19::i;:::-;35564:43;;35641:9;:18;35651:7;35641:18;;;;;;;;;;;;;;;;35625:13;:34;;;;:::i;:::-;35618:41;;;35463:204;;;:::o;14625:201::-;13947:12;:10;:12::i;:::-;13936:23;;:7;:5;:7::i;:::-;:23;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14734:1:::1;14714:22;;:8;:22;;;;14706:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14790:28;14809:8;14790:18;:28::i;:::-;14625:201:::0;:::o;33181:53::-;;;;;;;;;;;;;;;;;:::o;32772:25::-;;;;;;;;;;;;;:::o;32831:33::-;;;;:::o;12440:98::-;12493:7;12520:10;12513:17;;12440:98;:::o;35013:442::-;35072:7;35096:16;35145:13;;35115:18;:27;35134:7;35115:27;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;35096:62;;35173:22;35228:13;;35198:18;:27;35217:7;35198:27;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;35173:68;;35256:19;35289:14;35278:8;:25;;;;:::i;:::-;35256:47;;35319:20;35342:13;:22;35356:7;35342:22;;;;;;;;;;;;;;;;35319:45;;35386:61;35441:5;35386:50;35402:33;35422:12;35402:15;:19;;:33;;;;:::i;:::-;35386:11;:15;;:50;;;;:::i;:::-;:54;;:61;;;;:::i;:::-;35379:68;;;;;;35013:442;;;:::o;14986:191::-;15060:16;15079:6;;;;;;;;;;;15060:25;;15105:8;15096:6;;:17;;;;;;;;;;;;;;;;;;15160:8;15129:40;;15150:8;15129:40;;;;;;;;;;;;15049:128;14986:191;:::o;40801:584::-;40889:18;40910;:24;40929:4;40910:24;;;;;;;;;;;;;;;;40889:45;;40950:9;40945:433;40969:10;40965:1;:14;40945:433;;;41042:7;41009:20;:26;41030:4;41009:26;;;;;;;;;;;;;;;:29;41036:1;41009:29;;;;;;;;;;;;:40;41005:358;;;41074:17;41107:1;41094:10;:14;;;;:::i;:::-;41074:34;;41163:20;:26;41184:4;41163:26;;;;;;;;;;;;;;;:85;41216:9;41163:85;;;;;;;;;;;;41131:20;:26;41152:4;41131:26;;;;;;;;;;;;;;;:29;41158:1;41131:29;;;;;;;;;;;:117;;;;41278:20;:26;41299:4;41278:26;;;;;;;;;;;;;;;:37;41305:9;41278:37;;;;;;;;;;;41271:44;;;41338:5;;;41005:358;40981:3;;;;:::i;:::-;;;40945:433;;;;40878:507;40801:584;;:::o;42492:555::-;42579:18;42600;:24;42619:4;42600:24;;;;;;;;;;;;;;;;42579:45;;42640:9;42635:405;42659:10;42655:1;:14;42635:405;;;42725:7;42699:13;:19;42713:4;42699:19;;;;;;;;;;;;;;;:22;42719:1;42699:22;;;;;;;;;;;;:33;42695:330;;;42757:17;42790:1;42777:10;:14;;;;:::i;:::-;42757:34;;42839:13;:19;42853:4;42839:19;;;;;;;;;;;;;;;:78;42885:9;42839:78;;;;;;;;;;;;42814:13;:19;42828:4;42814:19;;;;;;;;;;;;;;;:22;42834:1;42814:22;;;;;;;;;;;:103;;;;42947:13;:19;42961:4;42947:19;;;;;;;;;;;;;;;:30;42967:9;42947:30;;;;;;;;;;;42940:37;;;43000:5;;;42695:330;42671:3;;;;:::i;:::-;;;42635:405;;;;42568:479;42492:555;;:::o;8089:98::-;8147:7;8178:1;8174;:5;;;;:::i;:::-;8167:12;;8089:98;;;;:::o;8446:::-;8504:7;8535:1;8531;:5;;;;:::i;:::-;8524:12;;8446:98;;;;:::o;8845:::-;8903:7;8934:1;8930;:5;;;;:::i;:::-;8923:12;;8845:98;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;318:568::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:122;;459:79;;:::i;:::-;418:122;572:6;559:20;549:30;;602:18;594:6;591:30;588:117;;;624:79;;:::i;:::-;588:117;738:4;730:6;726:17;714:29;;792:3;784:4;776:6;772:17;762:8;758:32;755:41;752:128;;;799:79;;:::i;:::-;752:128;318:568;;;;;:::o;892:137::-;946:5;977:6;971:13;962:22;;993:30;1017:5;993:30;:::i;:::-;892:137;;;;:::o;1035:139::-;1081:5;1119:6;1106:20;1097:29;;1135:33;1162:5;1135:33;:::i;:::-;1035:139;;;;:::o;1180:143::-;1237:5;1268:6;1262:13;1253:22;;1284:33;1311:5;1284:33;:::i;:::-;1180:143;;;;:::o;1329:329::-;1388:6;1437:2;1425:9;1416:7;1412:23;1408:32;1405:119;;;1443:79;;:::i;:::-;1405:119;1563:1;1588:53;1633:7;1624:6;1613:9;1609:22;1588:53;:::i;:::-;1578:63;;1534:117;1329:329;;;;:::o;1664:351::-;1734:6;1783:2;1771:9;1762:7;1758:23;1754:32;1751:119;;;1789:79;;:::i;:::-;1751:119;1909:1;1934:64;1990:7;1981:6;1970:9;1966:22;1934:64;:::i;:::-;1924:74;;1880:128;1664:351;;;;:::o;2021:474::-;2089:6;2097;2146:2;2134:9;2125:7;2121:23;2117:32;2114:119;;;2152:79;;:::i;:::-;2114:119;2272:1;2297:53;2342:7;2333:6;2322:9;2318:22;2297:53;:::i;:::-;2287:63;;2243:117;2399:2;2425:53;2470:7;2461:6;2450:9;2446:22;2425:53;:::i;:::-;2415:63;;2370:118;2021:474;;;;;:::o;2501:559::-;2587:6;2595;2644:2;2632:9;2623:7;2619:23;2615:32;2612:119;;;2650:79;;:::i;:::-;2612:119;2798:1;2787:9;2783:17;2770:31;2828:18;2820:6;2817:30;2814:117;;;2850:79;;:::i;:::-;2814:117;2963:80;3035:7;3026:6;3015:9;3011:22;2963:80;:::i;:::-;2945:98;;;;2741:312;2501:559;;;;;:::o;3066:345::-;3133:6;3182:2;3170:9;3161:7;3157:23;3153:32;3150:119;;;3188:79;;:::i;:::-;3150:119;3308:1;3333:61;3386:7;3377:6;3366:9;3362:22;3333:61;:::i;:::-;3323:71;;3279:125;3066:345;;;;:::o;3417:329::-;3476:6;3525:2;3513:9;3504:7;3500:23;3496:32;3493:119;;;3531:79;;:::i;:::-;3493:119;3651:1;3676:53;3721:7;3712:6;3701:9;3697:22;3676:53;:::i;:::-;3666:63;;3622:117;3417:329;;;;:::o;3752:351::-;3822:6;3871:2;3859:9;3850:7;3846:23;3842:32;3839:119;;;3877:79;;:::i;:::-;3839:119;3997:1;4022:64;4078:7;4069:6;4058:9;4054:22;4022:64;:::i;:::-;4012:74;;3968:128;3752:351;;;;:::o;4109:179::-;4178:10;4199:46;4241:3;4233:6;4199:46;:::i;:::-;4277:4;4272:3;4268:14;4254:28;;4109:179;;;;:::o;4294:118::-;4381:24;4399:5;4381:24;:::i;:::-;4376:3;4369:37;4294:118;;:::o;4448:732::-;4567:3;4596:54;4644:5;4596:54;:::i;:::-;4666:86;4745:6;4740:3;4666:86;:::i;:::-;4659:93;;4776:56;4826:5;4776:56;:::i;:::-;4855:7;4886:1;4871:284;4896:6;4893:1;4890:13;4871:284;;;4972:6;4966:13;4999:63;5058:3;5043:13;4999:63;:::i;:::-;4992:70;;5085:60;5138:6;5085:60;:::i;:::-;5075:70;;4931:224;4918:1;4915;4911:9;4906:14;;4871:284;;;4875:14;5171:3;5164:10;;4572:608;;;4448:732;;;;:::o;5186:159::-;5287:51;5332:5;5287:51;:::i;:::-;5282:3;5275:64;5186:159;;:::o;5351:161::-;5453:52;5499:5;5453:52;:::i;:::-;5448:3;5441:65;5351:161;;:::o;5518:366::-;5660:3;5681:67;5745:2;5740:3;5681:67;:::i;:::-;5674:74;;5757:93;5846:3;5757:93;:::i;:::-;5875:2;5870:3;5866:12;5859:19;;5518:366;;;:::o;5890:::-;6032:3;6053:67;6117:2;6112:3;6053:67;:::i;:::-;6046:74;;6129:93;6218:3;6129:93;:::i;:::-;6247:2;6242:3;6238:12;6231:19;;5890:366;;;:::o;6262:::-;6404:3;6425:67;6489:2;6484:3;6425:67;:::i;:::-;6418:74;;6501:93;6590:3;6501:93;:::i;:::-;6619:2;6614:3;6610:12;6603:19;;6262:366;;;:::o;6634:::-;6776:3;6797:67;6861:2;6856:3;6797:67;:::i;:::-;6790:74;;6873:93;6962:3;6873:93;:::i;:::-;6991:2;6986:3;6982:12;6975:19;;6634:366;;;:::o;7006:::-;7148:3;7169:67;7233:2;7228:3;7169:67;:::i;:::-;7162:74;;7245:93;7334:3;7245:93;:::i;:::-;7363:2;7358:3;7354:12;7347:19;;7006:366;;;:::o;7378:::-;7520:3;7541:67;7605:2;7600:3;7541:67;:::i;:::-;7534:74;;7617:93;7706:3;7617:93;:::i;:::-;7735:2;7730:3;7726:12;7719:19;;7378:366;;;:::o;7750:::-;7892:3;7913:67;7977:2;7972:3;7913:67;:::i;:::-;7906:74;;7989:93;8078:3;7989:93;:::i;:::-;8107:2;8102:3;8098:12;8091:19;;7750:366;;;:::o;8122:::-;8264:3;8285:67;8349:2;8344:3;8285:67;:::i;:::-;8278:74;;8361:93;8450:3;8361:93;:::i;:::-;8479:2;8474:3;8470:12;8463:19;;8122:366;;;:::o;8494:::-;8636:3;8657:67;8721:2;8716:3;8657:67;:::i;:::-;8650:74;;8733:93;8822:3;8733:93;:::i;:::-;8851:2;8846:3;8842:12;8835:19;;8494:366;;;:::o;8866:::-;9008:3;9029:67;9093:2;9088:3;9029:67;:::i;:::-;9022:74;;9105:93;9194:3;9105:93;:::i;:::-;9223:2;9218:3;9214:12;9207:19;;8866:366;;;:::o;9238:::-;9380:3;9401:67;9465:2;9460:3;9401:67;:::i;:::-;9394:74;;9477:93;9566:3;9477:93;:::i;:::-;9595:2;9590:3;9586:12;9579:19;;9238:366;;;:::o;9610:108::-;9687:24;9705:5;9687:24;:::i;:::-;9682:3;9675:37;9610:108;;:::o;9724:118::-;9811:24;9829:5;9811:24;:::i;:::-;9806:3;9799:37;9724:118;;:::o;9848:222::-;9941:4;9979:2;9968:9;9964:18;9956:26;;9992:71;10060:1;10049:9;10045:17;10036:6;9992:71;:::i;:::-;9848:222;;;;:::o;10076:332::-;10197:4;10235:2;10224:9;10220:18;10212:26;;10248:71;10316:1;10305:9;10301:17;10292:6;10248:71;:::i;:::-;10329:72;10397:2;10386:9;10382:18;10373:6;10329:72;:::i;:::-;10076:332;;;;;:::o;10414:442::-;10563:4;10601:2;10590:9;10586:18;10578:26;;10614:71;10682:1;10671:9;10667:17;10658:6;10614:71;:::i;:::-;10695:72;10763:2;10752:9;10748:18;10739:6;10695:72;:::i;:::-;10777;10845:2;10834:9;10830:18;10821:6;10777:72;:::i;:::-;10414:442;;;;;;:::o;10862:332::-;10983:4;11021:2;11010:9;11006:18;10998:26;;11034:71;11102:1;11091:9;11087:17;11078:6;11034:71;:::i;:::-;11115:72;11183:2;11172:9;11168:18;11159:6;11115:72;:::i;:::-;10862:332;;;;;:::o;11200:373::-;11343:4;11381:2;11370:9;11366:18;11358:26;;11430:9;11424:4;11420:20;11416:1;11405:9;11401:17;11394:47;11458:108;11561:4;11552:6;11458:108;:::i;:::-;11450:116;;11200:373;;;;:::o;11579:250::-;11686:4;11724:2;11713:9;11709:18;11701:26;;11737:85;11819:1;11808:9;11804:17;11795:6;11737:85;:::i;:::-;11579:250;;;;:::o;11835:252::-;11943:4;11981:2;11970:9;11966:18;11958:26;;11994:86;12077:1;12066:9;12062:17;12053:6;11994:86;:::i;:::-;11835:252;;;;:::o;12093:419::-;12259:4;12297:2;12286:9;12282:18;12274:26;;12346:9;12340:4;12336:20;12332:1;12321:9;12317:17;12310:47;12374:131;12500:4;12374:131;:::i;:::-;12366:139;;12093:419;;;:::o;12518:::-;12684:4;12722:2;12711:9;12707:18;12699:26;;12771:9;12765:4;12761:20;12757:1;12746:9;12742:17;12735:47;12799:131;12925:4;12799:131;:::i;:::-;12791:139;;12518:419;;;:::o;12943:::-;13109:4;13147:2;13136:9;13132:18;13124:26;;13196:9;13190:4;13186:20;13182:1;13171:9;13167:17;13160:47;13224:131;13350:4;13224:131;:::i;:::-;13216:139;;12943:419;;;:::o;13368:::-;13534:4;13572:2;13561:9;13557:18;13549:26;;13621:9;13615:4;13611:20;13607:1;13596:9;13592:17;13585:47;13649:131;13775:4;13649:131;:::i;:::-;13641:139;;13368:419;;;:::o;13793:::-;13959:4;13997:2;13986:9;13982:18;13974:26;;14046:9;14040:4;14036:20;14032:1;14021:9;14017:17;14010:47;14074:131;14200:4;14074:131;:::i;:::-;14066:139;;13793:419;;;:::o;14218:::-;14384:4;14422:2;14411:9;14407:18;14399:26;;14471:9;14465:4;14461:20;14457:1;14446:9;14442:17;14435:47;14499:131;14625:4;14499:131;:::i;:::-;14491:139;;14218:419;;;:::o;14643:::-;14809:4;14847:2;14836:9;14832:18;14824:26;;14896:9;14890:4;14886:20;14882:1;14871:9;14867:17;14860:47;14924:131;15050:4;14924:131;:::i;:::-;14916:139;;14643:419;;;:::o;15068:::-;15234:4;15272:2;15261:9;15257:18;15249:26;;15321:9;15315:4;15311:20;15307:1;15296:9;15292:17;15285:47;15349:131;15475:4;15349:131;:::i;:::-;15341:139;;15068:419;;;:::o;15493:::-;15659:4;15697:2;15686:9;15682:18;15674:26;;15746:9;15740:4;15736:20;15732:1;15721:9;15717:17;15710:47;15774:131;15900:4;15774:131;:::i;:::-;15766:139;;15493:419;;;:::o;15918:::-;16084:4;16122:2;16111:9;16107:18;16099:26;;16171:9;16165:4;16161:20;16157:1;16146:9;16142:17;16135:47;16199:131;16325:4;16199:131;:::i;:::-;16191:139;;15918:419;;;:::o;16343:::-;16509:4;16547:2;16536:9;16532:18;16524:26;;16596:9;16590:4;16586:20;16582:1;16571:9;16567:17;16560:47;16624:131;16750:4;16624:131;:::i;:::-;16616:139;;16343:419;;;:::o;16768:222::-;16861:4;16899:2;16888:9;16884:18;16876:26;;16912:71;16980:1;16969:9;16965:17;16956:6;16912:71;:::i;:::-;16768:222;;;;:::o;17077:132::-;17144:4;17167:3;17159:11;;17197:4;17192:3;17188:14;17180:22;;17077:132;;;:::o;17215:114::-;17282:6;17316:5;17310:12;17300:22;;17215:114;;;:::o;17335:113::-;17405:4;17437;17432:3;17428:14;17420:22;;17335:113;;;:::o;17454:184::-;17553:11;17587:6;17582:3;17575:19;17627:4;17622:3;17618:14;17603:29;;17454:184;;;;:::o;17644:169::-;17728:11;17762:6;17757:3;17750:19;17802:4;17797:3;17793:14;17778:29;;17644:169;;;;:::o;17819:305::-;17859:3;17878:20;17896:1;17878:20;:::i;:::-;17873:25;;17912:20;17930:1;17912:20;:::i;:::-;17907:25;;18066:1;17998:66;17994:74;17991:1;17988:81;17985:107;;;18072:18;;:::i;:::-;17985:107;18116:1;18113;18109:9;18102:16;;17819:305;;;;:::o;18130:185::-;18170:1;18187:20;18205:1;18187:20;:::i;:::-;18182:25;;18221:20;18239:1;18221:20;:::i;:::-;18216:25;;18260:1;18250:35;;18265:18;;:::i;:::-;18250:35;18307:1;18304;18300:9;18295:14;;18130:185;;;;:::o;18321:348::-;18361:7;18384:20;18402:1;18384:20;:::i;:::-;18379:25;;18418:20;18436:1;18418:20;:::i;:::-;18413:25;;18606:1;18538:66;18534:74;18531:1;18528:81;18523:1;18516:9;18509:17;18505:105;18502:131;;;18613:18;;:::i;:::-;18502:131;18661:1;18658;18654:9;18643:20;;18321:348;;;;:::o;18675:191::-;18715:4;18735:20;18753:1;18735:20;:::i;:::-;18730:25;;18769:20;18787:1;18769:20;:::i;:::-;18764:25;;18808:1;18805;18802:8;18799:34;;;18813:18;;:::i;:::-;18799:34;18858:1;18855;18851:9;18843:17;;18675:191;;;;:::o;18872:96::-;18909:7;18938:24;18956:5;18938:24;:::i;:::-;18927:35;;18872:96;;;:::o;18974:90::-;19008:7;19051:5;19044:13;19037:21;19026:32;;18974:90;;;:::o;19070:126::-;19107:7;19147:42;19140:5;19136:54;19125:65;;19070:126;;;:::o;19202:77::-;19239:7;19268:5;19257:16;;19202:77;;;:::o;19285:140::-;19349:9;19382:37;19413:5;19382:37;:::i;:::-;19369:50;;19285:140;;;:::o;19431:141::-;19496:9;19529:37;19560:5;19529:37;:::i;:::-;19516:50;;19431:141;;;:::o;19578:126::-;19628:9;19661:37;19692:5;19661:37;:::i;:::-;19648:50;;19578:126;;;:::o;19710:113::-;19760:9;19793:24;19811:5;19793:24;:::i;:::-;19780:37;;19710:113;;;:::o;19829:233::-;19868:3;19891:24;19909:5;19891:24;:::i;:::-;19882:33;;19937:66;19930:5;19927:77;19924:103;;;20007:18;;:::i;:::-;19924:103;20054:1;20047:5;20043:13;20036:20;;19829:233;;;:::o;20068:180::-;20116:77;20113:1;20106:88;20213:4;20210:1;20203:15;20237:4;20234:1;20227:15;20254:180;20302:77;20299:1;20292:88;20399:4;20396:1;20389:15;20423:4;20420:1;20413:15;20440:180;20488:77;20485:1;20478:88;20585:4;20582:1;20575:15;20609:4;20606:1;20599:15;20626:180;20674:77;20671:1;20664:88;20771:4;20768:1;20761:15;20795:4;20792:1;20785:15;20812:117;20921:1;20918;20911:12;20935:117;21044:1;21041;21034:12;21058:117;21167:1;21164;21157:12;21181:117;21290:1;21287;21280:12;21304:117;21413:1;21410;21403:12;21427:225;21567:34;21563:1;21555:6;21551:14;21544:58;21636:8;21631:2;21623:6;21619:15;21612:33;21427:225;:::o;21658:162::-;21798:14;21794:1;21786:6;21782:14;21775:38;21658:162;:::o;21826:170::-;21966:22;21962:1;21954:6;21950:14;21943:46;21826:170;:::o;22002:182::-;22142:34;22138:1;22130:6;22126:14;22119:58;22002:182;:::o;22190:168::-;22330:20;22326:1;22318:6;22314:14;22307:44;22190:168;:::o;22364:180::-;22504:32;22500:1;22492:6;22488:14;22481:56;22364:180;:::o;22550:220::-;22690:34;22686:1;22678:6;22674:14;22667:58;22759:3;22754:2;22746:6;22742:15;22735:28;22550:220;:::o;22776:168::-;22916:20;22912:1;22904:6;22900:14;22893:44;22776:168;:::o;22950:181::-;23090:33;23086:1;23078:6;23074:14;23067:57;22950:181;:::o;23137:230::-;23277:34;23273:1;23265:6;23261:14;23254:58;23346:13;23341:2;23333:6;23329:15;23322:38;23137:230;:::o;23373:165::-;23513:17;23509:1;23501:6;23497:14;23490:41;23373:165;:::o;23544:122::-;23617:24;23635:5;23617:24;:::i;:::-;23610:5;23607:35;23597:63;;23656:1;23653;23646:12;23597:63;23544:122;:::o;23672:116::-;23742:21;23757:5;23742:21;:::i;:::-;23735:5;23732:32;23722:60;;23778:1;23775;23768:12;23722:60;23672:116;:::o;23794:122::-;23867:24;23885:5;23867:24;:::i;:::-;23860:5;23857:35;23847:63;;23906:1;23903;23896:12;23847:63;23794:122;:::o
Swarm Source
ipfs://954c2aeb9277a5d893b3533e496e60c494abb7bf726fb2dc261b6550e51c41c2
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.