Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 45 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 19261750 | 156 days ago | IN | 0 ETH | 0.00086585 | ||||
0xaf7b9790 | 19241156 | 159 days ago | IN | 0 ETH | 0.00102279 | ||||
0xaf7b9790 | 19241140 | 159 days ago | IN | 0 ETH | 0.00092452 | ||||
Unstake | 17690914 | 376 days ago | IN | 0 ETH | 0.00141072 | ||||
Claim | 17690901 | 376 days ago | IN | 0 ETH | 0.00173392 | ||||
Claim | 16810569 | 500 days ago | IN | 0 ETH | 0.00081365 | ||||
Unstake | 16810398 | 500 days ago | IN | 0 ETH | 0.00248588 | ||||
Unstake | 16412824 | 556 days ago | IN | 0 ETH | 0.00227867 | ||||
Claim | 16412819 | 556 days ago | IN | 0 ETH | 0.00111011 | ||||
Re Invest | 16361672 | 563 days ago | IN | 0 ETH | 0.00070417 | ||||
Re Invest | 16105556 | 599 days ago | IN | 0 ETH | 0.00058991 | ||||
Re Invest | 16013313 | 612 days ago | IN | 0 ETH | 0.00073098 | ||||
Re Invest | 16008018 | 613 days ago | IN | 0 ETH | 0.00061525 | ||||
Re Invest | 15954901 | 620 days ago | IN | 0 ETH | 0.00078504 | ||||
Unstake | 15843953 | 636 days ago | IN | 0 ETH | 0.00150429 | ||||
Claim | 15843952 | 636 days ago | IN | 0 ETH | 0.00104804 | ||||
Re Invest | 15807864 | 641 days ago | IN | 0 ETH | 0.00068381 | ||||
Re Invest | 15695111 | 656 days ago | IN | 0 ETH | 0.00034364 | ||||
Re Invest | 15657344 | 662 days ago | IN | 0 ETH | 0.00028948 | ||||
Re Invest | 15562686 | 675 days ago | IN | 0 ETH | 0.00026376 | ||||
Claim | 15558490 | 676 days ago | IN | 0 ETH | 0.00049873 | ||||
Re Invest | 15525347 | 680 days ago | IN | 0 ETH | 0.00031991 | ||||
Re Invest | 15508856 | 683 days ago | IN | 0 ETH | 0.00050048 | ||||
Re Invest | 15386524 | 703 days ago | IN | 0 ETH | 0.00061072 | ||||
Re Invest | 15363257 | 707 days ago | IN | 0 ETH | 0.00026342 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ConstantReturnStaking
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-28 */ // SPDX-License-Identifier: BSD-3-Clause pragma solidity 0.6.11; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } interface Token { function transferFrom(address, address, uint) external returns (bool); function transfer(address, uint) external returns (bool); } interface LegacyToken { function transfer(address, uint) external; } contract ConstantReturnStaking is Ownable { using Address for address; using SafeMath for uint; using EnumerableSet for EnumerableSet.AddressSet; event RewardsTransferred(address indexed holder, uint amount); event ReferralFeeTransferred(address indexed referrer, uint amount); event Reinvest(address indexed holder, uint amount); // ============================= CONTRACT VARIABLES ============================== // stake token contract address address public constant TRUSTED_TOKEN_ADDRESS = 0xBD100d061E120b2c67A24453CF6368E63f1Be056; // earnings reward rate uint public constant REWARD_RATE_X_100 = 4500; uint public constant REWARD_INTERVAL = 365 days; // staking fee uint public constant STAKING_FEE_RATE_X_100 = 0; // unstaking fee uint public constant UNSTAKING_FEE_RATE_X_100 = 25; // this % of earned rewards go to referrer uint public constant REFERRAL_FEE_RATE_X_100 = 500; // unstaking possible after 72 hours uint public constant LOCKUP_TIME = 90 days; uint public constant ADMIN_CAN_CLAIM_AFTER = 395 days; // ========================= END CONTRACT VARIABLES ============================== uint public totalClaimedRewards = 0; uint public totalClaimedReferralFee = 0; uint public immutable contractStartTime; // Contracts are not allowed to deposit, claim or withdraw modifier noContractsAllowed() { require(!(address(msg.sender).isContract()) && tx.origin == msg.sender, "No Contracts Allowed!"); _; } EnumerableSet.AddressSet private holders; mapping (address => uint) public depositedTokens; mapping (address => uint) public stakingTime; mapping (address => uint) public lastClaimedTime; mapping (address => uint) public totalEarnedTokens; mapping (address => uint) public rewardsPendingClaim; mapping (address => address) public referrals; mapping (address => uint) public totalReferralFeeEarned; mapping (address => EnumerableSet.AddressSet) private activeReferredAddressesOfUser; mapping (address => EnumerableSet.AddressSet) private totalReferredAddressesOfUser; constructor() public { contractStartTime = now; } function updateAccount(address account) private { uint pendingDivs = getPendingDivs(account); if (pendingDivs > 0) { uint referralFee = pendingDivs.mul(REFERRAL_FEE_RATE_X_100).div(100e2); uint pendingDivsAfterFee = pendingDivs.sub(referralFee); bool success = transferReferralFeeIfPossible(referrals[account], referralFee); uint amount = pendingDivs; if (success) { amount = pendingDivsAfterFee; } rewardsPendingClaim[account] = rewardsPendingClaim[account].add(amount); totalEarnedTokens[account] = totalEarnedTokens[account].add(amount); totalClaimedRewards = totalClaimedRewards.add(amount); } lastClaimedTime[account] = now; } function transferReferralFeeIfPossible(address account, uint amount) private returns (bool) { if (account != address(0) && amount > 0) { totalReferralFeeEarned[account] = totalReferralFeeEarned[account].add(amount); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(account, amount), "Could not transfer referral fee!"); totalClaimedReferralFee = totalClaimedReferralFee.add(amount); emit ReferralFeeTransferred(account, amount); return true; } return false; } function getPendingDivs(address _holder) public view returns (uint) { if (!holders.contains(_holder)) return 0; if (depositedTokens[_holder] == 0) return 0; uint timeDiff; uint stakingEndTime = contractStartTime.add(REWARD_INTERVAL); uint _now = now; if (_now > stakingEndTime) { _now = stakingEndTime; } if (lastClaimedTime[_holder] >= _now) { timeDiff = 0; } else { timeDiff = _now.sub(lastClaimedTime[_holder]); } uint stakedAmount = depositedTokens[_holder]; uint pendingDivs = stakedAmount .mul(REWARD_RATE_X_100) .mul(timeDiff) .div(REWARD_INTERVAL) .div(1e4); return pendingDivs; } function getTotalPendingDivs(address _holder) external view returns (uint) { uint pending = getPendingDivs(_holder); uint awaitingClaim = rewardsPendingClaim[_holder]; return pending.add(awaitingClaim); } function getNumberOfHolders() external view returns (uint) { return holders.length(); } function getNumberOfReferredStakers(address referrer) external view returns (uint _activeStakers, uint _totalStakers) { _activeStakers = activeReferredAddressesOfUser[referrer].length(); _totalStakers = totalReferredAddressesOfUser[referrer].length(); } function getReferredStaker(address account, uint i) external view returns (address _staker, uint _totalEarned) { _staker = totalReferredAddressesOfUser[account].at(i); _totalEarned = totalEarnedTokens[_staker]; } function getActiveReferredStaker(address account, uint i) external view returns (address _staker, uint _totalEarned) { _staker = activeReferredAddressesOfUser[account].at(i); _totalEarned = totalEarnedTokens[_staker]; } function stake(uint amountToStake, address referrer) external noContractsAllowed { require(amountToStake > 0, "Cannot deposit 0 Tokens"); require(Token(TRUSTED_TOKEN_ADDRESS).transferFrom(msg.sender, address(this), amountToStake), "Insufficient Token Allowance"); updateAccount(msg.sender); uint fee = amountToStake.mul(STAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToStake.sub(fee); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(owner, fee), "Could not transfer deposit fee."); depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amountAfterFee); holders.add(msg.sender); if (referrals[msg.sender] == address(0)) { referrals[msg.sender] = referrer; } totalReferredAddressesOfUser[referrals[msg.sender]].add(msg.sender); activeReferredAddressesOfUser[referrals[msg.sender]].add(msg.sender); stakingTime[msg.sender] = now; } function unstake(uint amountToWithdraw) external noContractsAllowed { require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw"); require(now.sub(stakingTime[msg.sender]) > LOCKUP_TIME, "You recently staked, please wait before withdrawing."); updateAccount(msg.sender); uint fee = amountToWithdraw.mul(UNSTAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToWithdraw.sub(fee); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(owner, fee), "Could not transfer withdraw fee."); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(msg.sender, amountAfterFee), "Could not transfer tokens."); depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw); if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) { holders.remove(msg.sender); activeReferredAddressesOfUser[referrals[msg.sender]].remove(msg.sender); } } // emergency unstake without caring about pending earnings // pending earnings will be lost / set to 0 if used emergency unstake function emergencyUnstake(uint amountToWithdraw) external noContractsAllowed { require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw"); require(now.sub(stakingTime[msg.sender]) > LOCKUP_TIME, "You recently staked, please wait before withdrawing."); // set pending earnings to 0 here lastClaimedTime[msg.sender] = now; uint fee = amountToWithdraw.mul(UNSTAKING_FEE_RATE_X_100).div(1e4); uint amountAfterFee = amountToWithdraw.sub(fee); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(owner, fee), "Could not transfer withdraw fee."); require(Token(TRUSTED_TOKEN_ADDRESS).transfer(msg.sender, amountAfterFee), "Could not transfer tokens."); depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw); if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) { holders.remove(msg.sender); } } function claim() external noContractsAllowed { updateAccount(msg.sender); uint amount = rewardsPendingClaim[msg.sender]; if (amount > 0) { rewardsPendingClaim[msg.sender] = 0; require(Token(TRUSTED_TOKEN_ADDRESS).transfer(msg.sender, amount), "Could not transfer earned tokens."); emit RewardsTransferred(msg.sender, amount); } } function reInvest() external noContractsAllowed { updateAccount(msg.sender); uint amount = rewardsPendingClaim[msg.sender]; if (amount > 0) { rewardsPendingClaim[msg.sender] = 0; // re-invest here depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amount); // stakingTime[msg.sender] = now; emit Reinvest(msg.sender, amount); } } function getStakersList(uint startIndex, uint endIndex) public view returns (address[] memory stakers, uint[] memory stakingTimestamps, uint[] memory lastClaimedTimeStamps, uint[] memory stakedTokens) { require (startIndex < endIndex); uint length = endIndex.sub(startIndex); address[] memory _stakers = new address[](length); uint[] memory _stakingTimestamps = new uint[](length); uint[] memory _lastClaimedTimeStamps = new uint[](length); uint[] memory _stakedTokens = new uint[](length); for (uint i = startIndex; i < endIndex; i = i.add(1)) { address staker = holders.at(i); uint listIndex = i.sub(startIndex); _stakers[listIndex] = staker; _stakingTimestamps[listIndex] = stakingTime[staker]; _lastClaimedTimeStamps[listIndex] = lastClaimedTime[staker]; _stakedTokens[listIndex] = depositedTokens[staker]; } return (_stakers, _stakingTimestamps, _lastClaimedTimeStamps, _stakedTokens); } // function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) // Admin cannot transfer out reward tokens from this smart contract function transferAnyERC20Token(address tokenAddress, address recipient, uint amount) external onlyOwner { require (tokenAddress != TRUSTED_TOKEN_ADDRESS || now > contractStartTime.add(ADMIN_CAN_CLAIM_AFTER), "Cannot Transfer Out main tokens!"); require (Token(tokenAddress).transfer(recipient, amount), "Transfer failed!"); } // function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) // Admin cannot transfer out reward tokens from this smart contract function transferAnyLegacyERC20Token(address tokenAddress, address recipient, uint amount) external onlyOwner { require (tokenAddress != TRUSTED_TOKEN_ADDRESS || now > contractStartTime.add(ADMIN_CAN_CLAIM_AFTER), "Cannot Transfer Out main tokens!"); LegacyToken(tokenAddress).transfer(recipient, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferralFeeTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsTransferred","type":"event"},{"inputs":[],"name":"ADMIN_CAN_CLAIM_AFTER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCKUP_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERRAL_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRUSTED_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNSTAKING_FEE_RATE_X_100","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"}],"name":"emergencyUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getActiveReferredStaker","outputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"getNumberOfReferredStakers","outputs":[{"internalType":"uint256","name":"_activeStakers","type":"uint256"},{"internalType":"uint256","name":"_totalStakers","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getReferredStaker","outputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"endIndex","type":"uint256"}],"name":"getStakersList","outputs":[{"internalType":"address[]","name":"stakers","type":"address[]"},{"internalType":"uint256[]","name":"stakingTimestamps","type":"uint256[]"},{"internalType":"uint256[]","name":"lastClaimedTimeStamps","type":"uint256[]"},{"internalType":"uint256[]","name":"stakedTokens","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getTotalPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reInvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsPendingClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToStake","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedReferralFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalEarnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalReferralFeeEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAnyLegacyERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526000600155600060025534801561001a57600080fd5b50600080546001600160a01b03191633179055426080526080516123a161005a60003980610aab52806118765280611a025280611bea52506123a16000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80639ca423b31161011a578063df4b70ba116100ad578063f2fde38b1161007c578063f2fde38b14610666578063f3f91fa01461068c578063f5326ada146106b2578063f6af4dff146106ba578063f749229e146106c257610206565b8063df4b70ba146105fa578063e7b62f5814610602578063ebe6cad114610628578063f25b83641461063057610206565b8063c6363892116100e9578063c63638921461058e578063d079490f146105b4578063d493b9ac146105bc578063d578ceab146105f257610206565b80639ca423b314610532578063a35f7c7b14610558578063c1665f4014610560578063c326bf4f1461056857610206565b80634e71d92d1161019d5780636270cd181161016c5780636270cd181461048e5780637acb7757146104b45780637e44b933146104e05780638da5cb5b146104e857806398896d101461050c57610206565b80634e71d92d1461045057806350be99ad14610458578063583d42fd146104605780635dbdda691461048657610206565b80632a6b9bfd116101d95780632a6b9bfd146103d95780632e17de7814610405578063308feec31461042257806348f554d31461042a57610206565b8063012ce5011461020b5780630c3d51571461022a5780631808fdb8146102445780631911cf4a14610293575b600080fd5b6102286004803603602081101561022157600080fd5b5035610701565b005b610232610aa9565b60408051918252519081900360200190f35b6102706004803603604081101561025a57600080fd5b506001600160a01b038135169060200135610acd565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6102b6600480360360408110156102a957600080fd5b5080359060200135610b1b565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103025781810151838201526020016102ea565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015610341578181015183820152602001610329565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015610380578181015183820152602001610368565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156103bf5781810151838201526020016103a7565b505050509050019850505050505050505060405180910390f35b610270600480360360408110156103ef57600080fd5b506001600160a01b038135169060200135610d9f565b6102286004803603602081101561041b57600080fd5b5035610dc9565b61023261118c565b6102326004803603602081101561044057600080fd5b50356001600160a01b031661119d565b6102286111af565b610228611338565b6102326004803603602081101561047657600080fd5b50356001600160a01b031661142e565b610232611440565b610232600480360360208110156104a457600080fd5b50356001600160a01b0316611448565b610228600480360360408110156104ca57600080fd5b50803590602001356001600160a01b031661145a565b610232611816565b6104f061181b565b604080516001600160a01b039092168252519081900360200190f35b6102326004803603602081101561052257600080fd5b50356001600160a01b031661182a565b6104f06004803603602081101561054857600080fd5b50356001600160a01b031661195d565b6104f0611978565b610232611990565b6102326004803603602081101561057e57600080fd5b50356001600160a01b0316611995565b610232600480360360208110156105a457600080fd5b50356001600160a01b03166119a7565b6102326119b9565b610228600480360360608110156105d257600080fd5b506001600160a01b038135811691602081013590911690604001356119bf565b610232611b55565b610232611b5b565b6102326004803603602081101561061857600080fd5b50356001600160a01b0316611b61565b610232611ba1565b6102286004803603606081101561064657600080fd5b506001600160a01b03813581169160208101359091169060400135611ba7565b6102286004803603602081101561067c57600080fd5b50356001600160a01b0316611cea565b610232600480360360208110156106a257600080fd5b50356001600160a01b0316611d6f565b610232611d81565b610232611d88565b6106e8600480360360208110156106d857600080fd5b50356001600160a01b0316611d90565b6040805192835260208301919091528051918290030190f35b61070a33611dde565b15801561071657503233145b61075f576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b336000908152600560205260409020548111156107c3576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b336000908152600660205260409020546276a700906107e990429063ffffffff611de416565b116108255760405162461bcd60e51b81526004018080602001828103825260348152602001806123176034913960400191505060405180910390fd5b33600090815260076020526040812042905561085a61271061084e84601963ffffffff611dfb16565b9063ffffffff611e2216565b9050600061086e838363ffffffff611de416565b600080546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018690525192935073bd100d061e120b2c67a24453cf6368e63f1be0569263a9059cbb92604480840193602093929083900390910190829087803b1580156108da57600080fd5b505af11580156108ee573d6000803e3d6000fd5b505050506040513d602081101561090457600080fd5b5051610957576040805162461bcd60e51b815260206004820181905260248201527f436f756c64206e6f74207472616e73666572207769746864726177206665652e604482015290519081900360640190fd5b6040805163a9059cbb60e01b815233600482015260248101839052905173bd100d061e120b2c67a24453cf6368e63f1be0569163a9059cbb9160448083019260209291908290030181600087803b1580156109b157600080fd5b505af11580156109c5573d6000803e3d6000fd5b505050506040513d60208110156109db57600080fd5b5051610a2e576040805162461bcd60e51b815260206004820152601a60248201527f436f756c64206e6f74207472616e7366657220746f6b656e732e000000000000604482015290519081900360640190fd5b33600090815260056020526040902054610a4e908463ffffffff611de416565b33600081815260056020526040902091909155610a739060039063ffffffff611e3716565b8015610a8c575033600090815260056020526040902054155b15610aa457610aa260033363ffffffff611e4c16565b505b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0382166000908152600c602052604081208190610af7908463ffffffff611e6116565b6001600160a01b038116600090815260086020526040902054909590945092505050565b606080606080848610610b2d57600080fd5b6000610b3f868863ffffffff611de416565b905060608167ffffffffffffffff81118015610b5a57600080fd5b50604051908082528060200260200182016040528015610b84578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610ba057600080fd5b50604051908082528060200260200182016040528015610bca578160200160208202803683370190505b50905060608367ffffffffffffffff81118015610be657600080fd5b50604051908082528060200260200182016040528015610c10578160200160208202803683370190505b50905060608467ffffffffffffffff81118015610c2c57600080fd5b50604051908082528060200260200182016040528015610c56578160200160208202803683370190505b5090508a5b8a811015610d8d576000610c7660038363ffffffff611e6116565b90506000610c8a838f63ffffffff611de416565b905081878281518110610c9957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060066000836001600160a01b03166001600160a01b0316815260200190815260200160002054868281518110610ceb57fe5b60200260200101818152505060076000836001600160a01b03166001600160a01b0316815260200190815260200160002054858281518110610d2957fe5b60200260200101818152505060056000836001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610d6757fe5b602090810291909101015250610d86905081600163ffffffff611e6d16565b9050610c5b565b50929a91995097509095509350505050565b6001600160a01b0382166000908152600d602052604081208190610af7908463ffffffff611e6116565b610dd233611dde565b158015610dde57503233145b610e27576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b33600090815260056020526040902054811115610e8b576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b336000908152600660205260409020546276a70090610eb190429063ffffffff611de416565b11610eed5760405162461bcd60e51b81526004018080602001828103825260348152602001806123176034913960400191505060405180910390fd5b610ef633611e7c565b6000610f0f61271061084e84601963ffffffff611dfb16565b90506000610f23838363ffffffff611de416565b600080546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018690525192935073bd100d061e120b2c67a24453cf6368e63f1be0569263a9059cbb92604480840193602093929083900390910190829087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b505050506040513d6020811015610fb957600080fd5b505161100c576040805162461bcd60e51b815260206004820181905260248201527f436f756c64206e6f74207472616e73666572207769746864726177206665652e604482015290519081900360640190fd5b6040805163a9059cbb60e01b815233600482015260248101839052905173bd100d061e120b2c67a24453cf6368e63f1be0569163a9059cbb9160448083019260209291908290030181600087803b15801561106657600080fd5b505af115801561107a573d6000803e3d6000fd5b505050506040513d602081101561109057600080fd5b50516110e3576040805162461bcd60e51b815260206004820152601a60248201527f436f756c64206e6f74207472616e7366657220746f6b656e732e000000000000604482015290519081900360640190fd5b33600090815260056020526040902054611103908463ffffffff611de416565b336000818152600560205260409020919091556111289060039063ffffffff611e3716565b8015611141575033600090815260056020526040902054155b15610aa45761115760033363ffffffff611e4c16565b50336000818152600a60209081526040808320546001600160a01b03168352600c9091529020610aa29163ffffffff611e4c16565b60006111986003611fa1565b905090565b60096020526000908152604090205481565b6111b833611dde565b1580156111c457503233145b61120d576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b61121633611e7c565b33600090815260096020526040902054801561133557336000818152600960209081526040808320839055805163a9059cbb60e01b81526004810194909452602484018590525173bd100d061e120b2c67a24453cf6368e63f1be0569363a9059cbb9360448083019493928390030190829087803b15801561129757600080fd5b505af11580156112ab573d6000803e3d6000fd5b505050506040513d60208110156112c157600080fd5b50516112fe5760405162461bcd60e51b815260040180806020018281038252602181526020018061234b6021913960400191505060405180910390fd5b60408051828152905133917f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130919081900360200190a25b50565b61134133611dde565b15801561134d57503233145b611396576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b61139f33611e7c565b3360009081526009602052604090205480156113355733600090815260096020908152604080832083905560059091529020546113e2908263ffffffff611e6d16565b33600081815260056020908152604091829020939093558051848152905191927fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b8792918290030190a250565b60066020526000908152604090205481565b6301e1338081565b60086020526000908152604090205481565b61146333611dde565b15801561146f57503233145b6114b8576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b6000821161150d576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206465706f736974203020546f6b656e73000000000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b815233600482015230602482015260448101849052905173bd100d061e120b2c67a24453cf6368e63f1be056916323b872dd9160648083019260209291908290030181600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b505050506040513d602081101561159757600080fd5b50516115ea576040805162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e7420546f6b656e20416c6c6f77616e636500000000604482015290519081900360640190fd5b6115f333611e7c565b600061160b61271061084e858463ffffffff611dfb16565b9050600061161f848363ffffffff611de416565b600080546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018690525192935073bd100d061e120b2c67a24453cf6368e63f1be0569263a9059cbb92604480840193602093929083900390910190829087803b15801561168b57600080fd5b505af115801561169f573d6000803e3d6000fd5b505050506040513d60208110156116b557600080fd5b5051611708576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e73666572206465706f736974206665652e00604482015290519081900360640190fd5b33600090815260056020526040902054611728908263ffffffff611e6d16565b3360008181526005602052604090209190915561174d9060039063ffffffff611fac16565b50336000908152600a60205260409020546001600160a01b031661179457336000908152600a6020526040902080546001600160a01b0319166001600160a01b0385161790555b336000818152600a60209081526040808320546001600160a01b03168352600d90915290206117c89163ffffffff611fac16565b50336000818152600a60209081526040808320546001600160a01b03168352600c90915290206117fd9163ffffffff611fac16565b5050336000908152600660205260409020429055505050565b600081565b6000546001600160a01b031681565b600061183d60038363ffffffff611e3716565b61184957506000611958565b6001600160a01b03821660009081526005602052604090205461186e57506000611958565b6000806118a57f00000000000000000000000000000000000000000000000000000000000000006301e1338063ffffffff611e6d16565b905042818111156118b35750805b6001600160a01b03851660009081526007602052604090205481116118db5760009250611908565b6001600160a01b03851660009081526007602052604090205461190590829063ffffffff611de416565b92505b6001600160a01b0385166000908152600560205260408120549061195061271061084e6301e1338081896119448861119463ffffffff611dfb16565b9063ffffffff611dfb16565b955050505050505b919050565b600a602052600090815260409020546001600160a01b031681565b73bd100d061e120b2c67a24453cf6368e63f1be05681565b601981565b60056020526000908152604090205481565b600b6020526000908152604090205481565b60025481565b6000546001600160a01b031633146119d657600080fd5b6001600160a01b03831673bd100d061e120b2c67a24453cf6368e63f1be056141580611a345750611a317f0000000000000000000000000000000000000000000000000000000000000000630208c08063ffffffff611e6d16565b42115b611a85576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74205472616e73666572204f7574206d61696e20746f6b656e7321604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ae557600080fd5b505af1158015611af9573d6000803e3d6000fd5b505050506040513d6020811015611b0f57600080fd5b5051610aa4576040805162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c65642160801b604482015290519081900360640190fd5b60015481565b6101f481565b600080611b6d8361182a565b6001600160a01b038416600090815260096020526040902054909150611b99828263ffffffff611e6d16565b949350505050565b61119481565b6000546001600160a01b03163314611bbe57600080fd5b6001600160a01b03831673bd100d061e120b2c67a24453cf6368e63f1be056141580611c1c5750611c197f0000000000000000000000000000000000000000000000000000000000000000630208c08063ffffffff611e6d16565b42115b611c6d576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74205472616e73666572204f7574206d61696e20746f6b656e7321604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611ccd57600080fd5b505af1158015611ce1573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611d0157600080fd5b6001600160a01b038116611d1457600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205481565b6276a70081565b630208c08081565b6001600160a01b0381166000908152600c602052604081208190611db390611fa1565b6001600160a01b0384166000908152600d60205260409020909250611dd790611fa1565b9050915091565b3b151590565b600082821115611df057fe5b508082035b92915050565b6000828202831580611e15575082848281611e1257fe5b04145b611e1b57fe5b9392505050565b600080828481611e2e57fe5b04949350505050565b6000611e1b836001600160a01b038416611fc1565b6000611e1b836001600160a01b038416611fd9565b6000611e1b838361209f565b600082820183811015611e1b57fe5b6000611e878261182a565b90508015611f84576000611ea961271061084e846101f463ffffffff611dfb16565b90506000611ebd838363ffffffff611de416565b6001600160a01b038086166000908152600a602052604081205492935091611ee6911684612103565b9050838115611ef25750815b6001600160a01b038616600090815260096020526040902054611f1b908263ffffffff611e6d16565b6001600160a01b038716600090815260096020908152604080832093909355600890522054611f50908263ffffffff611e6d16565b6001600160a01b038716600090815260086020526040902055600154611f7c908263ffffffff611e6d16565b600155505050505b506001600160a01b03166000908152600760205260409020429055565b6000611df5826122a6565b6000611e1b836001600160a01b0384166122aa565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612095578354600019808301919081019060009087908390811061200c57fe5b906000526020600020015490508087600001848154811061202957fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061205957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611df5565b6000915050611df5565b815460009082106120e15760405162461bcd60e51b81526004018080602001828103825260228152602001806122f56022913960400191505060405180910390fd5b8260000182815481106120f057fe5b9060005260206000200154905092915050565b60006001600160a01b0383161580159061211d5750600082115b1561229d576001600160a01b0383166000908152600b602052604090205461214b908363ffffffff611e6d16565b6001600160a01b0384166000818152600b6020908152604080832094909455835163a9059cbb60e01b8152600481019390935260248301869052925173bd100d061e120b2c67a24453cf6368e63f1be0569363a9059cbb93604480820194929392918390030190829087803b1580156121c357600080fd5b505af11580156121d7573d6000803e3d6000fd5b505050506040513d60208110156121ed57600080fd5b5051612240576040805162461bcd60e51b815260206004820181905260248201527f436f756c64206e6f74207472616e7366657220726566657272616c2066656521604482015290519081900360640190fd5b600254612253908363ffffffff611e6d16565b6002556040805183815290516001600160a01b038516917fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219919081900360200190a2506001611df5565b50600092915050565b5490565b60006122b68383611fc1565b6122ec57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611df5565b506000611df556fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e436f756c64206e6f74207472616e73666572206561726e656420746f6b656e732ea2646970667358221220f52be56718df4192d8e8e82921a94c4ba9da3f2f928d4a9da6a10916d5c3fc9064736f6c634300060b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c80639ca423b31161011a578063df4b70ba116100ad578063f2fde38b1161007c578063f2fde38b14610666578063f3f91fa01461068c578063f5326ada146106b2578063f6af4dff146106ba578063f749229e146106c257610206565b8063df4b70ba146105fa578063e7b62f5814610602578063ebe6cad114610628578063f25b83641461063057610206565b8063c6363892116100e9578063c63638921461058e578063d079490f146105b4578063d493b9ac146105bc578063d578ceab146105f257610206565b80639ca423b314610532578063a35f7c7b14610558578063c1665f4014610560578063c326bf4f1461056857610206565b80634e71d92d1161019d5780636270cd181161016c5780636270cd181461048e5780637acb7757146104b45780637e44b933146104e05780638da5cb5b146104e857806398896d101461050c57610206565b80634e71d92d1461045057806350be99ad14610458578063583d42fd146104605780635dbdda691461048657610206565b80632a6b9bfd116101d95780632a6b9bfd146103d95780632e17de7814610405578063308feec31461042257806348f554d31461042a57610206565b8063012ce5011461020b5780630c3d51571461022a5780631808fdb8146102445780631911cf4a14610293575b600080fd5b6102286004803603602081101561022157600080fd5b5035610701565b005b610232610aa9565b60408051918252519081900360200190f35b6102706004803603604081101561025a57600080fd5b506001600160a01b038135169060200135610acd565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6102b6600480360360408110156102a957600080fd5b5080359060200135610b1b565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156103025781810151838201526020016102ea565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015610341578181015183820152602001610329565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015610380578181015183820152602001610368565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156103bf5781810151838201526020016103a7565b505050509050019850505050505050505060405180910390f35b610270600480360360408110156103ef57600080fd5b506001600160a01b038135169060200135610d9f565b6102286004803603602081101561041b57600080fd5b5035610dc9565b61023261118c565b6102326004803603602081101561044057600080fd5b50356001600160a01b031661119d565b6102286111af565b610228611338565b6102326004803603602081101561047657600080fd5b50356001600160a01b031661142e565b610232611440565b610232600480360360208110156104a457600080fd5b50356001600160a01b0316611448565b610228600480360360408110156104ca57600080fd5b50803590602001356001600160a01b031661145a565b610232611816565b6104f061181b565b604080516001600160a01b039092168252519081900360200190f35b6102326004803603602081101561052257600080fd5b50356001600160a01b031661182a565b6104f06004803603602081101561054857600080fd5b50356001600160a01b031661195d565b6104f0611978565b610232611990565b6102326004803603602081101561057e57600080fd5b50356001600160a01b0316611995565b610232600480360360208110156105a457600080fd5b50356001600160a01b03166119a7565b6102326119b9565b610228600480360360608110156105d257600080fd5b506001600160a01b038135811691602081013590911690604001356119bf565b610232611b55565b610232611b5b565b6102326004803603602081101561061857600080fd5b50356001600160a01b0316611b61565b610232611ba1565b6102286004803603606081101561064657600080fd5b506001600160a01b03813581169160208101359091169060400135611ba7565b6102286004803603602081101561067c57600080fd5b50356001600160a01b0316611cea565b610232600480360360208110156106a257600080fd5b50356001600160a01b0316611d6f565b610232611d81565b610232611d88565b6106e8600480360360208110156106d857600080fd5b50356001600160a01b0316611d90565b6040805192835260208301919091528051918290030190f35b61070a33611dde565b15801561071657503233145b61075f576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b336000908152600560205260409020548111156107c3576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b336000908152600660205260409020546276a700906107e990429063ffffffff611de416565b116108255760405162461bcd60e51b81526004018080602001828103825260348152602001806123176034913960400191505060405180910390fd5b33600090815260076020526040812042905561085a61271061084e84601963ffffffff611dfb16565b9063ffffffff611e2216565b9050600061086e838363ffffffff611de416565b600080546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018690525192935073bd100d061e120b2c67a24453cf6368e63f1be0569263a9059cbb92604480840193602093929083900390910190829087803b1580156108da57600080fd5b505af11580156108ee573d6000803e3d6000fd5b505050506040513d602081101561090457600080fd5b5051610957576040805162461bcd60e51b815260206004820181905260248201527f436f756c64206e6f74207472616e73666572207769746864726177206665652e604482015290519081900360640190fd5b6040805163a9059cbb60e01b815233600482015260248101839052905173bd100d061e120b2c67a24453cf6368e63f1be0569163a9059cbb9160448083019260209291908290030181600087803b1580156109b157600080fd5b505af11580156109c5573d6000803e3d6000fd5b505050506040513d60208110156109db57600080fd5b5051610a2e576040805162461bcd60e51b815260206004820152601a60248201527f436f756c64206e6f74207472616e7366657220746f6b656e732e000000000000604482015290519081900360640190fd5b33600090815260056020526040902054610a4e908463ffffffff611de416565b33600081815260056020526040902091909155610a739060039063ffffffff611e3716565b8015610a8c575033600090815260056020526040902054155b15610aa457610aa260033363ffffffff611e4c16565b505b505050565b7f00000000000000000000000000000000000000000000000000000000621cc40481565b6001600160a01b0382166000908152600c602052604081208190610af7908463ffffffff611e6116565b6001600160a01b038116600090815260086020526040902054909590945092505050565b606080606080848610610b2d57600080fd5b6000610b3f868863ffffffff611de416565b905060608167ffffffffffffffff81118015610b5a57600080fd5b50604051908082528060200260200182016040528015610b84578160200160208202803683370190505b50905060608267ffffffffffffffff81118015610ba057600080fd5b50604051908082528060200260200182016040528015610bca578160200160208202803683370190505b50905060608367ffffffffffffffff81118015610be657600080fd5b50604051908082528060200260200182016040528015610c10578160200160208202803683370190505b50905060608467ffffffffffffffff81118015610c2c57600080fd5b50604051908082528060200260200182016040528015610c56578160200160208202803683370190505b5090508a5b8a811015610d8d576000610c7660038363ffffffff611e6116565b90506000610c8a838f63ffffffff611de416565b905081878281518110610c9957fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060066000836001600160a01b03166001600160a01b0316815260200190815260200160002054868281518110610ceb57fe5b60200260200101818152505060076000836001600160a01b03166001600160a01b0316815260200190815260200160002054858281518110610d2957fe5b60200260200101818152505060056000836001600160a01b03166001600160a01b0316815260200190815260200160002054848281518110610d6757fe5b602090810291909101015250610d86905081600163ffffffff611e6d16565b9050610c5b565b50929a91995097509095509350505050565b6001600160a01b0382166000908152600d602052604081208190610af7908463ffffffff611e6116565b610dd233611dde565b158015610dde57503233145b610e27576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b33600090815260056020526040902054811115610e8b576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420616d6f756e7420746f207769746864726177000000000000604482015290519081900360640190fd5b336000908152600660205260409020546276a70090610eb190429063ffffffff611de416565b11610eed5760405162461bcd60e51b81526004018080602001828103825260348152602001806123176034913960400191505060405180910390fd5b610ef633611e7c565b6000610f0f61271061084e84601963ffffffff611dfb16565b90506000610f23838363ffffffff611de416565b600080546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018690525192935073bd100d061e120b2c67a24453cf6368e63f1be0569263a9059cbb92604480840193602093929083900390910190829087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b505050506040513d6020811015610fb957600080fd5b505161100c576040805162461bcd60e51b815260206004820181905260248201527f436f756c64206e6f74207472616e73666572207769746864726177206665652e604482015290519081900360640190fd5b6040805163a9059cbb60e01b815233600482015260248101839052905173bd100d061e120b2c67a24453cf6368e63f1be0569163a9059cbb9160448083019260209291908290030181600087803b15801561106657600080fd5b505af115801561107a573d6000803e3d6000fd5b505050506040513d602081101561109057600080fd5b50516110e3576040805162461bcd60e51b815260206004820152601a60248201527f436f756c64206e6f74207472616e7366657220746f6b656e732e000000000000604482015290519081900360640190fd5b33600090815260056020526040902054611103908463ffffffff611de416565b336000818152600560205260409020919091556111289060039063ffffffff611e3716565b8015611141575033600090815260056020526040902054155b15610aa45761115760033363ffffffff611e4c16565b50336000818152600a60209081526040808320546001600160a01b03168352600c9091529020610aa29163ffffffff611e4c16565b60006111986003611fa1565b905090565b60096020526000908152604090205481565b6111b833611dde565b1580156111c457503233145b61120d576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b61121633611e7c565b33600090815260096020526040902054801561133557336000818152600960209081526040808320839055805163a9059cbb60e01b81526004810194909452602484018590525173bd100d061e120b2c67a24453cf6368e63f1be0569363a9059cbb9360448083019493928390030190829087803b15801561129757600080fd5b505af11580156112ab573d6000803e3d6000fd5b505050506040513d60208110156112c157600080fd5b50516112fe5760405162461bcd60e51b815260040180806020018281038252602181526020018061234b6021913960400191505060405180910390fd5b60408051828152905133917f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf130919081900360200190a25b50565b61134133611dde565b15801561134d57503233145b611396576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b61139f33611e7c565b3360009081526009602052604090205480156113355733600090815260096020908152604080832083905560059091529020546113e2908263ffffffff611e6d16565b33600081815260056020908152604091829020939093558051848152905191927fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b8792918290030190a250565b60066020526000908152604090205481565b6301e1338081565b60086020526000908152604090205481565b61146333611dde565b15801561146f57503233145b6114b8576040805162461bcd60e51b81526020600482015260156024820152744e6f20436f6e74726163747320416c6c6f7765642160581b604482015290519081900360640190fd5b6000821161150d576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206465706f736974203020546f6b656e73000000000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b815233600482015230602482015260448101849052905173bd100d061e120b2c67a24453cf6368e63f1be056916323b872dd9160648083019260209291908290030181600087803b15801561156d57600080fd5b505af1158015611581573d6000803e3d6000fd5b505050506040513d602081101561159757600080fd5b50516115ea576040805162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e7420546f6b656e20416c6c6f77616e636500000000604482015290519081900360640190fd5b6115f333611e7c565b600061160b61271061084e858463ffffffff611dfb16565b9050600061161f848363ffffffff611de416565b600080546040805163a9059cbb60e01b81526001600160a01b039092166004830152602482018690525192935073bd100d061e120b2c67a24453cf6368e63f1be0569263a9059cbb92604480840193602093929083900390910190829087803b15801561168b57600080fd5b505af115801561169f573d6000803e3d6000fd5b505050506040513d60208110156116b557600080fd5b5051611708576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e73666572206465706f736974206665652e00604482015290519081900360640190fd5b33600090815260056020526040902054611728908263ffffffff611e6d16565b3360008181526005602052604090209190915561174d9060039063ffffffff611fac16565b50336000908152600a60205260409020546001600160a01b031661179457336000908152600a6020526040902080546001600160a01b0319166001600160a01b0385161790555b336000818152600a60209081526040808320546001600160a01b03168352600d90915290206117c89163ffffffff611fac16565b50336000818152600a60209081526040808320546001600160a01b03168352600c90915290206117fd9163ffffffff611fac16565b5050336000908152600660205260409020429055505050565b600081565b6000546001600160a01b031681565b600061183d60038363ffffffff611e3716565b61184957506000611958565b6001600160a01b03821660009081526005602052604090205461186e57506000611958565b6000806118a57f00000000000000000000000000000000000000000000000000000000621cc4046301e1338063ffffffff611e6d16565b905042818111156118b35750805b6001600160a01b03851660009081526007602052604090205481116118db5760009250611908565b6001600160a01b03851660009081526007602052604090205461190590829063ffffffff611de416565b92505b6001600160a01b0385166000908152600560205260408120549061195061271061084e6301e1338081896119448861119463ffffffff611dfb16565b9063ffffffff611dfb16565b955050505050505b919050565b600a602052600090815260409020546001600160a01b031681565b73bd100d061e120b2c67a24453cf6368e63f1be05681565b601981565b60056020526000908152604090205481565b600b6020526000908152604090205481565b60025481565b6000546001600160a01b031633146119d657600080fd5b6001600160a01b03831673bd100d061e120b2c67a24453cf6368e63f1be056141580611a345750611a317f00000000000000000000000000000000000000000000000000000000621cc404630208c08063ffffffff611e6d16565b42115b611a85576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74205472616e73666572204f7574206d61696e20746f6b656e7321604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ae557600080fd5b505af1158015611af9573d6000803e3d6000fd5b505050506040513d6020811015611b0f57600080fd5b5051610aa4576040805162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c65642160801b604482015290519081900360640190fd5b60015481565b6101f481565b600080611b6d8361182a565b6001600160a01b038416600090815260096020526040902054909150611b99828263ffffffff611e6d16565b949350505050565b61119481565b6000546001600160a01b03163314611bbe57600080fd5b6001600160a01b03831673bd100d061e120b2c67a24453cf6368e63f1be056141580611c1c5750611c197f00000000000000000000000000000000000000000000000000000000621cc404630208c08063ffffffff611e6d16565b42115b611c6d576040805162461bcd60e51b815260206004820181905260248201527f43616e6e6f74205472616e73666572204f7574206d61696e20746f6b656e7321604482015290519081900360640190fd5b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611ccd57600080fd5b505af1158015611ce1573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314611d0157600080fd5b6001600160a01b038116611d1457600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60076020526000908152604090205481565b6276a70081565b630208c08081565b6001600160a01b0381166000908152600c602052604081208190611db390611fa1565b6001600160a01b0384166000908152600d60205260409020909250611dd790611fa1565b9050915091565b3b151590565b600082821115611df057fe5b508082035b92915050565b6000828202831580611e15575082848281611e1257fe5b04145b611e1b57fe5b9392505050565b600080828481611e2e57fe5b04949350505050565b6000611e1b836001600160a01b038416611fc1565b6000611e1b836001600160a01b038416611fd9565b6000611e1b838361209f565b600082820183811015611e1b57fe5b6000611e878261182a565b90508015611f84576000611ea961271061084e846101f463ffffffff611dfb16565b90506000611ebd838363ffffffff611de416565b6001600160a01b038086166000908152600a602052604081205492935091611ee6911684612103565b9050838115611ef25750815b6001600160a01b038616600090815260096020526040902054611f1b908263ffffffff611e6d16565b6001600160a01b038716600090815260096020908152604080832093909355600890522054611f50908263ffffffff611e6d16565b6001600160a01b038716600090815260086020526040902055600154611f7c908263ffffffff611e6d16565b600155505050505b506001600160a01b03166000908152600760205260409020429055565b6000611df5826122a6565b6000611e1b836001600160a01b0384166122aa565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612095578354600019808301919081019060009087908390811061200c57fe5b906000526020600020015490508087600001848154811061202957fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061205957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611df5565b6000915050611df5565b815460009082106120e15760405162461bcd60e51b81526004018080602001828103825260228152602001806122f56022913960400191505060405180910390fd5b8260000182815481106120f057fe5b9060005260206000200154905092915050565b60006001600160a01b0383161580159061211d5750600082115b1561229d576001600160a01b0383166000908152600b602052604090205461214b908363ffffffff611e6d16565b6001600160a01b0384166000818152600b6020908152604080832094909455835163a9059cbb60e01b8152600481019390935260248301869052925173bd100d061e120b2c67a24453cf6368e63f1be0569363a9059cbb93604480820194929392918390030190829087803b1580156121c357600080fd5b505af11580156121d7573d6000803e3d6000fd5b505050506040513d60208110156121ed57600080fd5b5051612240576040805162461bcd60e51b815260206004820181905260248201527f436f756c64206e6f74207472616e7366657220726566657272616c2066656521604482015290519081900360640190fd5b600254612253908363ffffffff611e6d16565b6002556040805183815290516001600160a01b038516917fefdcb1f2ee8323554150b9eca5209dcd6a164266e8d1f04b95cbcecd0cad5219919081900360200190a2506001611df5565b50600092915050565b5490565b60006122b68383611fc1565b6122ec57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611df5565b506000611df556fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473596f7520726563656e746c79207374616b65642c20706c656173652077616974206265666f7265207769746864726177696e672e436f756c64206e6f74207472616e73666572206561726e656420746f6b656e732ea2646970667358221220f52be56718df4192d8e8e82921a94c4ba9da3f2f928d4a9da6a10916d5c3fc9064736f6c634300060b0033
Deployed Bytecode Sourcemap
18045:12358:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26245:1029;;;;;;;;;;;;;;;;-1:-1:-1;26245:1029:0;;:::i;:::-;;19426:39;;;:::i;:::-;;;;;;;;;;;;;;;;23713:242;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23713:242:0;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;23713:242:0;;;;;;;;;;;;;;;;;;;;;28195:1157;;;;;;;;;;;;;;;;-1:-1:-1;28195:1157:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23472:235;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23472:235:0;;;;;;;;:::i;25039:1055::-;;;;;;;;;;;;;;;;-1:-1:-1;25039:1055:0;;:::i;23071:101::-;;;:::i;19988:52::-;;;;;;;;;;;;;;;;-1:-1:-1;19988:52:0;-1:-1:-1;;;;;19988:52:0;;:::i;27286:411::-;;;:::i;27709:474::-;;;:::i;19819:44::-;;;;;;;;;;;;;;;;-1:-1:-1;19819:44:0;-1:-1:-1;;;;;19819:44:0;;:::i;18738:47::-;;;:::i;19925:50::-;;;;;;;;;;;;;;;;-1:-1:-1;19925:50:0;-1:-1:-1;;;;;19925:50:0;;:::i;23973:1054::-;;;;;;;;;;;;;;;;-1:-1:-1;23973:1054:0;;;;;;-1:-1:-1;;;;;23973:1054:0;;:::i;18818:47::-;;;:::i;17000:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;17000:20:0;;;;;;;;;;;;;;21900:911;;;;;;;;;;;;;;;;-1:-1:-1;21900:911:0;-1:-1:-1;;;;;21900:911:0;;:::i;20053:45::-;;;;;;;;;;;;;;;;-1:-1:-1;20053:45:0;-1:-1:-1;;;;;20053:45:0;;:::i;18554:90::-;;;:::i;18901:50::-;;;:::i;19764:48::-;;;;;;;;;;;;;;;;-1:-1:-1;19764:48:0;-1:-1:-1;;;;;19764:48:0;;:::i;20105:55::-;;;;;;;;;;;;;;;;-1:-1:-1;20105:55:0;-1:-1:-1;;;;;20105:55:0;;:::i;19374:39::-;;;:::i;29540:348::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29540:348:0;;;;;;;;;;;;;;;;;:::i;19332:35::-;;;:::i;19012:50::-;;;:::i;22823:236::-;;;;;;;;;;;;;;;;-1:-1:-1;22823:236:0;-1:-1:-1;;;;;22823:236:0;;:::i;18686:45::-;;;:::i;30070:330::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30070:330:0;;;;;;;;;;;;;;;;;:::i;17619:178::-;;;;;;;;;;;;;;;;-1:-1:-1;17619:178:0;-1:-1:-1;;;;;17619:178:0;;:::i;19870:48::-;;;;;;;;;;;;;;;;-1:-1:-1;19870:48:0;-1:-1:-1;;;;;19870:48:0;;:::i;19117:42::-;;;:::i;19172:53::-;;;:::i;23184:276::-;;;;;;;;;;;;;;;;-1:-1:-1;23184:276:0;-1:-1:-1;;;;;23184:276:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26245:1029;19593:32;19601:10;19593:30;:32::i;:::-;19591:35;:62;;;;-1:-1:-1;19630:9:0;19643:10;19630:23;19591:62;19583:96;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;;;;26357:10:::1;26341:27;::::0;;;:15:::1;:27;::::0;;;;;:47;-1:-1:-1;26341:47:0::1;26333:86;;;::::0;;-1:-1:-1;;;26333:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26468:10;26456:23;::::0;;;:11:::1;:23;::::0;;;;;19152:7:::1;::::0;26448:32:::1;::::0;:3:::1;::::0;:32:::1;:7;:32;:::i;:::-;:46;26440:111;;;;-1:-1:-1::0;;;26440:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26631:10;26615:27;::::0;;;:15:::1;:27;::::0;;;;26645:3:::1;26615:33:::0;;26680:55:::1;26731:3;26680:46;:16:::0;18949:2:::1;26680:46;:20;:46;:::i;:::-;:50:::0;:55:::1;:50;:55;:::i;:::-;26669:66:::0;-1:-1:-1;26746:19:0::1;26768:25;:16:::0;26669:66;26768:25:::1;:20;:25;:::i;:::-;26860:5;::::0;;26822:49:::1;::::0;;-1:-1:-1;;;26822:49:0;;-1:-1:-1;;;;;26860:5:0;;::::1;26822:49;::::0;::::1;::::0;;;;;;;;26746:47;;-1:-1:-1;18602:42:0::1;::::0;26822:37:::1;::::0;:49;;;;;::::1;::::0;;;;;;;;;;;;18602:42;26822:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26822:49:0;26814:94:::1;;;::::0;;-1:-1:-1;;;26814:94:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26927:65;::::0;;-1:-1:-1;;;26927:65:0;;26965:10:::1;26927:65;::::0;::::1;::::0;;;;;;;;;18602:42:::1;::::0;26927:37:::1;::::0;:65;;;;;::::1;::::0;;;;;;;;-1:-1:-1;18602:42:0;26927:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26927:65:0;26919:104:::1;;;::::0;;-1:-1:-1;;;26919:104:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27090:10;27074:27;::::0;;;:15:::1;:27;::::0;;;;;:49:::1;::::0;27106:16;27074:49:::1;:31;:49;:::i;:::-;27060:10;27044:27;::::0;;;:15:::1;:27;::::0;;;;:79;;;;27148:28:::1;::::0;:7:::1;::::0;:28:::1;:16;:28;:::i;:::-;:64;;;;-1:-1:-1::0;27196:10:0::1;27180:27;::::0;;;:15:::1;:27;::::0;;;;;:32;27148:64:::1;27144:123;;;27229:26;:7;27244:10;27229:26;:14;:26;:::i;:::-;;27144:123;19690:1;;26245:1029:::0;:::o;19426:39::-;;;:::o;23713:242::-;-1:-1:-1;;;;;23851:38:0;;23794:15;23851:38;;;:29;:38;;;;;23794:15;;23851:44;;23893:1;23851:44;:41;:44;:::i;:::-;-1:-1:-1;;;;;23921:26:0;;;;;;:17;:26;;;;;;23841:54;;23921:26;;-1:-1:-1;23713:242:0;-1:-1:-1;;;23713:242:0:o;28195:1157::-;28302:24;28342:31;28389:35;28439:26;28500:8;28487:10;:21;28478:31;;;;;;28530:11;28544:24;:8;28557:10;28544:24;:12;:24;:::i;:::-;28530:38;;28579:25;28621:6;28607:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28607:21:0;;28579:49;;28639:32;28685:6;28674:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28674:18:0;;28639:53;;28703:36;28753:6;28742:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28742:18:0;;28703:57;;28771:27;28812:6;28801:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28801:18:0;-1:-1:-1;28771:48:0;-1:-1:-1;28854:10:0;28840:408;28870:8;28866:1;:12;28840:408;;;28909:14;28926:13;:7;28937:1;28926:13;:10;:13;:::i;:::-;28909:30;-1:-1:-1;28954:14:0;28971:17;:1;28977:10;28971:17;:5;:17;:::i;:::-;28954:34;;29025:6;29003:8;29012:9;29003:19;;;;;;;;;;;;;:28;-1:-1:-1;;;;;29003:28:0;;;-1:-1:-1;;;;;29003:28:0;;;;;29078:11;:19;29090:6;-1:-1:-1;;;;;29078:19:0;-1:-1:-1;;;;;29078:19:0;;;;;;;;;;;;;29046:18;29065:9;29046:29;;;;;;;;;;;;;:51;;;;;29148:15;:23;29164:6;-1:-1:-1;;;;;29148:23:0;-1:-1:-1;;;;;29148:23:0;;;;;;;;;;;;;29112:22;29135:9;29112:33;;;;;;;;;;;;;:59;;;;;29213:15;:23;29229:6;-1:-1:-1;;;;;29213:23:0;-1:-1:-1;;;;;29213:23:0;;;;;;;;;;;;;29186:13;29200:9;29186:24;;;;;;;;;;;;;;;;;:50;-1:-1:-1;28884:8:0;;-1:-1:-1;28884:1:0;28890;28884:8;:5;:8;:::i;:::-;28880:12;;28840:408;;;-1:-1:-1;29276:8:0;;29286:18;;-1:-1:-1;29286:18:0;-1:-1:-1;29276:8:0;;-1:-1:-1;28195:1157:0;-1:-1:-1;;;;28195:1157:0:o;23472:235::-;-1:-1:-1;;;;;23604:37:0;;23547:15;23604:37;;;:28;:37;;;;;23547:15;;23604:43;;23645:1;23604:43;:40;:43;:::i;25039:1055::-;19593:32;19601:10;19593:30;:32::i;:::-;19591:35;:62;;;;-1:-1:-1;19630:9:0;19643:10;19630:23;19591:62;19583:96;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;;;;25142:10:::1;25126:27;::::0;;;:15:::1;:27;::::0;;;;;:47;-1:-1:-1;25126:47:0::1;25118:86;;;::::0;;-1:-1:-1;;;25118:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25253:10;25241:23;::::0;;;:11:::1;:23;::::0;;;;;19152:7:::1;::::0;25233:32:::1;::::0;:3:::1;::::0;:32:::1;:7;:32;:::i;:::-;:46;25225:111;;;;-1:-1:-1::0;;;25225:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25357:25;25371:10;25357:13;:25::i;:::-;25403:8;25414:55;25465:3;25414:46;:16:::0;18949:2:::1;25414:46;:20;:46;:::i;:55::-;25403:66:::0;-1:-1:-1;25480:19:0::1;25502:25;:16:::0;25403:66;25502:25:::1;:20;:25;:::i;:::-;25594:5;::::0;;25556:49:::1;::::0;;-1:-1:-1;;;25556:49:0;;-1:-1:-1;;;;;25594:5:0;;::::1;25556:49;::::0;::::1;::::0;;;;;;;;25480:47;;-1:-1:-1;18602:42:0::1;::::0;25556:37:::1;::::0;:49;;;;;::::1;::::0;;;;;;;;;;;;18602:42;25556:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25556:49:0;25548:94:::1;;;::::0;;-1:-1:-1;;;25548:94:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25661:65;::::0;;-1:-1:-1;;;25661:65:0;;25699:10:::1;25661:65;::::0;::::1;::::0;;;;;;;;;18602:42:::1;::::0;25661:37:::1;::::0;:65;;;;;::::1;::::0;;;;;;;;-1:-1:-1;18602:42:0;25661:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;25661:65:0;25653:104:::1;;;::::0;;-1:-1:-1;;;25653:104:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25824:10;25808:27;::::0;;;:15:::1;:27;::::0;;;;;:49:::1;::::0;25840:16;25808:49:::1;:31;:49;:::i;:::-;25794:10;25778:27;::::0;;;:15:::1;:27;::::0;;;;:79;;;;25882:28:::1;::::0;:7:::1;::::0;:28:::1;:16;:28;:::i;:::-;:64;;;;-1:-1:-1::0;25930:10:0::1;25914:27;::::0;;;:15:::1;:27;::::0;;;;;:32;25882:64:::1;25878:209;;;25963:26;:7;25978:10;25963:26;:14;:26;:::i;:::-;-1:-1:-1::0;26064:10:0::1;26004:52;26034:21:::0;;;:9:::1;:21;::::0;;;;;;;;-1:-1:-1;;;;;26034:21:0::1;26004:52:::0;;:29:::1;:52:::0;;;;;:71:::1;::::0;::::1;:59;:71;:::i;23071:101::-:0;23124:4;23148:16;:7;:14;:16::i;:::-;23141:23;;23071:101;:::o;19988:52::-;;;;;;;;;;;;;:::o;27286:411::-;19593:32;19601:10;19593:30;:32::i;:::-;19591:35;:62;;;;-1:-1:-1;19630:9:0;19643:10;19630:23;19591:62;19583:96;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;;;;27342:25:::1;27356:10;27342:13;:25::i;:::-;27412:10;27378:11;27392:31:::0;;;:19:::1;:31;::::0;;;;;27438:10;;27434:256:::1;;27485:10;27499:1;27465:31:::0;;;:19:::1;:31;::::0;;;;;;;:35;;;27523:57;;-1:-1:-1;;;27523:57:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;18602:42:::1;::::0;27523:37:::1;::::0;:57;;;;;27465:31;27523:57;;;;;;;;18602:42;27523:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27523:57:0;27515:103:::1;;;;-1:-1:-1::0;;;27515:103:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27640:38;::::0;;;;;;;27659:10:::1;::::0;27640:38:::1;::::0;;;;;::::1;::::0;;::::1;27434:256;19690:1;27286:411::o:0;27709:474::-;19593:32;19601:10;19593:30;:32::i;:::-;19591:35;:62;;;;-1:-1:-1;19630:9:0;19643:10;19630:23;19591:62;19583:96;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;;;;27768:25:::1;27782:10;27768:13;:25::i;:::-;27838:10;27804:11;27818:31:::0;;;:19:::1;:31;::::0;;;;;27864:10;;27860:316:::1;;27911:10;27925:1;27891:31:::0;;;:19:::1;:31;::::0;;;;;;;:35;;;28016:15:::1;:27:::0;;;;;;:39:::1;::::0;28048:6;28016:39:::1;:31;:39;:::i;:::-;28002:10;27986:27;::::0;;;:15:::1;:27;::::0;;;;;;;;:69;;;;28136:28;;;;;;;28002:10;;28136:28:::1;::::0;;;;;;;::::1;19690:1;27709:474::o:0;19819:44::-;;;;;;;;;;;;;:::o;18738:47::-;18777:8;18738:47;:::o;19925:50::-;;;;;;;;;;;;;:::o;23973:1054::-;19593:32;19601:10;19593:30;:32::i;:::-;19591:35;:62;;;;-1:-1:-1;19630:9:0;19643:10;19630:23;19591:62;19583:96;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;-1:-1:-1;;;19583:96:0;;;;;;;;;;;;;;;24089:1:::1;24073:13;:17;24065:53;;;::::0;;-1:-1:-1;;;24065:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24137:83;::::0;;-1:-1:-1;;;24137:83:0;;24179:10:::1;24137:83;::::0;::::1;::::0;24199:4:::1;24137:83:::0;;;;;;;;;;;;18602:42:::1;::::0;24137:41:::1;::::0;:83;;;;;::::1;::::0;;;;;;;;-1:-1:-1;18602:42:0;24137:83;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24137:83:0;24129:124:::1;;;::::0;;-1:-1:-1;;;24129:124:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24274:25;24288:10;24274:13;:25::i;:::-;24320:8;24331:50;24377:3;24331:41;:13:::0;24320:8;24331:41:::1;:17;:41;:::i;:50::-;24320:61:::0;-1:-1:-1;24392:19:0::1;24414:22;:13:::0;24320:61;24414:22:::1;:17;:22;:::i;:::-;24493:5;::::0;;24455:49:::1;::::0;;-1:-1:-1;;;24455:49:0;;-1:-1:-1;;;;;24493:5:0;;::::1;24455:49;::::0;::::1;::::0;;;;;;;;24392:44;;-1:-1:-1;18602:42:0::1;::::0;24455:37:::1;::::0;:49;;;;;::::1;::::0;;;;;;;;;;;;18602:42;24455:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;24455:49:0;24447:93:::1;;;::::0;;-1:-1:-1;;;24447:93:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24607:10;24591:27;::::0;;;:15:::1;:27;::::0;;;;;:47:::1;::::0;24623:14;24591:47:::1;:31;:47;:::i;:::-;24577:10;24561:27;::::0;;;:15:::1;:27;::::0;;;;:77;;;;24659:23:::1;::::0;:7:::1;::::0;:23:::1;:11;:23;:::i;:::-;-1:-1:-1::0;24717:10:0::1;24740:1;24707:21:::0;;;:9:::1;:21;::::0;;;;;-1:-1:-1;;;;;24707:21:0::1;24703:100;;24769:10;24759:21;::::0;;;:9:::1;:21;::::0;;;;:32;;-1:-1:-1;;;;;;24759:32:0::1;-1:-1:-1::0;;;;;24759:32:0;::::1;;::::0;;24703:100:::1;24879:10;24823:51;24852:21:::0;;;:9:::1;:21;::::0;;;;;;;;-1:-1:-1;;;;;24852:21:0::1;24823:51:::0;;:28:::1;:51:::0;;;;;:67:::1;::::0;::::1;:55;:67;:::i;:::-;-1:-1:-1::0;24958:10:0::1;24901:52;24931:21:::0;;;:9:::1;:21;::::0;;;;;;;;-1:-1:-1;;;;;24931:21:0::1;24901:52:::0;;:29:::1;:52:::0;;;;;:68:::1;::::0;::::1;:56;:68;:::i;:::-;-1:-1:-1::0;;25002:10:0::1;24990:23;::::0;;;:11:::1;:23;::::0;;;;25016:3:::1;24990:29:::0;;-1:-1:-1;;;23973:1054:0:o;18818:47::-;18864:1;18818:47;:::o;17000:20::-;;;-1:-1:-1;;;;;17000:20:0;;:::o;21900:911::-;21962:4;21984:25;:7;22001;21984:25;:16;:25;:::i;:::-;21979:40;;-1:-1:-1;22018:1:0;22011:8;;21979:40;-1:-1:-1;;;;;22034:24:0;;;;;;:15;:24;;;;;;22030:43;;-1:-1:-1;22072:1:0;22065:8;;22030:43;22094:13;;22140:38;:17;18777:8;22140:38;:21;:38;:::i;:::-;22118:60;-1:-1:-1;22201:3:0;22219:21;;;22215:75;;;-1:-1:-1;22264:14:0;22215:75;-1:-1:-1;;;;;22314:24:0;;;;;;:15;:24;;;;;;:32;-1:-1:-1;22310:155:0;;22374:1;22363:12;;22310:155;;;-1:-1:-1;;;;;22428:24:0;;;;;;:15;:24;;;;;;22419:34;;:4;;:34;:8;:34;:::i;:::-;22408:45;;22310:155;-1:-1:-1;;;;;22497:24:0;;22477:17;22497:24;;;:15;:24;;;;;;;22561:199;22756:3;22561:160;18777:8;22561:160;22661:8;22561:65;22497:24;18727:4;22561:65;:46;:65;:::i;:::-;:99;:109;:99;:109;:::i;:199::-;22542:218;-1:-1:-1;;;;;;21900:911:0;;;;:::o;20053:45::-;;;;;;;;;;;;-1:-1:-1;;;;;20053:45:0;;:::o;18554:90::-;18602:42;18554:90;:::o;18901:50::-;18949:2;18901:50;:::o;19764:48::-;;;;;;;;;;;;;:::o;20105:55::-;;;;;;;;;;;;;:::o;19374:39::-;;;;:::o;29540:348::-;17430:5;;-1:-1:-1;;;;;17430:5:0;17416:10;:19;17408:28;;;;;;-1:-1:-1;;;;;29664:37:0;::::1;18602:42;29664:37;;::::0;:91:::1;;-1:-1:-1::0;29711:44:0::1;:17;19217:8;29711:44;:21;:44;:::i;:::-;29705:3;:50;29664:91;29655:137;;;::::0;;-1:-1:-1;;;29655:137:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29818:12;-1:-1:-1::0;;;;;29812:28:0::1;;29841:9;29852:6;29812:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;29812:47:0::1;-1:-1:-1::0;;;;;29812:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29812:47:0;29803:77:::1;;;::::0;;-1:-1:-1;;;29803:77:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29803:77:0;;;;;;;;;;;;;::::1;19332:35:::0;;;;:::o;19012:50::-;19059:3;19012:50;:::o;22823:236::-;22892:4;22909:12;22924:23;22939:7;22924:14;:23::i;:::-;-1:-1:-1;;;;;22979:28:0;;22958:18;22979:28;;;:19;:28;;;;;;22909:38;;-1:-1:-1;23025:26:0;22909:38;22979:28;23025:26;:11;:26;:::i;:::-;23018:33;22823:236;-1:-1:-1;;;;22823:236:0:o;18686:45::-;18727:4;18686:45;:::o;30070:330::-;17430:5;;-1:-1:-1;;;;;17430:5:0;17416:10;:19;17408:28;;;;;;-1:-1:-1;;;;;30200:37:0;::::1;18602:42;30200:37;;::::0;:91:::1;;-1:-1:-1::0;30247:44:0::1;:17;19217:8;30247:44;:21;:44;:::i;:::-;30241:3;:50;30200:91;30191:137;;;::::0;;-1:-1:-1;;;30191:137:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30351:12;-1:-1:-1::0;;;;;30339:34:0::1;;30374:9;30385:6;30339:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;30339:53:0::1;-1:-1:-1::0;;;;;30339:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30070:330:::0;;;:::o;17619:178::-;17430:5;;-1:-1:-1;;;;;17430:5:0;17416:10;:19;17408:28;;;;;;-1:-1:-1;;;;;17696:22:0;::::1;17688:31;;;::::0;::::1;;17752:5;::::0;;17731:37:::1;::::0;-1:-1:-1;;;;;17731:37:0;;::::1;::::0;17752:5;::::1;::::0;17731:37:::1;::::0;::::1;17775:5;:16:::0;;-1:-1:-1;;;;;;17775:16:0::1;-1:-1:-1::0;;;;;17775:16:0;;;::::1;::::0;;;::::1;::::0;;17619:178::o;19870:48::-;;;;;;;;;;;;;:::o;19117:42::-;19152:7;19117:42;:::o;19172:53::-;19217:8;19172:53;:::o;23184:276::-;-1:-1:-1;;;;;23330:39:0;;23261:19;23330:39;;;:29;:39;;;;;23261:19;;23330:48;;:46;:48::i;:::-;-1:-1:-1;;;;;23405:38:0;;;;;;:28;:38;;;;;23313:65;;-1:-1:-1;23405:47:0;;:45;:47::i;:::-;23389:63;;23184:276;;;:::o;1554:422::-;1921:20;1960:8;;;1554:422::o;614:113::-;672:7;700:1;695;:6;;688:14;;;;-1:-1:-1;716:5:0;;;614:113;;;;;:::o;185:147::-;243:7;271:5;;;290:6;;;:20;;;309:1;304;300;:5;;;;;;:10;290:20;283:28;;;;325:1;185:147;-1:-1:-1;;;185:147:0:o;338:270::-;396:7;487:9;503:1;499;:5;;;;;;;338:270;-1:-1:-1;;;;338:270:0:o;14315:158::-;14395:4;14419:46;14429:3;-1:-1:-1;;;;;14449:14:0;;14419:9;:46::i;14080:149::-;14153:4;14177:44;14185:3;-1:-1:-1;;;;;14205:14:0;;14177:7;:44::i;15020:149::-;15094:7;15137:22;15141:3;15153:5;15137:3;:22::i;733:133::-;791:7;819:5;;;838:6;;;;831:14;;;20433:890;20492:16;20511:23;20526:7;20511:14;:23::i;:::-;20492:42;-1:-1:-1;20549:15:0;;20545:730;;20581:16;20600:51;20645:5;20600:40;:11;19059:3;20600:40;:15;:40;:::i;:51::-;20581:70;-1:-1:-1;20666:24:0;20693:28;:11;20581:70;20693:28;:15;:28;:::i;:::-;-1:-1:-1;;;;;20795:18:0;;;20750:12;20795:18;;;:9;:18;;;;;;20666:55;;-1:-1:-1;20750:12:0;20765:62;;20795:18;20815:11;20765:29;:62::i;:::-;20750:77;-1:-1:-1;20870:11:0;20896:76;;;;-1:-1:-1;20937:19:0;20896:76;-1:-1:-1;;;;;21045:28:0;;;;;;:19;:28;;;;;;:40;;21078:6;21045:40;:32;:40;:::i;:::-;-1:-1:-1;;;;;21014:28:0;;;;;;:19;:28;;;;;;;;:71;;;;21129:17;:26;;;;:38;;21160:6;21129:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;21100:26:0;;;;;;:17;:26;;;;;:67;21218:19;;:31;;21242:6;21218:31;:23;:31;:::i;:::-;21196:19;:53;-1:-1:-1;;;;20545:730:0;-1:-1:-1;;;;;;21285:24:0;;;;;:15;:24;;;;;21312:3;21285:30;;20433:890::o;14559:117::-;14622:7;14649:19;14657:3;14649:7;:19::i;13761:143::-;13831:4;13855:41;13860:3;-1:-1:-1;;;;;13880:14:0;;13855:4;:41::i;12635:129::-;12708:4;12732:19;;;:12;;;;;:19;;;;;;:24;;;12635:129::o;11005:1544::-;11071:4;11210:19;;;:12;;;:19;;;;;;11246:15;;11242:1300;;11681:18;;-1:-1:-1;;11632:14:0;;;;11681:22;;;;11608:21;;11681:3;;:22;;11968;;;;;;;;;;;;;;11948:42;;12114:9;12085:3;:11;;12097:13;12085:26;;;;;;;;;;;;;;;;;;;:38;;;;12191:23;;;12233:1;12191:12;;;:23;;;;;;12217:17;;;12191:43;;12343:17;;12191:3;;12343:17;;;;;;;;;;;;;;;;;;;;;;12438:3;:12;;:19;12451:5;12438:19;;;;;;;;;;;12431:26;;;12481:4;12474:11;;;;;;;;11242:1300;12525:5;12518:12;;;;;13303:204;13398:18;;13370:7;;13398:26;-1:-1:-1;13390:73:0;;;;-1:-1:-1;;;13390:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13481:3;:11;;13493:5;13481:18;;;;;;;;;;;;;;;;13474:25;;13303:204;;;;:::o;21335:553::-;21421:4;-1:-1:-1;;;;;21442:21:0;;;;;;:35;;;21476:1;21467:6;:10;21442:35;21438:420;;;-1:-1:-1;;;;;21528:31:0;;;;;;:22;:31;;;;;;:43;;21564:6;21528:43;:35;:43;:::i;:::-;-1:-1:-1;;;;;21494:31:0;;;;;;:22;:31;;;;;;;;:77;;;;21594:54;;-1:-1:-1;;;21594:54:0;;;;;;;;;;;;;;;;;18602:42;;21594:37;;:54;;;;;21494:31;;21594:54;;;;;;;;;18602:42;21594:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21594:54:0;21586:99;;;;;-1:-1:-1;;;21586:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21726:23;;:35;;21754:6;21726:35;:27;:35;:::i;:::-;21700:23;:61;21781:39;;;;;;;;-1:-1:-1;;;;;21781:39:0;;;;;;;;;;;;;-1:-1:-1;21842:4:0;21835:11;;21438:420;-1:-1:-1;21875:5:0;21335:553;;;;:::o;12850:109::-;12933:18;;12850:109::o;10415:414::-;10478:4;10500:21;10510:3;10515:5;10500:9;:21::i;:::-;10495:327;;-1:-1:-1;10538:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;10721:18;;10699:19;;;:12;;;:19;;;;;;:40;;;;10754:11;;10495:327;-1:-1:-1;10805:5:0;10798:12;
Swarm Source
ipfs://f52be56718df4192d8e8e82921a94c4ba9da3f2f928d4a9da6a10916d5c3fc90
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.000748 | 529,686.0301 | $396.03 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.