More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 451 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 18723232 | 228 days ago | IN | 0 ETH | 0.01770857 | ||||
Unstake | 18539351 | 254 days ago | IN | 0 ETH | 0.01140074 | ||||
Get Reward | 18539348 | 254 days ago | IN | 0 ETH | 0.01179004 | ||||
Unstake | 18539336 | 254 days ago | IN | 0 ETH | 0.01088335 | ||||
Get Reward | 18539332 | 254 days ago | IN | 0 ETH | 0.01132934 | ||||
Unstake | 18539320 | 254 days ago | IN | 0 ETH | 0.01206796 | ||||
Unstake | 18539311 | 254 days ago | IN | 0 ETH | 0.01111801 | ||||
Get Reward | 18539301 | 254 days ago | IN | 0 ETH | 0.01169388 | ||||
Unstake | 18539287 | 254 days ago | IN | 0 ETH | 0.00960582 | ||||
Get Reward | 18539282 | 254 days ago | IN | 0 ETH | 0.00929781 | ||||
Unstake | 18539276 | 254 days ago | IN | 0 ETH | 0.01019859 | ||||
Get Reward | 18539273 | 254 days ago | IN | 0 ETH | 0.00988814 | ||||
Unstake | 18536372 | 254 days ago | IN | 0 ETH | 0.01721866 | ||||
Get Reward | 18536368 | 254 days ago | IN | 0 ETH | 0.01853794 | ||||
Get Reward | 18515787 | 257 days ago | IN | 0 ETH | 0.00240156 | ||||
Unstake | 18486726 | 261 days ago | IN | 0 ETH | 0.0107595 | ||||
Get Reward | 18486722 | 261 days ago | IN | 0 ETH | 0.0100505 | ||||
Unstake | 18485856 | 261 days ago | IN | 0 ETH | 0.00843385 | ||||
Get Reward | 18485821 | 261 days ago | IN | 0 ETH | 0.00739305 | ||||
Get Reward | 18472987 | 263 days ago | IN | 0 ETH | 0.00122341 | ||||
Get Reward | 18469925 | 263 days ago | IN | 0 ETH | 0.00060459 | ||||
Get Reward | 18469876 | 263 days ago | IN | 0 ETH | 0.00067862 | ||||
Unstake | 18469868 | 263 days ago | IN | 0 ETH | 0.00757392 | ||||
Get Reward | 18453161 | 266 days ago | IN | 0 ETH | 0.00056205 | ||||
Get Reward | 18441178 | 267 days ago | IN | 0 ETH | 0.00064261 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20175162 | 24 days ago | 0.00000318 ETH | ||||
20105561 | 34 days ago | 0.0000032 ETH | ||||
20071157 | 39 days ago | 0.00000328 ETH | ||||
19967597 | 53 days ago | 0.00000349 ETH | ||||
19928485 | 59 days ago | 0.00000352 ETH | ||||
19894232 | 64 days ago | 0.00000353 ETH | ||||
19821667 | 74 days ago | 0.00000353 ETH | ||||
19595618 | 106 days ago | 0.00000358 ETH | ||||
19583912 | 107 days ago | 0.00000363 ETH | ||||
19570074 | 109 days ago | 0.00000363 ETH | ||||
19482208 | 121 days ago | 0.00000377 ETH | ||||
19349075 | 140 days ago | 0.00000387 ETH | ||||
19319074 | 144 days ago | 0.00000402 ETH | ||||
19285085 | 149 days ago | 0.000004 ETH | ||||
19285080 | 149 days ago | 0.000004 ETH | ||||
19267129 | 152 days ago | 0.00000428 ETH | ||||
19263169 | 152 days ago | 0.00000458 ETH | ||||
19232846 | 156 days ago | 0.00000451 ETH | ||||
19224997 | 158 days ago | 0.00000465 ETH | ||||
19200638 | 161 days ago | 0.00000465 ETH | ||||
19142724 | 169 days ago | 0.00000476 ETH | ||||
19119798 | 172 days ago | 0.000005 ETH | ||||
19040474 | 183 days ago | 0.00000505 ETH | ||||
18982111 | 192 days ago | 0.00000516 ETH | ||||
18972496 | 193 days ago | 0.00000548 ETH |
Loading...
Loading
Contract Name:
StakeFixedAPYDuration
Compiler Version
v0.8.8+commit.dddeac2f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-22 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.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/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } // File: supermarket/contracts/stake.sol //SPDX-License-Identifier: MIT pragma solidity 0.8.8; pragma experimental ABIEncoderV2; //import "@openzeppelin/contracts/math/SafeMath.sol"; interface IMarket{ function claimTrade(uint256 epoch, uint256 amt,uint256 cp,address claimer,bytes memory signature) payable external; function claimMeme(uint256 epoch, uint256 amt,uint256 lp,uint256 cp,bytes memory signature,address cFor) external; } contract StakeFixedAPYDuration is Ownable { //using SafeMath for uint256; //using SafeERC20 for IERC20; IERC20 public stakeToken; uint256 public duration = 0; uint256 public unboundingDuration = 0; uint256 private _totalSupply; uint256 public taxCollectedFromUnstake = 0; uint256 public periodFinish = 0; uint256 public constant DENOMINATOR = 10000; uint256 public constant SECONDS_IN_YEAR = 365 days; uint256 public constant MIN_MAT_PERIOD = 3 days; // set to 3 days. uint256 public beforeMaturityUnstakeTaxNumerator = 500; uint256 public totalEthReward; uint256 private MIN_STAKE = 10000 * 10**18; address public rewardDistribution; address public trade; address public memecoin; bool public isStakingStarted = false; // Represents a single unstake for a user. A user may have multiple. struct Unstake { uint256 unstakingAmount; uint256 unstakingTime; } /** User Data */ struct UserData { uint256 stakeToken; uint256 rewards; uint256 lastUpdateTime; //uint256 duration; uint256 stakingTime; } mapping(address => UserData) public users; // The collection of unstakes for each user. mapping(address => Unstake) public userUnstake; // Time Duration & APR //mapping(uint256 => uint256) public monthlyAPR; uint256 private annualAPY; event Staked(address indexed user, uint256 amount); event Unstaked(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); event RecoverToken(address indexed token, uint256 indexed amount); event UnstakeAmountClaimed(address indexed user, uint256 amount); event RewardDistributionStarted(uint256 periodFinish); event RewardReInvested(address indexed user, uint256 reward); event UnstakeTaxCollected(uint256 indexed amount); modifier onlyRewardDistributor() { require( _msgSender() == rewardDistribution, "Caller is not reward distribution" ); _; } modifier updateReward(address account) { if (account != address(0)) { users[account].rewards = earned(account); } users[account].lastUpdateTime = lastTimeRewardApplicable(); _; } constructor( IERC20 _stakeToken, uint256 _duration, uint256 _unboundingDuration, address s, address m ) { // require(_forwarder != address(0), "Forwarder cannot be empty"); stakeToken = _stakeToken; duration = _duration; unboundingDuration = _unboundingDuration; //trustedForwarder = _forwarder; trade=s; memecoin=m; annualAPY = 20000;//200% APY } // function _msgSender() // internal // view // virtual // override(BaseRelayRecipient, Context) // returns (address payable) // { // return BaseRelayRecipient._msgSender(); // } function versionRecipient() external view virtual returns (string memory) {} function getUserData(address addr) external view returns (UserData memory user) { return users[addr]; } function lastTimeRewardApplicable() public view returns (uint256) { return Math.min(block.timestamp, periodFinish); } function earned(address account) public view returns (uint256) { uint256 earnedFromStakeCoin = users[account] .stakeToken * (lastTimeRewardApplicable()-(users[account].lastUpdateTime)) * (getAnnualAPY()); return (earnedFromStakeCoin)/(DENOMINATOR)/(SECONDS_IN_YEAR)+( users[account].rewards ); } function stake(uint256 amount) external updateReward(_msgSender()) { require(isStakingStarted, "Staking is not started yet"); require(amount > 0, "Cannot stake 0"); require(block.timestamp<periodFinish,"Staking period over"); // require( // users[_msgSender()].duration <= months, // "New staking duration must be greater than equal to previous staking duration" // ); _totalSupply += (amount); users[_msgSender()].stakeToken = users[_msgSender()].stakeToken+( amount ); //users[_msgSender()].duration = months; users[_msgSender()].stakingTime = block.timestamp; stakeToken.transferFrom(_msgSender(), address(this), amount); emit Staked(_msgSender(), amount); } function unstakeFor(address userAddress, uint256 amount, bool taxFlag) external onlyRewardDistributor updateReward(userAddress) { require(amount > 0, "Cannot withdraw 0"); require( users[userAddress].stakeToken >= amount, "User does not have sufficient balance" ); users[userAddress].stakeToken = users[userAddress].stakeToken -( amount ); if (taxFlag == true) { uint256 beforeMaturityUnstakeTax = amount * (beforeMaturityUnstakeTaxNumerator) /(DENOMINATOR); amount -= beforeMaturityUnstakeTax; taxCollectedFromUnstake += beforeMaturityUnstakeTax; } else { require( users[userAddress].stakingTime + ( (MIN_MAT_PERIOD) ) <= block.timestamp, "Cannot withdraw before maturity" ); } _unstake(userAddress, amount); } function unstake(uint256 amount) public updateReward(_msgSender()) { require(amount > 0, "Cannot withdraw 0"); require( users[_msgSender()].stakeToken >= amount, "User does not have sufficient balance" ); require( users[_msgSender()].stakingTime + ( (MIN_MAT_PERIOD) ) <= block.timestamp, "Cannot withdraw before maturity" ); users[_msgSender()].stakeToken = users[_msgSender()].stakeToken -( amount ); _unstake(_msgSender(), amount); } function setTradeMemeAddress(address t,address m) onlyRewardDistributor public { trade = t; memecoin=m; } function _unstake(address userAddress, uint256 amount) internal { uint256 myShare = amount*(DENOMINATOR)/_totalSupply; myShare = (totalEthReward*myShare)/(DENOMINATOR); totalEthReward=totalEthReward-myShare; _totalSupply = _totalSupply -(amount); getReward(); if (unboundingDuration == 0) { stakeToken.transfer(userAddress, amount); sendETHValue(payable(userAddress), myShare); } else { uint256 unboundingPeriodFinish = block.timestamp + ( unboundingDuration ); Unstake storage accountUnstake = userUnstake[userAddress]; accountUnstake.unstakingAmount = (accountUnstake.unstakingAmount) +(amount); accountUnstake.unstakingTime = unboundingPeriodFinish; } emit Unstaked(userAddress, amount); } function reinvest() external { _reinvest(_msgSender()); } function reinvestFor(address user) external onlyRewardDistributor { _reinvest(user); } function _reinvest(address user) internal updateReward(user) { uint256 reward = users[user].rewards; if (reward > 0) { users[user].rewards = 0; users[user].stakeToken = users[user].stakeToken+(reward); _totalSupply = _totalSupply+(reward); emit RewardReInvested(user, reward); } } function getAnnualAPY() public view returns (uint256) { //uint256 months = users[account].duration; return annualAPY; } function claimUnstakedAmount() external { Unstake storage accountUnstake = userUnstake[_msgSender()]; require( accountUnstake.unstakingAmount > 0, "No unstaked amount to claim" ); require( block.timestamp >= accountUnstake.unstakingTime, "Unbounding period not finished" ); uint256 _totalUnstakedAmount = accountUnstake.unstakingAmount; accountUnstake.unstakingAmount = 0; accountUnstake.unstakingTime = 0; stakeToken.transfer(_msgSender(), _totalUnstakedAmount); emit UnstakeAmountClaimed(_msgSender(), _totalUnstakedAmount); } //earn by claims function earnClaims(address s,uint256 epoch, uint256 amt,uint256 cp,uint256 lp,address claimer,bytes memory signature) external payable { require(users[msg.sender].stakeToken > MIN_STAKE ,"Min Eligiblity 10k"); if(s == memecoin){ IMarket(s).claimMeme( epoch, amt, lp, cp, signature, claimer); }else if(s == trade){ IMarket(s).claimTrade(epoch,amt,cp,claimer,signature); } return; } function totalUnstakedAmountReadyToClaim(address user) external view returns (uint256) { if (block.timestamp >= userUnstake[user].unstakingTime) { return userUnstake[user].unstakingAmount; } return 0; } function totalUnstakedAmount(address user) external view returns (uint256) { return userUnstake[user].unstakingAmount; } function getUnboundingTime(address user) external view returns (uint256) { return userUnstake[user].unstakingTime; } function exit() external { unstake(users[_msgSender()].stakeToken); getReward(); } function getReward() public updateReward(_msgSender()) { uint256 reward = users[_msgSender()].rewards; if (reward > 0) { users[_msgSender()].rewards = 0; stakeToken.transfer(_msgSender(), reward); emit RewardPaid(_msgSender(), reward); } } //Start Staking function notifyRewardDistribution() external onlyRewardDistributor updateReward(address(0)) { require(!isStakingStarted, "Staking is already started"); isStakingStarted = true; periodFinish = block.timestamp+(duration); emit RewardDistributionStarted(periodFinish); } function setAPY( uint256 apr) external onlyRewardDistributor { require(apr > 0, "month can not be 0"); annualAPY = apr; } function setRewardDistribution(address _rewardDistribution) external onlyOwner { rewardDistribution = _rewardDistribution; } function setDuration(uint256 _duration) external onlyRewardDistributor { duration = _duration; periodFinish = block.timestamp+(duration); } function setUnboundingDuration(uint256 _unboundingDuration) external onlyRewardDistributor { unboundingDuration = _unboundingDuration; } function setBeforeMaturityUnstakeTaxNumerator( uint256 _beforeMaturityUnstakeTaxNumerator ) external onlyRewardDistributor { beforeMaturityUnstakeTaxNumerator = _beforeMaturityUnstakeTaxNumerator; } function stopRewardDistribution() external onlyRewardDistributor { periodFinish = block.timestamp; } function updateRewardFor( address[] memory beneficiary, uint256[] memory rewards ) external onlyRewardDistributor { require(beneficiary.length == rewards.length, "Input length invalid"); for (uint256 i = 0; i < beneficiary.length; i++) { users[beneficiary[i]].rewards = (users[beneficiary[i]].rewards)+( rewards[i] ); } } function totalSupply() public view returns (uint256) { return _totalSupply; } function collectUnstakeTax() external onlyRewardDistributor { uint256 tax = taxCollectedFromUnstake; taxCollectedFromUnstake = 0; IERC20(stakeToken).transfer(_msgSender(), tax); emit UnstakeTaxCollected(tax); } function recoverExcessToken(address token, uint256 amount) external onlyRewardDistributor { IERC20(token).transfer(_msgSender(), amount); emit RecoverToken(token, amount); } function sendETHValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } receive() payable external{ totalEthReward+=msg.value; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_stakeToken","type":"address"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_unboundingDuration","type":"uint256"},{"internalType":"address","name":"s","type":"address"},{"internalType":"address","name":"m","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RecoverToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"periodFinish","type":"uint256"}],"name":"RewardDistributionStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardReInvested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeAmountClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeTaxCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_MAT_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_IN_YEAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beforeMaturityUnstakeTaxNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimUnstakedAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectUnstakeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"s","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"cp","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"address","name":"claimer","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"earnClaims","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAnnualAPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUnboundingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getUserData","outputs":[{"components":[{"internalType":"uint256","name":"stakeToken","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"stakingTime","type":"uint256"}],"internalType":"struct StakeFixedAPYDuration.UserData","name":"user","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStakingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"memecoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notifyRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverExcessToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"reinvestFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"apr","type":"uint256"}],"name":"setAPY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_beforeMaturityUnstakeTaxNumerator","type":"uint256"}],"name":"setBeforeMaturityUnstakeTaxNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardDistribution","type":"address"}],"name":"setRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"t","type":"address"},{"internalType":"address","name":"m","type":"address"}],"name":"setTradeMemeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_unboundingDuration","type":"uint256"}],"name":"setUnboundingDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopRewardDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taxCollectedFromUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"totalUnstakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"totalUnstakedAmountReadyToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trade","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unboundingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"taxFlag","type":"bool"}],"name":"unstakeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"beneficiary","type":"address[]"},{"internalType":"uint256[]","name":"rewards","type":"uint256[]"}],"name":"updateRewardFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userUnstake","outputs":[{"internalType":"uint256","name":"unstakingAmount","type":"uint256"},{"internalType":"uint256","name":"unstakingTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"stakeToken","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"stakingTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"versionRecipient","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260006002556000600355600060055560006006556101f460075569021e19e0c9bab24000006009556000600c60146101000a81548160ff0219169083151502179055503480156200005457600080fd5b5060405162004d0c38038062004d0c83398181016040528101906200007a919062000335565b6200009a6200008e6200017f60201b60201c565b6200018760201b60201c565b84600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836002819055508260038190555081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614e20600f819055505050505050620003bd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200027d8262000250565b9050919050565b6000620002918262000270565b9050919050565b620002a38162000284565b8114620002af57600080fd5b50565b600081519050620002c38162000298565b92915050565b6000819050919050565b620002de81620002c9565b8114620002ea57600080fd5b50565b600081519050620002fe81620002d3565b92915050565b6200030f8162000270565b81146200031b57600080fd5b50565b6000815190506200032f8162000304565b92915050565b600080600080600060a086880312156200035457620003536200024b565b5b60006200036488828901620002b2565b95505060206200037788828901620002ed565b94505060406200038a88828901620002ed565b93505060606200039d888289016200031e565b9250506080620003b0888289016200031e565b9150509295509295909350565b61493f80620003cd6000396000f3fe6080604052600436106102965760003560e01c806388dbe3e11161015a578063dffe0e65116100c1578063f2fde38b1161007a578063f2fde38b1461098a578063f5288a3b146109b3578063f6be71d1146109dc578063fdb5a03e14610a05578063ff378dd014610a1c578063ffc9896b14610a47576102b6565b8063dffe0e651461087a578063e454d080146108a5578063e8b6c1a0146108e2578063e9d354ed1461090b578063e9fad8ee14610948578063ebe2b12b1461095f576102b6565b8063aa9700c511610113578063aa9700c51461078a578063bf3d4272146107b3578063c31630a7146107de578063cb27265d146107f5578063ccfcecd614610833578063dca7bc661461085e576102b6565b806388dbe3e11461068b5780638da5cb5b146106a2578063918f8674146106cd5780639cf837c3146106f8578063a694fc3a14610721578063a87430ba1461074a576102b6565b80633d18b912116101fe5780636c617048116101b75780636c617048146105a15780636cb69b8a146105ca578063715018a6146105f357806375df1f8b1461060a57806380faa57d1461063557806384496ee414610660576102b6565b80633d18b912146104db57806342317f88146104f2578063486ff0cd14610509578063499e4b021461053457806351ed6a301461054b5780635dcc939114610576576102b6565b80631a37ea11116102505780631a37ea11146103cb5780631a5513f9146103f65780631f0ba6c91461042157806324f45e671461044c5780632ab767d2146104755780632e17de78146104b2576102b6565b80628cc262146102bb57806305f2bba9146102f85780630d68b761146103215780630fb5a6b41461034a578063101114cf1461037557806318160ddd146103a0576102b6565b366102b65734600860008282546102ad91906134f1565b92505081905550005b600080fd5b3480156102c757600080fd5b506102e260048036038101906102dd91906135b9565b610a84565b6040516102ef91906135f5565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190613674565b610baf565b005b34801561032d57600080fd5b50610348600480360381019061034391906135b9565b610f72565b005b34801561035657600080fd5b5061035f610fbe565b60405161036c91906135f5565b60405180910390f35b34801561038157600080fd5b5061038a610fc4565b60405161039791906136d6565b60405180910390f35b3480156103ac57600080fd5b506103b5610fea565b6040516103c291906135f5565b60405180910390f35b3480156103d757600080fd5b506103e0610ff4565b6040516103ed91906136d6565b60405180910390f35b34801561040257600080fd5b5061040b61101a565b60405161041891906135f5565b60405180910390f35b34801561042d57600080fd5b50610436611024565b60405161044391906136d6565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906136f1565b61104a565b005b34801561048157600080fd5b5061049c600480360381019061049791906135b9565b61112e565b6040516104a991906135f5565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906136f1565b61117a565b005b3480156104e757600080fd5b506104f0611474565b005b3480156104fe57600080fd5b50610507611705565b005b34801561051557600080fd5b5061051e611892565b60405161052b91906137b7565b60405180910390f35b34801561054057600080fd5b50610549611897565b005b34801561055757600080fd5b50610560611a9c565b60405161056d9190613838565b60405180910390f35b34801561058257600080fd5b5061058b611ac2565b60405161059891906135f5565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906135b9565b611aca565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613a5e565b611b6d565b005b3480156105ff57600080fd5b50610608611d4e565b005b34801561061657600080fd5b5061061f611d62565b60405161062c91906135f5565b60405180910390f35b34801561064157600080fd5b5061064a611d68565b60405161065791906135f5565b60405180910390f35b34801561066c57600080fd5b50610675611d7b565b60405161068291906135f5565b60405180910390f35b34801561069757600080fd5b506106a0611d81565b005b3480156106ae57600080fd5b506106b7611fa6565b6040516106c491906136d6565b60405180910390f35b3480156106d957600080fd5b506106e2611fcf565b6040516106ef91906135f5565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906136f1565b611fd5565b005b34801561072d57600080fd5b50610748600480360381019061074391906136f1565b612076565b005b34801561075657600080fd5b50610771600480360381019061076c91906135b9565b612441565b6040516107819493929190613ad6565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190613b1b565b612471565b005b3480156107bf57600080fd5b506107c86125e5565b6040516107d59190613b6a565b60405180910390f35b3480156107ea57600080fd5b506107f36125f8565b005b34801561080157600080fd5b5061081c600480360381019061081791906135b9565b612698565b60405161082a929190613b85565b60405180910390f35b34801561083f57600080fd5b506108486126bc565b60405161085591906135f5565b60405180910390f35b61087860048036038101906108739190613c63565b6126c2565b005b34801561088657600080fd5b5061088f6128ec565b60405161089c91906135f5565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906135b9565b6128f3565b6040516108d991906135f5565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190613d21565b61293f565b005b34801561091757600080fd5b50610932600480360381019061092d91906135b9565b612a5c565b60405161093f91906135f5565b60405180910390f35b34801561095457600080fd5b5061095d612afb565b005b34801561096b57600080fd5b50610974612b57565b60405161098191906135f5565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac91906135b9565b612b5d565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906136f1565b612be1565b005b3480156109e857600080fd5b50610a0360048036038101906109fe91906136f1565b612c82565b005b348015610a1157600080fd5b50610a1a612d37565b005b348015610a2857600080fd5b50610a31612d49565b604051610a3e91906135f5565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a6991906135b9565b612d4f565b604051610a7b9190613dc5565b60405180910390f35b600080610a8f61101a565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610ada611d68565b610ae49190613de0565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610b319190613e14565b610b3b9190613e14565b9050600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546301e1338061271083610b939190613e9d565b610b9d9190613e9d565b610ba791906134f1565b915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bf0612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613f40565b60405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ccb57610c8481610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b610cd3611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060008311610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613fac565b60405180910390fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd89061403e565b60405180910390fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610e2f9190613de0565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600115158215151415610ece57600061271060075485610e959190613e14565b610e9f9190613e9d565b90508084610ead9190613de0565b93508060056000828254610ec191906134f1565b9250508190555050610f62565b426203f480600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154610f2091906134f1565b1115610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f58906140aa565b60405180910390fd5b5b610f6c8484612dd8565b50505050565b610f7a612fda565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60025481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f54905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661108b612dd0565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890613f40565b60405180910390fd5b60008111611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90614116565b60405180910390fd5b80600f8190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b611182612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611206576111bf81610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b61120e611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060008211611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90613fac565b60405180910390fd5b81600d60006112a4612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a9061403e565b60405180910390fd5b426203f480600d6000611334612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461137c91906134f1565b11156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b4906140aa565b60405180910390fd5b81600d60006113ca612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114129190613de0565b600d600061141e612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061147061146a612dd0565b83612dd8565b5050565b61147c612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611500576114b981610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b611508611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600d600061155c612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000811115611701576000600d60006115b3612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61163a612dd0565b836040518363ffffffff1660e01b8152600401611658929190614136565b602060405180830381600087803b15801561167257600080fd5b505af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa9190614174565b506116b3612dd0565b73ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040516116f891906135f5565b60405180910390a25b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611746612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613f40565b60405180910390fd5b600060055490506000600581905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6117f1612dd0565b836040518363ffffffff1660e01b815260040161180f929190614136565b602060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118619190614174565b50807f507b0c96186ca66823080c2304b1347f1d556a427f8d9313c8dd6c80837bd2e360405160405180910390a250565b606090565b6000600e60006118a5612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906141ed565b60405180910390fd5b806001015442101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614259565b60405180910390fd5b6000816000015490506000826000018190555060008260010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6119d2612dd0565b836040518363ffffffff1660e01b81526004016119f0929190614136565b602060405180830381600087803b158015611a0a57600080fd5b505af1158015611a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a429190614174565b50611a4b612dd0565b73ffffffffffffffffffffffffffffffffffffffff167f68eaac9706eeb204caf6f55fe445c688dcc661b10e706b30e22ba544e38e5b0c82604051611a9091906135f5565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6301e1338081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b0b612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890613f40565b60405180910390fd5b611b6a81613058565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bae612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613f40565b60405180910390fd5b8051825114611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906142c5565b60405180910390fd5b60005b8251811015611d4957818181518110611c6757611c666142e5565b5b6020026020010151600d6000858481518110611c8657611c856142e5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611cd691906134f1565b600d6000858481518110611ced57611cec6142e5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508080611d4190614314565b915050611c4b565b505050565b611d56612fda565b611d6060006132bf565b565b60055481565b6000611d7642600654613383565b905090565b60075481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dc2612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613f40565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e9d57611e5681610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b611ea5611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600c60149054906101000a900460ff1615611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f32906143a9565b60405180910390fd5b6001600c60146101000a81548160ff02191690831515021790555060025442611f6491906134f1565b6006819055507facb909ab5c221a24cbde03d8fd1dea21218d0c9ed981b895982b6cba021b7e47600654604051611f9b91906135f5565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61271081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612016612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613f40565b60405180910390fd5b8060078190555050565b61207e612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612102576120bb81610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b61210a611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600c60149054906101000a900460ff1661219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690614415565b60405180910390fd5b600082116121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614481565b60405180910390fd5b6006544210612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d906144ed565b60405180910390fd5b816004600082825461223891906134f1565b9250508190555081600d600061224c612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461229491906134f1565b600d60006122a0612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600d60006122ee612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd612375612dd0565b30856040518463ffffffff1660e01b81526004016123959392919061450d565b602060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e79190614174565b506123f0612dd0565b73ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8360405161243591906135f5565b60405180910390a25050565b600d6020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124b2612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90613f40565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61252c612dd0565b836040518363ffffffff1660e01b815260040161254a929190614136565b602060405180830381600087803b15801561256457600080fd5b505af1158015612578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259c9190614174565b50808273ffffffffffffffffffffffffffffffffffffffff167ffba2d3bdfb2d601eb66a89783a2c614856101cadce71556753c2edadd60c831c60405160405180910390a35050565b600c60149054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612639612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461268f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268690613f40565b60405180910390fd5b42600681905550565b600e6020528060005260406000206000915090508060000154908060010154905082565b60085481565b600954600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614590565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415612818578673ffffffffffffffffffffffffffffffffffffffff166341d57a2e8787868886886040518763ffffffff1660e01b81526004016127e196959493929190614605565b600060405180830381600087803b1580156127fb57600080fd5b505af115801561280f573d6000803e3d6000fd5b505050506128e3565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156128e2578673ffffffffffffffffffffffffffffffffffffffff16631060c41287878786866040518663ffffffff1660e01b81526004016128af95949392919061466d565b600060405180830381600087803b1580156128c957600080fd5b505af11580156128dd573d6000803e3d6000fd5b505050505b5b50505050505050565b6203f48081565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612980612dd0565b73ffffffffffffffffffffffffffffffffffffffff16146129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90613f40565b60405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101544210612af157600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050612af6565b600090505b919050565b612b4d600d6000612b0a612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461117a565b612b55611474565b565b60065481565b612b65612fda565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90614739565b60405180910390fd5b612bde816132bf565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c22612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90613f40565b60405180910390fd5b8060038190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612cc3612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1090613f40565b60405180910390fd5b8060028190555060025442612d2e91906134f1565b60068190555050565b612d47612d42612dd0565b613058565b565b60035481565b612d57613490565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050919050565b600033905090565b600060045461271083612deb9190613e14565b612df59190613e9d565b905061271081600854612e089190613e14565b612e129190613e9d565b905080600854612e229190613de0565b60088190555081600454612e369190613de0565b600481905550612e44611474565b60006003541415612f0e57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401612eac929190614136565b602060405180830381600087803b158015612ec657600080fd5b505af1158015612eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efe9190614174565b50612f09838261339c565b612f87565b600060035442612f1e91906134f1565b90506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050838160000154612f7391906134f1565b816000018190555081816001018190555050505b8273ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7583604051612fcd91906135f5565b60405180910390a2505050565b612fe2612dd0565b73ffffffffffffffffffffffffffffffffffffffff16613000611fa6565b73ffffffffffffffffffffffffffffffffffffffff1614613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d906147a5565b60405180910390fd5b565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130dd5761309681610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b6130e5611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008111156132ba576000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461321191906134f1565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508060045461326591906134f1565b6004819055508273ffffffffffffffffffffffffffffffffffffffff167f8ee26b861a3c8ef0681db4da2b6ca4d6960b69a435ed2c6b9c4e25075d694e13826040516132b191906135f5565b60405180910390a25b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183106133925781613394565b825b905092915050565b804710156133df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d690614811565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161340590614862565b60006040518083038185875af1925050503d8060008114613442576040519150601f19603f3d011682016040523d82523d6000602084013e613447565b606091505b505090508061348b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613482906148e9565b60405180910390fd5b505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134fc826134b8565b9150613507836134b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561353c5761353b6134c2565b5b828201905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135868261355b565b9050919050565b6135968161357b565b81146135a157600080fd5b50565b6000813590506135b38161358d565b92915050565b6000602082840312156135cf576135ce613551565b5b60006135dd848285016135a4565b91505092915050565b6135ef816134b8565b82525050565b600060208201905061360a60008301846135e6565b92915050565b613619816134b8565b811461362457600080fd5b50565b60008135905061363681613610565b92915050565b60008115159050919050565b6136518161363c565b811461365c57600080fd5b50565b60008135905061366e81613648565b92915050565b60008060006060848603121561368d5761368c613551565b5b600061369b868287016135a4565b93505060206136ac86828701613627565b92505060406136bd8682870161365f565b9150509250925092565b6136d08161357b565b82525050565b60006020820190506136eb60008301846136c7565b92915050565b60006020828403121561370757613706613551565b5b600061371584828501613627565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561375857808201518184015260208101905061373d565b83811115613767576000848401525b50505050565b6000601f19601f8301169050919050565b60006137898261371e565b6137938185613729565b93506137a381856020860161373a565b6137ac8161376d565b840191505092915050565b600060208201905081810360008301526137d1818461377e565b905092915050565b6000819050919050565b60006137fe6137f96137f48461355b565b6137d9565b61355b565b9050919050565b6000613810826137e3565b9050919050565b600061382282613805565b9050919050565b61383281613817565b82525050565b600060208201905061384d6000830184613829565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138908261376d565b810181811067ffffffffffffffff821117156138af576138ae613858565b5b80604052505050565b60006138c2613547565b90506138ce8282613887565b919050565b600067ffffffffffffffff8211156138ee576138ed613858565b5b602082029050602081019050919050565b600080fd5b6000613917613912846138d3565b6138b8565b9050808382526020820190506020840283018581111561393a576139396138ff565b5b835b81811015613963578061394f88826135a4565b84526020840193505060208101905061393c565b5050509392505050565b600082601f83011261398257613981613853565b5b8135613992848260208601613904565b91505092915050565b600067ffffffffffffffff8211156139b6576139b5613858565b5b602082029050602081019050919050565b60006139da6139d58461399b565b6138b8565b905080838252602082019050602084028301858111156139fd576139fc6138ff565b5b835b81811015613a265780613a128882613627565b8452602084019350506020810190506139ff565b5050509392505050565b600082601f830112613a4557613a44613853565b5b8135613a558482602086016139c7565b91505092915050565b60008060408385031215613a7557613a74613551565b5b600083013567ffffffffffffffff811115613a9357613a92613556565b5b613a9f8582860161396d565b925050602083013567ffffffffffffffff811115613ac057613abf613556565b5b613acc85828601613a30565b9150509250929050565b6000608082019050613aeb60008301876135e6565b613af860208301866135e6565b613b0560408301856135e6565b613b1260608301846135e6565b95945050505050565b60008060408385031215613b3257613b31613551565b5b6000613b40858286016135a4565b9250506020613b5185828601613627565b9150509250929050565b613b648161363c565b82525050565b6000602082019050613b7f6000830184613b5b565b92915050565b6000604082019050613b9a60008301856135e6565b613ba760208301846135e6565b9392505050565b600080fd5b600067ffffffffffffffff821115613bce57613bcd613858565b5b613bd78261376d565b9050602081019050919050565b82818337600083830152505050565b6000613c06613c0184613bb3565b6138b8565b905082815260208101848484011115613c2257613c21613bae565b5b613c2d848285613be4565b509392505050565b600082601f830112613c4a57613c49613853565b5b8135613c5a848260208601613bf3565b91505092915050565b600080600080600080600060e0888a031215613c8257613c81613551565b5b6000613c908a828b016135a4565b9750506020613ca18a828b01613627565b9650506040613cb28a828b01613627565b9550506060613cc38a828b01613627565b9450506080613cd48a828b01613627565b93505060a0613ce58a828b016135a4565b92505060c088013567ffffffffffffffff811115613d0657613d05613556565b5b613d128a828b01613c35565b91505092959891949750929550565b60008060408385031215613d3857613d37613551565b5b6000613d46858286016135a4565b9250506020613d57858286016135a4565b9150509250929050565b613d6a816134b8565b82525050565b608082016000820151613d866000850182613d61565b506020820151613d996020850182613d61565b506040820151613dac6040850182613d61565b506060820151613dbf6060850182613d61565b50505050565b6000608082019050613dda6000830184613d70565b92915050565b6000613deb826134b8565b9150613df6836134b8565b925082821015613e0957613e086134c2565b5b828203905092915050565b6000613e1f826134b8565b9150613e2a836134b8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6357613e626134c2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ea8826134b8565b9150613eb3836134b8565b925082613ec357613ec2613e6e565b5b828204905092915050565b7f43616c6c6572206973206e6f742072657761726420646973747269627574696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f2a602183613729565b9150613f3582613ece565b604082019050919050565b60006020820190508181036000830152613f5981613f1d565b9050919050565b7f43616e6e6f742077697468647261772030000000000000000000000000000000600082015250565b6000613f96601183613729565b9150613fa182613f60565b602082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b7f5573657220646f6573206e6f7420686176652073756666696369656e7420626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b6000614028602583613729565b915061403382613fcc565b604082019050919050565b600060208201905081810360008301526140578161401b565b9050919050565b7f43616e6e6f74207769746864726177206265666f7265206d6174757269747900600082015250565b6000614094601f83613729565b915061409f8261405e565b602082019050919050565b600060208201905081810360008301526140c381614087565b9050919050565b7f6d6f6e74682063616e206e6f7420626520300000000000000000000000000000600082015250565b6000614100601283613729565b915061410b826140ca565b602082019050919050565b6000602082019050818103600083015261412f816140f3565b9050919050565b600060408201905061414b60008301856136c7565b61415860208301846135e6565b9392505050565b60008151905061416e81613648565b92915050565b60006020828403121561418a57614189613551565b5b60006141988482850161415f565b91505092915050565b7f4e6f20756e7374616b656420616d6f756e7420746f20636c61696d0000000000600082015250565b60006141d7601b83613729565b91506141e2826141a1565b602082019050919050565b60006020820190508181036000830152614206816141ca565b9050919050565b7f556e626f756e64696e6720706572696f64206e6f742066696e69736865640000600082015250565b6000614243601e83613729565b915061424e8261420d565b602082019050919050565b6000602082019050818103600083015261427281614236565b9050919050565b7f496e707574206c656e67746820696e76616c6964000000000000000000000000600082015250565b60006142af601483613729565b91506142ba82614279565b602082019050919050565b600060208201905081810360008301526142de816142a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061431f826134b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614352576143516134c2565b5b600182019050919050565b7f5374616b696e6720697320616c72656164792073746172746564000000000000600082015250565b6000614393601a83613729565b915061439e8261435d565b602082019050919050565b600060208201905081810360008301526143c281614386565b9050919050565b7f5374616b696e67206973206e6f74207374617274656420796574000000000000600082015250565b60006143ff601a83613729565b915061440a826143c9565b602082019050919050565b6000602082019050818103600083015261442e816143f2565b9050919050565b7f43616e6e6f74207374616b652030000000000000000000000000000000000000600082015250565b600061446b600e83613729565b915061447682614435565b602082019050919050565b6000602082019050818103600083015261449a8161445e565b9050919050565b7f5374616b696e6720706572696f64206f76657200000000000000000000000000600082015250565b60006144d7601383613729565b91506144e2826144a1565b602082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b600060608201905061452260008301866136c7565b61452f60208301856136c7565b61453c60408301846135e6565b949350505050565b7f4d696e20456c696769626c6974792031306b0000000000000000000000000000600082015250565b600061457a601283613729565b915061458582614544565b602082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145d7826145b0565b6145e181856145bb565b93506145f181856020860161373a565b6145fa8161376d565b840191505092915050565b600060c08201905061461a60008301896135e6565b61462760208301886135e6565b61463460408301876135e6565b61464160608301866135e6565b818103608083015261465381856145cc565b905061466260a08301846136c7565b979650505050505050565b600060a08201905061468260008301886135e6565b61468f60208301876135e6565b61469c60408301866135e6565b6146a960608301856136c7565b81810360808301526146bb81846145cc565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614723602683613729565b915061472e826146c7565b604082019050919050565b6000602082019050818103600083015261475281614716565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061478f602083613729565b915061479a82614759565b602082019050919050565b600060208201905081810360008301526147be81614782565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006147fb601d83613729565b9150614806826147c5565b602082019050919050565b6000602082019050818103600083015261482a816147ee565b9050919050565b600081905092915050565b50565b600061484c600083614831565b91506148578261483c565b600082019050919050565b600061486d8261483f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006148d3603a83613729565b91506148de82614877565b604082019050919050565b60006020820190508181036000830152614902816148c6565b905091905056fea26469706673582212208c9d4254d9fc79e4236a7d66ea0c907e8d17005ead06f123996bd33615fe7cc764736f6c634300080800330000000000000000000000006d8f7ac13e8c2944d27e0f9bc6aa0122f2ec138400000000000000000000000000000000000000000000000000000000003b538000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002184e4780ae760af1b662fb80e52cec9b5e2b8190000000000000000000000009f9c7a726d16e6e630c9500f5df8b3902b9ba2a6
Deployed Bytecode
0x6080604052600436106102965760003560e01c806388dbe3e11161015a578063dffe0e65116100c1578063f2fde38b1161007a578063f2fde38b1461098a578063f5288a3b146109b3578063f6be71d1146109dc578063fdb5a03e14610a05578063ff378dd014610a1c578063ffc9896b14610a47576102b6565b8063dffe0e651461087a578063e454d080146108a5578063e8b6c1a0146108e2578063e9d354ed1461090b578063e9fad8ee14610948578063ebe2b12b1461095f576102b6565b8063aa9700c511610113578063aa9700c51461078a578063bf3d4272146107b3578063c31630a7146107de578063cb27265d146107f5578063ccfcecd614610833578063dca7bc661461085e576102b6565b806388dbe3e11461068b5780638da5cb5b146106a2578063918f8674146106cd5780639cf837c3146106f8578063a694fc3a14610721578063a87430ba1461074a576102b6565b80633d18b912116101fe5780636c617048116101b75780636c617048146105a15780636cb69b8a146105ca578063715018a6146105f357806375df1f8b1461060a57806380faa57d1461063557806384496ee414610660576102b6565b80633d18b912146104db57806342317f88146104f2578063486ff0cd14610509578063499e4b021461053457806351ed6a301461054b5780635dcc939114610576576102b6565b80631a37ea11116102505780631a37ea11146103cb5780631a5513f9146103f65780631f0ba6c91461042157806324f45e671461044c5780632ab767d2146104755780632e17de78146104b2576102b6565b80628cc262146102bb57806305f2bba9146102f85780630d68b761146103215780630fb5a6b41461034a578063101114cf1461037557806318160ddd146103a0576102b6565b366102b65734600860008282546102ad91906134f1565b92505081905550005b600080fd5b3480156102c757600080fd5b506102e260048036038101906102dd91906135b9565b610a84565b6040516102ef91906135f5565b60405180910390f35b34801561030457600080fd5b5061031f600480360381019061031a9190613674565b610baf565b005b34801561032d57600080fd5b50610348600480360381019061034391906135b9565b610f72565b005b34801561035657600080fd5b5061035f610fbe565b60405161036c91906135f5565b60405180910390f35b34801561038157600080fd5b5061038a610fc4565b60405161039791906136d6565b60405180910390f35b3480156103ac57600080fd5b506103b5610fea565b6040516103c291906135f5565b60405180910390f35b3480156103d757600080fd5b506103e0610ff4565b6040516103ed91906136d6565b60405180910390f35b34801561040257600080fd5b5061040b61101a565b60405161041891906135f5565b60405180910390f35b34801561042d57600080fd5b50610436611024565b60405161044391906136d6565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906136f1565b61104a565b005b34801561048157600080fd5b5061049c600480360381019061049791906135b9565b61112e565b6040516104a991906135f5565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d491906136f1565b61117a565b005b3480156104e757600080fd5b506104f0611474565b005b3480156104fe57600080fd5b50610507611705565b005b34801561051557600080fd5b5061051e611892565b60405161052b91906137b7565b60405180910390f35b34801561054057600080fd5b50610549611897565b005b34801561055757600080fd5b50610560611a9c565b60405161056d9190613838565b60405180910390f35b34801561058257600080fd5b5061058b611ac2565b60405161059891906135f5565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906135b9565b611aca565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613a5e565b611b6d565b005b3480156105ff57600080fd5b50610608611d4e565b005b34801561061657600080fd5b5061061f611d62565b60405161062c91906135f5565b60405180910390f35b34801561064157600080fd5b5061064a611d68565b60405161065791906135f5565b60405180910390f35b34801561066c57600080fd5b50610675611d7b565b60405161068291906135f5565b60405180910390f35b34801561069757600080fd5b506106a0611d81565b005b3480156106ae57600080fd5b506106b7611fa6565b6040516106c491906136d6565b60405180910390f35b3480156106d957600080fd5b506106e2611fcf565b6040516106ef91906135f5565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906136f1565b611fd5565b005b34801561072d57600080fd5b50610748600480360381019061074391906136f1565b612076565b005b34801561075657600080fd5b50610771600480360381019061076c91906135b9565b612441565b6040516107819493929190613ad6565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190613b1b565b612471565b005b3480156107bf57600080fd5b506107c86125e5565b6040516107d59190613b6a565b60405180910390f35b3480156107ea57600080fd5b506107f36125f8565b005b34801561080157600080fd5b5061081c600480360381019061081791906135b9565b612698565b60405161082a929190613b85565b60405180910390f35b34801561083f57600080fd5b506108486126bc565b60405161085591906135f5565b60405180910390f35b61087860048036038101906108739190613c63565b6126c2565b005b34801561088657600080fd5b5061088f6128ec565b60405161089c91906135f5565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906135b9565b6128f3565b6040516108d991906135f5565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190613d21565b61293f565b005b34801561091757600080fd5b50610932600480360381019061092d91906135b9565b612a5c565b60405161093f91906135f5565b60405180910390f35b34801561095457600080fd5b5061095d612afb565b005b34801561096b57600080fd5b50610974612b57565b60405161098191906135f5565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac91906135b9565b612b5d565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906136f1565b612be1565b005b3480156109e857600080fd5b50610a0360048036038101906109fe91906136f1565b612c82565b005b348015610a1157600080fd5b50610a1a612d37565b005b348015610a2857600080fd5b50610a31612d49565b604051610a3e91906135f5565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a6991906135b9565b612d4f565b604051610a7b9190613dc5565b60405180910390f35b600080610a8f61101a565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610ada611d68565b610ae49190613de0565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610b319190613e14565b610b3b9190613e14565b9050600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546301e1338061271083610b939190613e9d565b610b9d9190613e9d565b610ba791906134f1565b915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bf0612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613f40565b60405180910390fd5b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ccb57610c8481610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b610cd3611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060008311610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613fac565b60405180910390fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd89061403e565b60405180910390fd5b82600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610e2f9190613de0565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600115158215151415610ece57600061271060075485610e959190613e14565b610e9f9190613e9d565b90508084610ead9190613de0565b93508060056000828254610ec191906134f1565b9250508190555050610f62565b426203f480600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154610f2091906134f1565b1115610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f58906140aa565b60405180910390fd5b5b610f6c8484612dd8565b50505050565b610f7a612fda565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60025481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f54905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661108b612dd0565b73ffffffffffffffffffffffffffffffffffffffff16146110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890613f40565b60405180910390fd5b60008111611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90614116565b60405180910390fd5b80600f8190555050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b611182612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611206576111bf81610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b61120e611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555060008211611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90613fac565b60405180910390fd5b81600d60006112a4612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541015611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a9061403e565b60405180910390fd5b426203f480600d6000611334612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015461137c91906134f1565b11156113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b4906140aa565b60405180910390fd5b81600d60006113ca612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546114129190613de0565b600d600061141e612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061147061146a612dd0565b83612dd8565b5050565b61147c612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611500576114b981610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b611508611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600d600061155c612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000811115611701576000600d60006115b3612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61163a612dd0565b836040518363ffffffff1660e01b8152600401611658929190614136565b602060405180830381600087803b15801561167257600080fd5b505af1158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa9190614174565b506116b3612dd0565b73ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040516116f891906135f5565b60405180910390a25b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611746612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613f40565b60405180910390fd5b600060055490506000600581905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6117f1612dd0565b836040518363ffffffff1660e01b815260040161180f929190614136565b602060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118619190614174565b50807f507b0c96186ca66823080c2304b1347f1d556a427f8d9313c8dd6c80837bd2e360405160405180910390a250565b606090565b6000600e60006118a5612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f906141ed565b60405180910390fd5b806001015442101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614259565b60405180910390fd5b6000816000015490506000826000018190555060008260010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6119d2612dd0565b836040518363ffffffff1660e01b81526004016119f0929190614136565b602060405180830381600087803b158015611a0a57600080fd5b505af1158015611a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a429190614174565b50611a4b612dd0565b73ffffffffffffffffffffffffffffffffffffffff167f68eaac9706eeb204caf6f55fe445c688dcc661b10e706b30e22ba544e38e5b0c82604051611a9091906135f5565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6301e1338081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b0b612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890613f40565b60405180910390fd5b611b6a81613058565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bae612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613f40565b60405180910390fd5b8051825114611c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3f906142c5565b60405180910390fd5b60005b8251811015611d4957818181518110611c6757611c666142e5565b5b6020026020010151600d6000858481518110611c8657611c856142e5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154611cd691906134f1565b600d6000858481518110611ced57611cec6142e5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508080611d4190614314565b915050611c4b565b505050565b611d56612fda565b611d6060006132bf565b565b60055481565b6000611d7642600654613383565b905090565b60075481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dc2612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613f40565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e9d57611e5681610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b611ea5611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600c60149054906101000a900460ff1615611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f32906143a9565b60405180910390fd5b6001600c60146101000a81548160ff02191690831515021790555060025442611f6491906134f1565b6006819055507facb909ab5c221a24cbde03d8fd1dea21218d0c9ed981b895982b6cba021b7e47600654604051611f9b91906135f5565b60405180910390a150565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61271081565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612016612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613f40565b60405180910390fd5b8060078190555050565b61207e612dd0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612102576120bb81610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b61210a611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600c60149054906101000a900460ff1661219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690614415565b60405180910390fd5b600082116121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614481565b60405180910390fd5b6006544210612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d906144ed565b60405180910390fd5b816004600082825461223891906134f1565b9250508190555081600d600061224c612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461229491906134f1565b600d60006122a0612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600d60006122ee612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd612375612dd0565b30856040518463ffffffff1660e01b81526004016123959392919061450d565b602060405180830381600087803b1580156123af57600080fd5b505af11580156123c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e79190614174565b506123f0612dd0565b73ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8360405161243591906135f5565b60405180910390a25050565b600d6020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166124b2612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90613f40565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61252c612dd0565b836040518363ffffffff1660e01b815260040161254a929190614136565b602060405180830381600087803b15801561256457600080fd5b505af1158015612578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259c9190614174565b50808273ffffffffffffffffffffffffffffffffffffffff167ffba2d3bdfb2d601eb66a89783a2c614856101cadce71556753c2edadd60c831c60405160405180910390a35050565b600c60149054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612639612dd0565b73ffffffffffffffffffffffffffffffffffffffff161461268f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268690613f40565b60405180910390fd5b42600681905550565b600e6020528060005260406000206000915090508060000154908060010154905082565b60085481565b600954600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614590565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415612818578673ffffffffffffffffffffffffffffffffffffffff166341d57a2e8787868886886040518763ffffffff1660e01b81526004016127e196959493929190614605565b600060405180830381600087803b1580156127fb57600080fd5b505af115801561280f573d6000803e3d6000fd5b505050506128e3565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156128e2578673ffffffffffffffffffffffffffffffffffffffff16631060c41287878786866040518663ffffffff1660e01b81526004016128af95949392919061466d565b600060405180830381600087803b1580156128c957600080fd5b505af11580156128dd573d6000803e3d6000fd5b505050505b5b50505050505050565b6203f48081565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612980612dd0565b73ffffffffffffffffffffffffffffffffffffffff16146129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90613f40565b60405180910390fd5b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101544210612af157600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050612af6565b600090505b919050565b612b4d600d6000612b0a612dd0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461117a565b612b55611474565b565b60065481565b612b65612fda565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90614739565b60405180910390fd5b612bde816132bf565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612c22612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90613f40565b60405180910390fd5b8060038190555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612cc3612dd0565b73ffffffffffffffffffffffffffffffffffffffff1614612d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1090613f40565b60405180910390fd5b8060028190555060025442612d2e91906134f1565b60068190555050565b612d47612d42612dd0565b613058565b565b60035481565b612d57613490565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050919050565b600033905090565b600060045461271083612deb9190613e14565b612df59190613e9d565b905061271081600854612e089190613e14565b612e129190613e9d565b905080600854612e229190613de0565b60088190555081600454612e369190613de0565b600481905550612e44611474565b60006003541415612f0e57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401612eac929190614136565b602060405180830381600087803b158015612ec657600080fd5b505af1158015612eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612efe9190614174565b50612f09838261339c565b612f87565b600060035442612f1e91906134f1565b90506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050838160000154612f7391906134f1565b816000018190555081816001018190555050505b8273ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7583604051612fcd91906135f5565b60405180910390a2505050565b612fe2612dd0565b73ffffffffffffffffffffffffffffffffffffffff16613000611fa6565b73ffffffffffffffffffffffffffffffffffffffff1614613056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304d906147a5565b60405180910390fd5b565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146130dd5761309681610a84565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b6130e5611d68565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905060008111156132ba576000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461321191906134f1565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508060045461326591906134f1565b6004819055508273ffffffffffffffffffffffffffffffffffffffff167f8ee26b861a3c8ef0681db4da2b6ca4d6960b69a435ed2c6b9c4e25075d694e13826040516132b191906135f5565b60405180910390a25b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183106133925781613394565b825b905092915050565b804710156133df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d690614811565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161340590614862565b60006040518083038185875af1925050503d8060008114613442576040519150601f19603f3d011682016040523d82523d6000602084013e613447565b606091505b505090508061348b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613482906148e9565b60405180910390fd5b505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134fc826134b8565b9150613507836134b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561353c5761353b6134c2565b5b828201905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135868261355b565b9050919050565b6135968161357b565b81146135a157600080fd5b50565b6000813590506135b38161358d565b92915050565b6000602082840312156135cf576135ce613551565b5b60006135dd848285016135a4565b91505092915050565b6135ef816134b8565b82525050565b600060208201905061360a60008301846135e6565b92915050565b613619816134b8565b811461362457600080fd5b50565b60008135905061363681613610565b92915050565b60008115159050919050565b6136518161363c565b811461365c57600080fd5b50565b60008135905061366e81613648565b92915050565b60008060006060848603121561368d5761368c613551565b5b600061369b868287016135a4565b93505060206136ac86828701613627565b92505060406136bd8682870161365f565b9150509250925092565b6136d08161357b565b82525050565b60006020820190506136eb60008301846136c7565b92915050565b60006020828403121561370757613706613551565b5b600061371584828501613627565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561375857808201518184015260208101905061373d565b83811115613767576000848401525b50505050565b6000601f19601f8301169050919050565b60006137898261371e565b6137938185613729565b93506137a381856020860161373a565b6137ac8161376d565b840191505092915050565b600060208201905081810360008301526137d1818461377e565b905092915050565b6000819050919050565b60006137fe6137f96137f48461355b565b6137d9565b61355b565b9050919050565b6000613810826137e3565b9050919050565b600061382282613805565b9050919050565b61383281613817565b82525050565b600060208201905061384d6000830184613829565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138908261376d565b810181811067ffffffffffffffff821117156138af576138ae613858565b5b80604052505050565b60006138c2613547565b90506138ce8282613887565b919050565b600067ffffffffffffffff8211156138ee576138ed613858565b5b602082029050602081019050919050565b600080fd5b6000613917613912846138d3565b6138b8565b9050808382526020820190506020840283018581111561393a576139396138ff565b5b835b81811015613963578061394f88826135a4565b84526020840193505060208101905061393c565b5050509392505050565b600082601f83011261398257613981613853565b5b8135613992848260208601613904565b91505092915050565b600067ffffffffffffffff8211156139b6576139b5613858565b5b602082029050602081019050919050565b60006139da6139d58461399b565b6138b8565b905080838252602082019050602084028301858111156139fd576139fc6138ff565b5b835b81811015613a265780613a128882613627565b8452602084019350506020810190506139ff565b5050509392505050565b600082601f830112613a4557613a44613853565b5b8135613a558482602086016139c7565b91505092915050565b60008060408385031215613a7557613a74613551565b5b600083013567ffffffffffffffff811115613a9357613a92613556565b5b613a9f8582860161396d565b925050602083013567ffffffffffffffff811115613ac057613abf613556565b5b613acc85828601613a30565b9150509250929050565b6000608082019050613aeb60008301876135e6565b613af860208301866135e6565b613b0560408301856135e6565b613b1260608301846135e6565b95945050505050565b60008060408385031215613b3257613b31613551565b5b6000613b40858286016135a4565b9250506020613b5185828601613627565b9150509250929050565b613b648161363c565b82525050565b6000602082019050613b7f6000830184613b5b565b92915050565b6000604082019050613b9a60008301856135e6565b613ba760208301846135e6565b9392505050565b600080fd5b600067ffffffffffffffff821115613bce57613bcd613858565b5b613bd78261376d565b9050602081019050919050565b82818337600083830152505050565b6000613c06613c0184613bb3565b6138b8565b905082815260208101848484011115613c2257613c21613bae565b5b613c2d848285613be4565b509392505050565b600082601f830112613c4a57613c49613853565b5b8135613c5a848260208601613bf3565b91505092915050565b600080600080600080600060e0888a031215613c8257613c81613551565b5b6000613c908a828b016135a4565b9750506020613ca18a828b01613627565b9650506040613cb28a828b01613627565b9550506060613cc38a828b01613627565b9450506080613cd48a828b01613627565b93505060a0613ce58a828b016135a4565b92505060c088013567ffffffffffffffff811115613d0657613d05613556565b5b613d128a828b01613c35565b91505092959891949750929550565b60008060408385031215613d3857613d37613551565b5b6000613d46858286016135a4565b9250506020613d57858286016135a4565b9150509250929050565b613d6a816134b8565b82525050565b608082016000820151613d866000850182613d61565b506020820151613d996020850182613d61565b506040820151613dac6040850182613d61565b506060820151613dbf6060850182613d61565b50505050565b6000608082019050613dda6000830184613d70565b92915050565b6000613deb826134b8565b9150613df6836134b8565b925082821015613e0957613e086134c2565b5b828203905092915050565b6000613e1f826134b8565b9150613e2a836134b8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6357613e626134c2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ea8826134b8565b9150613eb3836134b8565b925082613ec357613ec2613e6e565b5b828204905092915050565b7f43616c6c6572206973206e6f742072657761726420646973747269627574696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f2a602183613729565b9150613f3582613ece565b604082019050919050565b60006020820190508181036000830152613f5981613f1d565b9050919050565b7f43616e6e6f742077697468647261772030000000000000000000000000000000600082015250565b6000613f96601183613729565b9150613fa182613f60565b602082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b7f5573657220646f6573206e6f7420686176652073756666696369656e7420626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b6000614028602583613729565b915061403382613fcc565b604082019050919050565b600060208201905081810360008301526140578161401b565b9050919050565b7f43616e6e6f74207769746864726177206265666f7265206d6174757269747900600082015250565b6000614094601f83613729565b915061409f8261405e565b602082019050919050565b600060208201905081810360008301526140c381614087565b9050919050565b7f6d6f6e74682063616e206e6f7420626520300000000000000000000000000000600082015250565b6000614100601283613729565b915061410b826140ca565b602082019050919050565b6000602082019050818103600083015261412f816140f3565b9050919050565b600060408201905061414b60008301856136c7565b61415860208301846135e6565b9392505050565b60008151905061416e81613648565b92915050565b60006020828403121561418a57614189613551565b5b60006141988482850161415f565b91505092915050565b7f4e6f20756e7374616b656420616d6f756e7420746f20636c61696d0000000000600082015250565b60006141d7601b83613729565b91506141e2826141a1565b602082019050919050565b60006020820190508181036000830152614206816141ca565b9050919050565b7f556e626f756e64696e6720706572696f64206e6f742066696e69736865640000600082015250565b6000614243601e83613729565b915061424e8261420d565b602082019050919050565b6000602082019050818103600083015261427281614236565b9050919050565b7f496e707574206c656e67746820696e76616c6964000000000000000000000000600082015250565b60006142af601483613729565b91506142ba82614279565b602082019050919050565b600060208201905081810360008301526142de816142a2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061431f826134b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614352576143516134c2565b5b600182019050919050565b7f5374616b696e6720697320616c72656164792073746172746564000000000000600082015250565b6000614393601a83613729565b915061439e8261435d565b602082019050919050565b600060208201905081810360008301526143c281614386565b9050919050565b7f5374616b696e67206973206e6f74207374617274656420796574000000000000600082015250565b60006143ff601a83613729565b915061440a826143c9565b602082019050919050565b6000602082019050818103600083015261442e816143f2565b9050919050565b7f43616e6e6f74207374616b652030000000000000000000000000000000000000600082015250565b600061446b600e83613729565b915061447682614435565b602082019050919050565b6000602082019050818103600083015261449a8161445e565b9050919050565b7f5374616b696e6720706572696f64206f76657200000000000000000000000000600082015250565b60006144d7601383613729565b91506144e2826144a1565b602082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b600060608201905061452260008301866136c7565b61452f60208301856136c7565b61453c60408301846135e6565b949350505050565b7f4d696e20456c696769626c6974792031306b0000000000000000000000000000600082015250565b600061457a601283613729565b915061458582614544565b602082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006145d7826145b0565b6145e181856145bb565b93506145f181856020860161373a565b6145fa8161376d565b840191505092915050565b600060c08201905061461a60008301896135e6565b61462760208301886135e6565b61463460408301876135e6565b61464160608301866135e6565b818103608083015261465381856145cc565b905061466260a08301846136c7565b979650505050505050565b600060a08201905061468260008301886135e6565b61468f60208301876135e6565b61469c60408301866135e6565b6146a960608301856136c7565b81810360808301526146bb81846145cc565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614723602683613729565b915061472e826146c7565b604082019050919050565b6000602082019050818103600083015261475281614716565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061478f602083613729565b915061479a82614759565b602082019050919050565b600060208201905081810360008301526147be81614782565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006147fb601d83613729565b9150614806826147c5565b602082019050919050565b6000602082019050818103600083015261482a816147ee565b9050919050565b600081905092915050565b50565b600061484c600083614831565b91506148578261483c565b600082019050919050565b600061486d8261483f565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006148d3603a83613729565b91506148de82614877565b604082019050919050565b60006020820190508181036000830152614902816148c6565b905091905056fea26469706673582212208c9d4254d9fc79e4236a7d66ea0c907e8d17005ead06f123996bd33615fe7cc764736f6c63430008080033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006d8f7ac13e8c2944d27e0f9bc6aa0122f2ec138400000000000000000000000000000000000000000000000000000000003b538000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002184e4780ae760af1b662fb80e52cec9b5e2b8190000000000000000000000009f9c7a726d16e6e630c9500f5df8b3902b9ba2a6
-----Decoded View---------------
Arg [0] : _stakeToken (address): 0x6D8f7Ac13E8c2944D27e0f9BC6aA0122f2eC1384
Arg [1] : _duration (uint256): 3888000
Arg [2] : _unboundingDuration (uint256): 0
Arg [3] : s (address): 0x2184E4780ae760af1b662Fb80e52CEC9b5e2B819
Arg [4] : m (address): 0x9F9c7a726D16e6e630c9500f5DF8b3902B9BA2A6
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000006d8f7ac13e8c2944d27e0f9bc6aa0122f2ec1384
Arg [1] : 00000000000000000000000000000000000000000000000000000000003b5380
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000002184e4780ae760af1b662fb80e52cec9b5e2b819
Arg [4] : 0000000000000000000000009f9c7a726d16e6e630c9500f5df8b3902b9ba2a6
Deployed Bytecode Sourcemap
20046:13289:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33315:9;33299:14;;:25;;;;;;;:::i;:::-;;;;;;;;20046:13289;;;;;23604:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24834:1033;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31050:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20198:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20723:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32353:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20790:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28155:174;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20763:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30875:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29939:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25875:632;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30190:310;;;;;;;;;;;;;:::i;:::-;;32452:251;;;;;;;;;;;;;:::i;:::-;;23183:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28337:683;;;;;;;;;;;;;:::i;:::-;;20165:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20448:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27675:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31926:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5614:103;;;;;;;;;;;;;:::i;:::-;;20311:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23465:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20577:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30527:340;;;;;;;;;;;;;:::i;:::-;;4973:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20398:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31570:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23988:838;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21248:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32711:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20826:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31804:114;;;;;;;;;;;;;:::i;:::-;;21346:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;20638:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29048:454;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20505:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29797:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26515:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29510:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30077:105;;;;;;;;;;;;;:::i;:::-;;20360:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5872:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31389:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31219:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27596:71;;;;;;;;;;;;;:::i;:::-;;20232:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23308:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23604:376;23658:7;23678:27;23814:14;:12;:14::i;:::-;23779:5;:14;23785:7;23779:14;;;;;;;;;;;;;;;:29;;;23751:26;:24;:26::i;:::-;:58;;;;:::i;:::-;23708:5;:14;23714:7;23708:14;;;;;;;;;;;;;;;:39;;;:102;;;;:::i;:::-;:121;;;;:::i;:::-;23678:151;;23935:5;:14;23941:7;23935:14;;;;;;;;;;;;;;;:22;;;20490:8;20436:5;23863:19;23862:35;;;;:::i;:::-;:53;;;;:::i;:::-;:110;;;;:::i;:::-;23842:130;;;23604:376;;;:::o;24834:1033::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;24967:11:::1;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;25013:1:::2;25004:6;:10;24996:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;25102:6;25069:5;:18;25075:11;25069:18;;;;;;;;;;;;;;;:29;;;:39;;25047:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;25262:6;25216:5;:18;25222:11;25216:18;;;;;;;;;;;;;;;:29;;;:63;;;;:::i;:::-;25184:5;:18;25190:11;25184:18;;;;;;;;;;;;;;;:29;;:95;;;;25307:4;25296:15;;:7;:15;;;25292:528;;;25328:32;20436:5;25390:33;;25363:6;:61;;;;:::i;:::-;:93;;;;:::i;:::-;25328:128;;25481:24;25471:34;;;;;:::i;:::-;;;25547:24;25520:23;;:51;;;;;;;:::i;:::-;;;;;;;;25313:270;25292:528;;;25726:15;20546:6;25630:5;:18;25636:11;25630:18;;;;;;;;;;;;;;;:30;;;:92;;;;:::i;:::-;:111;;25604:204;;;;;;;;;;;;:::i;:::-;;;;;;;;;25292:528;25830:29;25839:11;25852:6;25830:8;:29::i;:::-;22192:1:::1;24834:1033:::0;;;:::o;31050:161::-;4859:13;:11;:13::i;:::-;31184:19:::1;31163:18;;:40;;;;;;;;;;;;;;;;;;31050:161:::0;:::o;20198:27::-;;;;:::o;20723:33::-;;;;;;;;;;;;;:::o;32353:91::-;32397:7;32424:12;;32417:19;;32353:91;:::o;20790:23::-;;;;;;;;;;;;;:::o;28155:174::-;28227:7;28312:9;;28305:16;;28155:174;:::o;20763:20::-;;;;;;;;;;;;;:::o;30875:167::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;30984:1:::1;30978:3;:7;30970:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31031:3;31019:9;:15;;;;30875:167:::0;:::o;29939:130::-;30003:7;30030:11;:17;30042:4;30030:17;;;;;;;;;;;;;;;:31;;;30023:38;;29939:130;;;:::o;25875:632::-;25946:12;:10;:12::i;:::-;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;25993:1:::1;25984:6;:10;25976:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;26083:6;26049:5;:19;26055:12;:10;:12::i;:::-;26049:19;;;;;;;;;;;;;;;:30;;;:40;;26027:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;26276:15;20546:6;26187:5;:19;26193:12;:10;:12::i;:::-;26187:19;;;;;;;;;;;;;;;:31;;;:85;;;;:::i;:::-;:104;;26165:185;;;;;;;;;;;;:::i;:::-;;;;;;;;;26441:6;26394:5;:19;26400:12;:10;:12::i;:::-;26394:19;;;;;;;;;;;;;;;:30;;;:64;;;;:::i;:::-;26361:5;:19;26367:12;:10;:12::i;:::-;26361:19;;;;;;;;;;;;;;;:30;;:97;;;;26469:30;26478:12;:10;:12::i;:::-;26492:6;26469:8;:30::i;:::-;25875:632:::0;;:::o;30190:310::-;30231:12;:10;:12::i;:::-;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;30256:14:::1;30273:5;:19;30279:12;:10;:12::i;:::-;30273:19;;;;;;;;;;;;;;;:27;;;30256:44;;30324:1;30315:6;:10;30311:182;;;30372:1;30342:5;:19;30348:12;:10;:12::i;:::-;30342:19;;;;;;;;;;;;;;;:27;;:31;;;;30388:10;;;;;;;;;;;:19;;;30408:12;:10;:12::i;:::-;30422:6;30388:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30460:12;:10;:12::i;:::-;30449:32;;;30474:6;30449:32;;;;;;:::i;:::-;;;;;;;;30311:182;30245:255;30190:310:::0;:::o;32452:251::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;32523:11:::1;32537:23;;32523:37;;32597:1;32571:23;:27;;;;32616:10;;;;;;;;;;;32609:27;;;32637:12;:10;:12::i;:::-;32651:3;32609:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32691:3;32671:24;;;;;;;;;;32512:191;32452:251::o:0;23183:117::-;23278:13;23183:117;:::o;28337:683::-;28388:30;28421:11;:25;28433:12;:10;:12::i;:::-;28421:25;;;;;;;;;;;;;;;28388:58;;28514:1;28481:14;:30;;;:34;28459:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28622:14;:28;;;28603:15;:47;;28581:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;28721:28;28752:14;:30;;;28721:61;;28828:1;28795:14;:30;;:34;;;;28871:1;28840:14;:28;;:32;;;;28885:10;;;;;;;;;;;:19;;;28905:12;:10;:12::i;:::-;28919:20;28885:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28977:12;:10;:12::i;:::-;28956:56;;;28991:20;28956:56;;;;;;:::i;:::-;;;;;;;;28377:643;;28337:683::o;20165:24::-;;;;;;;;;;;;;:::o;20448:50::-;20490:8;20448:50;:::o;27675:100::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27752:15:::1;27762:4;27752:9;:15::i;:::-;27675:100:::0;:::o;31926:419::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;32104:7:::1;:14;32082:11;:18;:36;32074:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32159:9;32154:184;32178:11;:18;32174:1;:22;32154:184;;;32301:7;32309:1;32301:10;;;;;;;;:::i;:::-;;;;;;;;32251:5;:21;32257:11;32269:1;32257:14;;;;;;;;:::i;:::-;;;;;;;;32251:21;;;;;;;;;;;;;;;:29;;;32250:76;;;;:::i;:::-;32218:5;:21;32224:11;32236:1;32224:14;;;;;;;;:::i;:::-;;;;;;;;32218:21;;;;;;;;;;;;;;;:29;;:108;;;;32198:3;;;;;:::i;:::-;;;;32154:184;;;;31926:419:::0;;:::o;5614:103::-;4859:13;:11;:13::i;:::-;5679:30:::1;5706:1;5679:18;:30::i;:::-;5614:103::o:0;20311:42::-;;;;:::o;23465:131::-;23522:7;23549:39;23558:15;23575:12;;23549:8;:39::i;:::-;23542:46;;23465:131;:::o;20577:54::-;;;;:::o;30527:340::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;30642:1:::1;22282::::0;22263:21:::1;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;30671:16:::2;;;;;;;;;;;30670:17;30662:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30748:4;30729:16;;:23;;;;;;;;;;;;;;;;;;30795:8;;30778:15;:26;;;;:::i;:::-;30763:12;:41;;;;30820:39;30846:12;;30820:39;;;;;;:::i;:::-;;;;;;;;22192:1:::1;30527:340::o:0;4973:87::-;5019:7;5046:6;;;;;;;;;;;5039:13;;4973:87;:::o;20398:43::-;20436:5;20398:43;:::o;31570:226::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31754:34:::1;31718:33;:70;;;;31570:226:::0;:::o;23988:838::-;24059:12;:10;:12::i;:::-;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;24097:16:::1;;;;;;;;;;;24089:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;24172:1;24163:6;:10;24155:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;24227:12;;24211:15;:28;24203:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;24477:6;24460:12;;:24;;;;;;;:::i;:::-;;;;;;;;24576:6;24530:5;:19;24536:12;:10;:12::i;:::-;24530:19;;;;;;;;;;;;;;;:30;;;:63;;;;:::i;:::-;24497:5;:19;24503:12;:10;:12::i;:::-;24497:19;;;;;;;;;;;;;;;:30;;:96;;;;24688:15;24654:5;:19;24660:12;:10;:12::i;:::-;24654:19;;;;;;;;;;;;;;;:31;;:49;;;;24714:10;;;;;;;;;;;:23;;;24738:12;:10;:12::i;:::-;24760:4;24767:6;24714:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24797:12;:10;:12::i;:::-;24790:28;;;24811:6;24790:28;;;;;;:::i;:::-;;;;;;;;23988:838:::0;;:::o;21248:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32711:219::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;32842:5:::1;32835:22;;;32858:12;:10;:12::i;:::-;32872:6;32835:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32915:6;32908:5;32895:27;;;;;;;;;;;;32711:219:::0;;:::o;20826:36::-;;;;;;;;;;;;;:::o;31804:114::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31895:15:::1;31880:12;:30;;;;31804:114::o:0;21346:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20638:29::-;;;;:::o;29048:454::-;29234:9;;29203:5;:17;29209:10;29203:17;;;;;;;;;;;;;;;:28;;;:40;29195:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29285:8;;;;;;;;;;;29280:13;;:1;:13;;;29277:201;;;29313:1;29305:20;;;29327:5;29334:3;29339:2;29343;29347:9;29358:7;29305:61;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29277:201;;;29392:5;;;;;;;;;;;29387:10;;:1;:10;;;29384:94;;;29421:1;29413:21;;;29435:5;29441:3;29445:2;29448:7;29456:9;29413:53;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29384:94;29277:201;29048:454;;;;;;;:::o;20505:47::-;20546:6;20505:47;:::o;29797:134::-;29863:7;29890:11;:17;29902:4;29890:17;;;;;;;;;;;;;;;:33;;;29883:40;;29797:134;;;:::o;26515:128::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26613:1:::1;26605:5;;:9;;;;;;;;;;;;;;;;;;26634:1;26625:8;;:10;;;;;;;;;;;;;;;;;;26515:128:::0;;:::o;29510:279::-;29615:7;29663:11;:17;29675:4;29663:17;;;;;;;;;;;;;;;:31;;;29644:15;:50;29640:123;;29718:11;:17;29730:4;29718:17;;;;;;;;;;;;;;;:33;;;29711:40;;;;29640:123;29780:1;29773:8;;29510:279;;;;:::o;30077:105::-;30113:39;30121:5;:19;30127:12;:10;:12::i;:::-;30121:19;;;;;;;;;;;;;;;:30;;;30113:7;:39::i;:::-;30163:11;:9;:11::i;:::-;30077:105::o;20360:31::-;;;;:::o;5872:201::-;4859:13;:11;:13::i;:::-;5981:1:::1;5961:22;;:8;:22;;;;5953:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6037:28;6056:8;6037:18;:28::i;:::-;5872:201:::0;:::o;31389:173::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31535:19:::1;31514:18;:40;;;;31389:173:::0;:::o;31219:162::-;22102:18;;;;;;;;;;;22086:34;;:12;:10;:12::i;:::-;:34;;;22064:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;31312:9:::1;31301:8;:20;;;;31364:8;;31347:15;:26;;;;:::i;:::-;31332:12;:41;;;;31219:162:::0;:::o;27596:71::-;27636:23;27646:12;:10;:12::i;:::-;27636:9;:23::i;:::-;27596:71::o;20232:37::-;;;;:::o;23308:149::-;23393:20;;:::i;:::-;23438:5;:11;23444:4;23438:11;;;;;;;;;;;;;;;23431:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23308:149;;;:::o;3524:98::-;3577:7;3604:10;3597:17;;3524:98;:::o;26651:937::-;26740:15;26779:12;;20436:5;26758:6;:20;;;;:::i;:::-;:33;;;;:::i;:::-;26740:51;;20436:5;26828:7;26813:14;;:22;;;;:::i;:::-;26812:38;;;;:::i;:::-;26802:48;;26891:7;26876:14;;:22;;;;:::i;:::-;26861:14;:37;;;;26939:6;26924:12;;:22;;;;:::i;:::-;26909:12;:37;;;;26959:11;:9;:11::i;:::-;27009:1;26987:18;;:23;26983:551;;;27027:10;;;;;;;;;;;:19;;;27047:11;27060:6;27027:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27082:43;27103:11;27117:7;27082:12;:43::i;:::-;26983:551;;;27172:30;27242:18;;27205:15;:70;;;;:::i;:::-;27172:103;;27290:30;27323:11;:24;27335:11;27323:24;;;;;;;;;;;;;;;27290:57;;27447:6;27396:14;:30;;;27395:59;;;;:::i;:::-;27362:14;:30;;:92;;;;27500:22;27469:14;:28;;:53;;;;27157:377;;26983:551;27560:11;27551:29;;;27573:6;27551:29;;;;;;:::i;:::-;;;;;;;;26729:859;26651:937;;:::o;5138:132::-;5213:12;:10;:12::i;:::-;5202:23;;:7;:5;:7::i;:::-;:23;;;5194:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5138:132::o;27783:364::-;27838:4;22282:1;22263:21;;:7;:21;;;22259:94;;22326:15;22333:7;22326:6;:15::i;:::-;22301:5;:14;22307:7;22301:14;;;;;;;;;;;;;;;:22;;:40;;;;22259:94;22395:26;:24;:26::i;:::-;22363:5;:14;22369:7;22363:14;;;;;;;;;;;;;;;:29;;:58;;;;27855:14:::1;27872:5;:11;27878:4;27872:11;;;;;;;;;;;;;;;:19;;;27855:36;;27915:1;27906:6;:10;27902:238;;;27955:1;27933:5;:11;27939:4;27933:11;;;;;;;;;;;;;;;:19;;:23;;;;28020:6;27996:5;:11;28002:4;27996:11;;;;;;;;;;;;;;;:22;;;:31;;;;:::i;:::-;27971:5;:11;27977:4;27971:11;;;;;;;;;;;;;;;:22;;:56;;;;28071:6;28057:12;;:21;;;;:::i;:::-;28042:12;:36;;;;28115:4;28098:30;;;28121:6;28098:30;;;;;;:::i;:::-;;;;;;;;27902:238;27844:303;27783:364:::0;;:::o;6233:191::-;6307:16;6326:6;;;;;;;;;;;6307:25;;6352:8;6343:6;;:17;;;;;;;;;;;;;;;;;;6407:8;6376:40;;6397:8;6376:40;;;;;;;;;;;;6296:128;6233:191;:::o;7069:106::-;7127:7;7158:1;7154;:5;:13;;7166:1;7154:13;;;7162:1;7154:13;7147:20;;7069:106;;;;:::o;32936:320::-;33054:6;33029:21;:31;;33021:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33108:12;33126:9;:14;;33148:6;33126:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33107:52;;;33178:7;33170:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33010:246;32936:320;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:305;316:3;335:20;353:1;335:20;:::i;:::-;330:25;;369:20;387:1;369:20;:::i;:::-;364:25;;523:1;455:66;451:74;448:1;445:81;442:107;;;529:18;;:::i;:::-;442:107;573:1;570;566:9;559:16;;276:305;;;;:::o;587:75::-;620:6;653:2;647:9;637:19;;587:75;:::o;668:117::-;777:1;774;767:12;791:117;900:1;897;890:12;914:126;951:7;991:42;984:5;980:54;969:65;;914:126;;;:::o;1046:96::-;1083:7;1112:24;1130:5;1112:24;:::i;:::-;1101:35;;1046:96;;;:::o;1148:122::-;1221:24;1239:5;1221:24;:::i;:::-;1214:5;1211:35;1201:63;;1260:1;1257;1250:12;1201:63;1148:122;:::o;1276:139::-;1322:5;1360:6;1347:20;1338:29;;1376:33;1403:5;1376:33;:::i;:::-;1276:139;;;;:::o;1421:329::-;1480:6;1529:2;1517:9;1508:7;1504:23;1500:32;1497:119;;;1535:79;;:::i;:::-;1497:119;1655:1;1680:53;1725:7;1716:6;1705:9;1701:22;1680:53;:::i;:::-;1670:63;;1626:117;1421:329;;;;:::o;1756:118::-;1843:24;1861:5;1843:24;:::i;:::-;1838:3;1831:37;1756:118;;:::o;1880:222::-;1973:4;2011:2;2000:9;1996:18;1988:26;;2024:71;2092:1;2081:9;2077:17;2068:6;2024:71;:::i;:::-;1880:222;;;;:::o;2108:122::-;2181:24;2199:5;2181:24;:::i;:::-;2174:5;2171:35;2161:63;;2220:1;2217;2210:12;2161:63;2108:122;:::o;2236:139::-;2282:5;2320:6;2307:20;2298:29;;2336:33;2363:5;2336:33;:::i;:::-;2236:139;;;;:::o;2381:90::-;2415:7;2458:5;2451:13;2444:21;2433:32;;2381:90;;;:::o;2477:116::-;2547:21;2562:5;2547:21;:::i;:::-;2540:5;2537:32;2527:60;;2583:1;2580;2573:12;2527:60;2477:116;:::o;2599:133::-;2642:5;2680:6;2667:20;2658:29;;2696:30;2720:5;2696:30;:::i;:::-;2599:133;;;;:::o;2738:613::-;2812:6;2820;2828;2877:2;2865:9;2856:7;2852:23;2848:32;2845:119;;;2883:79;;:::i;:::-;2845:119;3003:1;3028:53;3073:7;3064:6;3053:9;3049:22;3028:53;:::i;:::-;3018:63;;2974:117;3130:2;3156:53;3201:7;3192:6;3181:9;3177:22;3156:53;:::i;:::-;3146:63;;3101:118;3258:2;3284:50;3326:7;3317:6;3306:9;3302:22;3284:50;:::i;:::-;3274:60;;3229:115;2738:613;;;;;:::o;3357:118::-;3444:24;3462:5;3444:24;:::i;:::-;3439:3;3432:37;3357:118;;:::o;3481:222::-;3574:4;3612:2;3601:9;3597:18;3589:26;;3625:71;3693:1;3682:9;3678:17;3669:6;3625:71;:::i;:::-;3481:222;;;;:::o;3709:329::-;3768:6;3817:2;3805:9;3796:7;3792:23;3788:32;3785:119;;;3823:79;;:::i;:::-;3785:119;3943:1;3968:53;4013:7;4004:6;3993:9;3989:22;3968:53;:::i;:::-;3958:63;;3914:117;3709:329;;;;:::o;4044:99::-;4096:6;4130:5;4124:12;4114:22;;4044:99;;;:::o;4149:169::-;4233:11;4267:6;4262:3;4255:19;4307:4;4302:3;4298:14;4283:29;;4149:169;;;;:::o;4324:307::-;4392:1;4402:113;4416:6;4413:1;4410:13;4402:113;;;4501:1;4496:3;4492:11;4486:18;4482:1;4477:3;4473:11;4466:39;4438:2;4435:1;4431:10;4426:15;;4402:113;;;4533:6;4530:1;4527:13;4524:101;;;4613:1;4604:6;4599:3;4595:16;4588:27;4524:101;4373:258;4324:307;;;:::o;4637:102::-;4678:6;4729:2;4725:7;4720:2;4713:5;4709:14;4705:28;4695:38;;4637:102;;;:::o;4745:364::-;4833:3;4861:39;4894:5;4861:39;:::i;:::-;4916:71;4980:6;4975:3;4916:71;:::i;:::-;4909:78;;4996:52;5041:6;5036:3;5029:4;5022:5;5018:16;4996:52;:::i;:::-;5073:29;5095:6;5073:29;:::i;:::-;5068:3;5064:39;5057:46;;4837:272;4745:364;;;;:::o;5115:313::-;5228:4;5266:2;5255:9;5251:18;5243:26;;5315:9;5309:4;5305:20;5301:1;5290:9;5286:17;5279:47;5343:78;5416:4;5407:6;5343:78;:::i;:::-;5335:86;;5115:313;;;;:::o;5434:60::-;5462:3;5483:5;5476:12;;5434:60;;;:::o;5500:142::-;5550:9;5583:53;5601:34;5610:24;5628:5;5610:24;:::i;:::-;5601:34;:::i;:::-;5583:53;:::i;:::-;5570:66;;5500:142;;;:::o;5648:126::-;5698:9;5731:37;5762:5;5731:37;:::i;:::-;5718:50;;5648:126;;;:::o;5780:139::-;5843:9;5876:37;5907:5;5876:37;:::i;:::-;5863:50;;5780:139;;;:::o;5925:157::-;6025:50;6069:5;6025:50;:::i;:::-;6020:3;6013:63;5925:157;;:::o;6088:248::-;6194:4;6232:2;6221:9;6217:18;6209:26;;6245:84;6326:1;6315:9;6311:17;6302:6;6245:84;:::i;:::-;6088:248;;;;:::o;6342:117::-;6451:1;6448;6441:12;6465:180;6513:77;6510:1;6503:88;6610:4;6607:1;6600:15;6634:4;6631:1;6624:15;6651:281;6734:27;6756:4;6734:27;:::i;:::-;6726:6;6722:40;6864:6;6852:10;6849:22;6828:18;6816:10;6813:34;6810:62;6807:88;;;6875:18;;:::i;:::-;6807:88;6915:10;6911:2;6904:22;6694:238;6651:281;;:::o;6938:129::-;6972:6;6999:20;;:::i;:::-;6989:30;;7028:33;7056:4;7048:6;7028:33;:::i;:::-;6938:129;;;:::o;7073:311::-;7150:4;7240:18;7232:6;7229:30;7226:56;;;7262:18;;:::i;:::-;7226:56;7312:4;7304:6;7300:17;7292:25;;7372:4;7366;7362:15;7354:23;;7073:311;;;:::o;7390:117::-;7499:1;7496;7489:12;7530:710;7626:5;7651:81;7667:64;7724:6;7667:64;:::i;:::-;7651:81;:::i;:::-;7642:90;;7752:5;7781:6;7774:5;7767:21;7815:4;7808:5;7804:16;7797:23;;7868:4;7860:6;7856:17;7848:6;7844:30;7897:3;7889:6;7886:15;7883:122;;;7916:79;;:::i;:::-;7883:122;8031:6;8014:220;8048:6;8043:3;8040:15;8014:220;;;8123:3;8152:37;8185:3;8173:10;8152:37;:::i;:::-;8147:3;8140:50;8219:4;8214:3;8210:14;8203:21;;8090:144;8074:4;8069:3;8065:14;8058:21;;8014:220;;;8018:21;7632:608;;7530:710;;;;;:::o;8263:370::-;8334:5;8383:3;8376:4;8368:6;8364:17;8360:27;8350:122;;8391:79;;:::i;:::-;8350:122;8508:6;8495:20;8533:94;8623:3;8615:6;8608:4;8600:6;8596:17;8533:94;:::i;:::-;8524:103;;8340:293;8263:370;;;;:::o;8639:311::-;8716:4;8806:18;8798:6;8795:30;8792:56;;;8828:18;;:::i;:::-;8792:56;8878:4;8870:6;8866:17;8858:25;;8938:4;8932;8928:15;8920:23;;8639:311;;;:::o;8973:710::-;9069:5;9094:81;9110:64;9167:6;9110:64;:::i;:::-;9094:81;:::i;:::-;9085:90;;9195:5;9224:6;9217:5;9210:21;9258:4;9251:5;9247:16;9240:23;;9311:4;9303:6;9299:17;9291:6;9287:30;9340:3;9332:6;9329:15;9326:122;;;9359:79;;:::i;:::-;9326:122;9474:6;9457:220;9491:6;9486:3;9483:15;9457:220;;;9566:3;9595:37;9628:3;9616:10;9595:37;:::i;:::-;9590:3;9583:50;9662:4;9657:3;9653:14;9646:21;;9533:144;9517:4;9512:3;9508:14;9501:21;;9457:220;;;9461:21;9075:608;;8973:710;;;;;:::o;9706:370::-;9777:5;9826:3;9819:4;9811:6;9807:17;9803:27;9793:122;;9834:79;;:::i;:::-;9793:122;9951:6;9938:20;9976:94;10066:3;10058:6;10051:4;10043:6;10039:17;9976:94;:::i;:::-;9967:103;;9783:293;9706:370;;;;:::o;10082:894::-;10200:6;10208;10257:2;10245:9;10236:7;10232:23;10228:32;10225:119;;;10263:79;;:::i;:::-;10225:119;10411:1;10400:9;10396:17;10383:31;10441:18;10433:6;10430:30;10427:117;;;10463:79;;:::i;:::-;10427:117;10568:78;10638:7;10629:6;10618:9;10614:22;10568:78;:::i;:::-;10558:88;;10354:302;10723:2;10712:9;10708:18;10695:32;10754:18;10746:6;10743:30;10740:117;;;10776:79;;:::i;:::-;10740:117;10881:78;10951:7;10942:6;10931:9;10927:22;10881:78;:::i;:::-;10871:88;;10666:303;10082:894;;;;;:::o;10982:553::-;11159:4;11197:3;11186:9;11182:19;11174:27;;11211:71;11279:1;11268:9;11264:17;11255:6;11211:71;:::i;:::-;11292:72;11360:2;11349:9;11345:18;11336:6;11292:72;:::i;:::-;11374;11442:2;11431:9;11427:18;11418:6;11374:72;:::i;:::-;11456;11524:2;11513:9;11509:18;11500:6;11456:72;:::i;:::-;10982:553;;;;;;;:::o;11541:474::-;11609:6;11617;11666:2;11654:9;11645:7;11641:23;11637:32;11634:119;;;11672:79;;:::i;:::-;11634:119;11792:1;11817:53;11862:7;11853:6;11842:9;11838:22;11817:53;:::i;:::-;11807:63;;11763:117;11919:2;11945:53;11990:7;11981:6;11970:9;11966:22;11945:53;:::i;:::-;11935:63;;11890:118;11541:474;;;;;:::o;12021:109::-;12102:21;12117:5;12102:21;:::i;:::-;12097:3;12090:34;12021:109;;:::o;12136:210::-;12223:4;12261:2;12250:9;12246:18;12238:26;;12274:65;12336:1;12325:9;12321:17;12312:6;12274:65;:::i;:::-;12136:210;;;;:::o;12352:332::-;12473:4;12511:2;12500:9;12496:18;12488:26;;12524:71;12592:1;12581:9;12577:17;12568:6;12524:71;:::i;:::-;12605:72;12673:2;12662:9;12658:18;12649:6;12605:72;:::i;:::-;12352:332;;;;;:::o;12690:117::-;12799:1;12796;12789:12;12813:307;12874:4;12964:18;12956:6;12953:30;12950:56;;;12986:18;;:::i;:::-;12950:56;13024:29;13046:6;13024:29;:::i;:::-;13016:37;;13108:4;13102;13098:15;13090:23;;12813:307;;;:::o;13126:154::-;13210:6;13205:3;13200;13187:30;13272:1;13263:6;13258:3;13254:16;13247:27;13126:154;;;:::o;13286:410::-;13363:5;13388:65;13404:48;13445:6;13404:48;:::i;:::-;13388:65;:::i;:::-;13379:74;;13476:6;13469:5;13462:21;13514:4;13507:5;13503:16;13552:3;13543:6;13538:3;13534:16;13531:25;13528:112;;;13559:79;;:::i;:::-;13528:112;13649:41;13683:6;13678:3;13673;13649:41;:::i;:::-;13369:327;13286:410;;;;;:::o;13715:338::-;13770:5;13819:3;13812:4;13804:6;13800:17;13796:27;13786:122;;13827:79;;:::i;:::-;13786:122;13944:6;13931:20;13969:78;14043:3;14035:6;14028:4;14020:6;14016:17;13969:78;:::i;:::-;13960:87;;13776:277;13715:338;;;;:::o;14059:1381::-;14181:6;14189;14197;14205;14213;14221;14229;14278:3;14266:9;14257:7;14253:23;14249:33;14246:120;;;14285:79;;:::i;:::-;14246:120;14405:1;14430:53;14475:7;14466:6;14455:9;14451:22;14430:53;:::i;:::-;14420:63;;14376:117;14532:2;14558:53;14603:7;14594:6;14583:9;14579:22;14558:53;:::i;:::-;14548:63;;14503:118;14660:2;14686:53;14731:7;14722:6;14711:9;14707:22;14686:53;:::i;:::-;14676:63;;14631:118;14788:2;14814:53;14859:7;14850:6;14839:9;14835:22;14814:53;:::i;:::-;14804:63;;14759:118;14916:3;14943:53;14988:7;14979:6;14968:9;14964:22;14943:53;:::i;:::-;14933:63;;14887:119;15045:3;15072:53;15117:7;15108:6;15097:9;15093:22;15072:53;:::i;:::-;15062:63;;15016:119;15202:3;15191:9;15187:19;15174:33;15234:18;15226:6;15223:30;15220:117;;;15256:79;;:::i;:::-;15220:117;15361:62;15415:7;15406:6;15395:9;15391:22;15361:62;:::i;:::-;15351:72;;15145:288;14059:1381;;;;;;;;;;:::o;15446:474::-;15514:6;15522;15571:2;15559:9;15550:7;15546:23;15542:32;15539:119;;;15577:79;;:::i;:::-;15539:119;15697:1;15722:53;15767:7;15758:6;15747:9;15743:22;15722:53;:::i;:::-;15712:63;;15668:117;15824:2;15850:53;15895:7;15886:6;15875:9;15871:22;15850:53;:::i;:::-;15840:63;;15795:118;15446:474;;;;;:::o;15926:108::-;16003:24;16021:5;16003:24;:::i;:::-;15998:3;15991:37;15926:108;;:::o;16126:883::-;16275:4;16270:3;16266:14;16368:4;16361:5;16357:16;16351:23;16387:63;16444:4;16439:3;16435:14;16421:12;16387:63;:::i;:::-;16290:170;16545:4;16538:5;16534:16;16528:23;16564:63;16621:4;16616:3;16612:14;16598:12;16564:63;:::i;:::-;16470:167;16729:4;16722:5;16718:16;16712:23;16748:63;16805:4;16800:3;16796:14;16782:12;16748:63;:::i;:::-;16647:174;16910:4;16903:5;16899:16;16893:23;16929:63;16986:4;16981:3;16977:14;16963:12;16929:63;:::i;:::-;16831:171;16244:765;16126:883;;:::o;17015:327::-;17160:4;17198:3;17187:9;17183:19;17175:27;;17212:123;17332:1;17321:9;17317:17;17308:6;17212:123;:::i;:::-;17015:327;;;;:::o;17348:191::-;17388:4;17408:20;17426:1;17408:20;:::i;:::-;17403:25;;17442:20;17460:1;17442:20;:::i;:::-;17437:25;;17481:1;17478;17475:8;17472:34;;;17486:18;;:::i;:::-;17472:34;17531:1;17528;17524:9;17516:17;;17348:191;;;;:::o;17545:348::-;17585:7;17608:20;17626:1;17608:20;:::i;:::-;17603:25;;17642:20;17660:1;17642:20;:::i;:::-;17637:25;;17830:1;17762:66;17758:74;17755:1;17752:81;17747:1;17740:9;17733:17;17729:105;17726:131;;;17837:18;;:::i;:::-;17726:131;17885:1;17882;17878:9;17867:20;;17545:348;;;;:::o;17899:180::-;17947:77;17944:1;17937:88;18044:4;18041:1;18034:15;18068:4;18065:1;18058:15;18085:185;18125:1;18142:20;18160:1;18142:20;:::i;:::-;18137:25;;18176:20;18194:1;18176:20;:::i;:::-;18171:25;;18215:1;18205:35;;18220:18;;:::i;:::-;18205:35;18262:1;18259;18255:9;18250:14;;18085:185;;;;:::o;18276:220::-;18416:34;18412:1;18404:6;18400:14;18393:58;18485:3;18480:2;18472:6;18468:15;18461:28;18276:220;:::o;18502:366::-;18644:3;18665:67;18729:2;18724:3;18665:67;:::i;:::-;18658:74;;18741:93;18830:3;18741:93;:::i;:::-;18859:2;18854:3;18850:12;18843:19;;18502:366;;;:::o;18874:419::-;19040:4;19078:2;19067:9;19063:18;19055:26;;19127:9;19121:4;19117:20;19113:1;19102:9;19098:17;19091:47;19155:131;19281:4;19155:131;:::i;:::-;19147:139;;18874:419;;;:::o;19299:167::-;19439:19;19435:1;19427:6;19423:14;19416:43;19299:167;:::o;19472:366::-;19614:3;19635:67;19699:2;19694:3;19635:67;:::i;:::-;19628:74;;19711:93;19800:3;19711:93;:::i;:::-;19829:2;19824:3;19820:12;19813:19;;19472:366;;;:::o;19844:419::-;20010:4;20048:2;20037:9;20033:18;20025:26;;20097:9;20091:4;20087:20;20083:1;20072:9;20068:17;20061:47;20125:131;20251:4;20125:131;:::i;:::-;20117:139;;19844:419;;;:::o;20269:224::-;20409:34;20405:1;20397:6;20393:14;20386:58;20478:7;20473:2;20465:6;20461:15;20454:32;20269:224;:::o;20499:366::-;20641:3;20662:67;20726:2;20721:3;20662:67;:::i;:::-;20655:74;;20738:93;20827:3;20738:93;:::i;:::-;20856:2;20851:3;20847:12;20840:19;;20499:366;;;:::o;20871:419::-;21037:4;21075:2;21064:9;21060:18;21052:26;;21124:9;21118:4;21114:20;21110:1;21099:9;21095:17;21088:47;21152:131;21278:4;21152:131;:::i;:::-;21144:139;;20871:419;;;:::o;21296:181::-;21436:33;21432:1;21424:6;21420:14;21413:57;21296:181;:::o;21483:366::-;21625:3;21646:67;21710:2;21705:3;21646:67;:::i;:::-;21639:74;;21722:93;21811:3;21722:93;:::i;:::-;21840:2;21835:3;21831:12;21824:19;;21483:366;;;:::o;21855:419::-;22021:4;22059:2;22048:9;22044:18;22036:26;;22108:9;22102:4;22098:20;22094:1;22083:9;22079:17;22072:47;22136:131;22262:4;22136:131;:::i;:::-;22128:139;;21855:419;;;:::o;22280:168::-;22420:20;22416:1;22408:6;22404:14;22397:44;22280:168;:::o;22454:366::-;22596:3;22617:67;22681:2;22676:3;22617:67;:::i;:::-;22610:74;;22693:93;22782:3;22693:93;:::i;:::-;22811:2;22806:3;22802:12;22795:19;;22454:366;;;:::o;22826:419::-;22992:4;23030:2;23019:9;23015:18;23007:26;;23079:9;23073:4;23069:20;23065:1;23054:9;23050:17;23043:47;23107:131;23233:4;23107:131;:::i;:::-;23099:139;;22826:419;;;:::o;23251:332::-;23372:4;23410:2;23399:9;23395:18;23387:26;;23423:71;23491:1;23480:9;23476:17;23467:6;23423:71;:::i;:::-;23504:72;23572:2;23561:9;23557:18;23548:6;23504:72;:::i;:::-;23251:332;;;;;:::o;23589:137::-;23643:5;23674:6;23668:13;23659:22;;23690:30;23714:5;23690:30;:::i;:::-;23589:137;;;;:::o;23732:345::-;23799:6;23848:2;23836:9;23827:7;23823:23;23819:32;23816:119;;;23854:79;;:::i;:::-;23816:119;23974:1;23999:61;24052:7;24043:6;24032:9;24028:22;23999:61;:::i;:::-;23989:71;;23945:125;23732:345;;;;:::o;24083:177::-;24223:29;24219:1;24211:6;24207:14;24200:53;24083:177;:::o;24266:366::-;24408:3;24429:67;24493:2;24488:3;24429:67;:::i;:::-;24422:74;;24505:93;24594:3;24505:93;:::i;:::-;24623:2;24618:3;24614:12;24607:19;;24266:366;;;:::o;24638:419::-;24804:4;24842:2;24831:9;24827:18;24819:26;;24891:9;24885:4;24881:20;24877:1;24866:9;24862:17;24855:47;24919:131;25045:4;24919:131;:::i;:::-;24911:139;;24638:419;;;:::o;25063:180::-;25203:32;25199:1;25191:6;25187:14;25180:56;25063:180;:::o;25249:366::-;25391:3;25412:67;25476:2;25471:3;25412:67;:::i;:::-;25405:74;;25488:93;25577:3;25488:93;:::i;:::-;25606:2;25601:3;25597:12;25590:19;;25249:366;;;:::o;25621:419::-;25787:4;25825:2;25814:9;25810:18;25802:26;;25874:9;25868:4;25864:20;25860:1;25849:9;25845:17;25838:47;25902:131;26028:4;25902:131;:::i;:::-;25894:139;;25621:419;;;:::o;26046:170::-;26186:22;26182:1;26174:6;26170:14;26163:46;26046:170;:::o;26222:366::-;26364:3;26385:67;26449:2;26444:3;26385:67;:::i;:::-;26378:74;;26461:93;26550:3;26461:93;:::i;:::-;26579:2;26574:3;26570:12;26563:19;;26222:366;;;:::o;26594:419::-;26760:4;26798:2;26787:9;26783:18;26775:26;;26847:9;26841:4;26837:20;26833:1;26822:9;26818:17;26811:47;26875:131;27001:4;26875:131;:::i;:::-;26867:139;;26594:419;;;:::o;27019:180::-;27067:77;27064:1;27057:88;27164:4;27161:1;27154:15;27188:4;27185:1;27178:15;27205:233;27244:3;27267:24;27285:5;27267:24;:::i;:::-;27258:33;;27313:66;27306:5;27303:77;27300:103;;;27383:18;;:::i;:::-;27300:103;27430:1;27423:5;27419:13;27412:20;;27205:233;;;:::o;27444:176::-;27584:28;27580:1;27572:6;27568:14;27561:52;27444:176;:::o;27626:366::-;27768:3;27789:67;27853:2;27848:3;27789:67;:::i;:::-;27782:74;;27865:93;27954:3;27865:93;:::i;:::-;27983:2;27978:3;27974:12;27967:19;;27626:366;;;:::o;27998:419::-;28164:4;28202:2;28191:9;28187:18;28179:26;;28251:9;28245:4;28241:20;28237:1;28226:9;28222:17;28215:47;28279:131;28405:4;28279:131;:::i;:::-;28271:139;;27998:419;;;:::o;28423:176::-;28563:28;28559:1;28551:6;28547:14;28540:52;28423:176;:::o;28605:366::-;28747:3;28768:67;28832:2;28827:3;28768:67;:::i;:::-;28761:74;;28844:93;28933:3;28844:93;:::i;:::-;28962:2;28957:3;28953:12;28946:19;;28605:366;;;:::o;28977:419::-;29143:4;29181:2;29170:9;29166:18;29158:26;;29230:9;29224:4;29220:20;29216:1;29205:9;29201:17;29194:47;29258:131;29384:4;29258:131;:::i;:::-;29250:139;;28977:419;;;:::o;29402:164::-;29542:16;29538:1;29530:6;29526:14;29519:40;29402:164;:::o;29572:366::-;29714:3;29735:67;29799:2;29794:3;29735:67;:::i;:::-;29728:74;;29811:93;29900:3;29811:93;:::i;:::-;29929:2;29924:3;29920:12;29913:19;;29572:366;;;:::o;29944:419::-;30110:4;30148:2;30137:9;30133:18;30125:26;;30197:9;30191:4;30187:20;30183:1;30172:9;30168:17;30161:47;30225:131;30351:4;30225:131;:::i;:::-;30217:139;;29944:419;;;:::o;30369:169::-;30509:21;30505:1;30497:6;30493:14;30486:45;30369:169;:::o;30544:366::-;30686:3;30707:67;30771:2;30766:3;30707:67;:::i;:::-;30700:74;;30783:93;30872:3;30783:93;:::i;:::-;30901:2;30896:3;30892:12;30885:19;;30544:366;;;:::o;30916:419::-;31082:4;31120:2;31109:9;31105:18;31097:26;;31169:9;31163:4;31159:20;31155:1;31144:9;31140:17;31133:47;31197:131;31323:4;31197:131;:::i;:::-;31189:139;;30916:419;;;:::o;31341:442::-;31490:4;31528:2;31517:9;31513:18;31505:26;;31541:71;31609:1;31598:9;31594:17;31585:6;31541:71;:::i;:::-;31622:72;31690:2;31679:9;31675:18;31666:6;31622:72;:::i;:::-;31704;31772:2;31761:9;31757:18;31748:6;31704:72;:::i;:::-;31341:442;;;;;;:::o;31789:168::-;31929:20;31925:1;31917:6;31913:14;31906:44;31789:168;:::o;31963:366::-;32105:3;32126:67;32190:2;32185:3;32126:67;:::i;:::-;32119:74;;32202:93;32291:3;32202:93;:::i;:::-;32320:2;32315:3;32311:12;32304:19;;31963:366;;;:::o;32335:419::-;32501:4;32539:2;32528:9;32524:18;32516:26;;32588:9;32582:4;32578:20;32574:1;32563:9;32559:17;32552:47;32616:131;32742:4;32616:131;:::i;:::-;32608:139;;32335:419;;;:::o;32760:98::-;32811:6;32845:5;32839:12;32829:22;;32760:98;;;:::o;32864:168::-;32947:11;32981:6;32976:3;32969:19;33021:4;33016:3;33012:14;32997:29;;32864:168;;;;:::o;33038:360::-;33124:3;33152:38;33184:5;33152:38;:::i;:::-;33206:70;33269:6;33264:3;33206:70;:::i;:::-;33199:77;;33285:52;33330:6;33325:3;33318:4;33311:5;33307:16;33285:52;:::i;:::-;33362:29;33384:6;33362:29;:::i;:::-;33357:3;33353:39;33346:46;;33128:270;33038:360;;;;:::o;33404:862::-;33655:4;33693:3;33682:9;33678:19;33670:27;;33707:71;33775:1;33764:9;33760:17;33751:6;33707:71;:::i;:::-;33788:72;33856:2;33845:9;33841:18;33832:6;33788:72;:::i;:::-;33870;33938:2;33927:9;33923:18;33914:6;33870:72;:::i;:::-;33952;34020:2;34009:9;34005:18;33996:6;33952:72;:::i;:::-;34072:9;34066:4;34062:20;34056:3;34045:9;34041:19;34034:49;34100:76;34171:4;34162:6;34100:76;:::i;:::-;34092:84;;34186:73;34254:3;34243:9;34239:19;34230:6;34186:73;:::i;:::-;33404:862;;;;;;;;;:::o;34272:751::-;34495:4;34533:3;34522:9;34518:19;34510:27;;34547:71;34615:1;34604:9;34600:17;34591:6;34547:71;:::i;:::-;34628:72;34696:2;34685:9;34681:18;34672:6;34628:72;:::i;:::-;34710;34778:2;34767:9;34763:18;34754:6;34710:72;:::i;:::-;34792;34860:2;34849:9;34845:18;34836:6;34792:72;:::i;:::-;34912:9;34906:4;34902:20;34896:3;34885:9;34881:19;34874:49;34940:76;35011:4;35002:6;34940:76;:::i;:::-;34932:84;;34272:751;;;;;;;;:::o;35029:225::-;35169:34;35165:1;35157:6;35153:14;35146:58;35238:8;35233:2;35225:6;35221:15;35214:33;35029:225;:::o;35260:366::-;35402:3;35423:67;35487:2;35482:3;35423:67;:::i;:::-;35416:74;;35499:93;35588:3;35499:93;:::i;:::-;35617:2;35612:3;35608:12;35601:19;;35260:366;;;:::o;35632:419::-;35798:4;35836:2;35825:9;35821:18;35813:26;;35885:9;35879:4;35875:20;35871:1;35860:9;35856:17;35849:47;35913:131;36039:4;35913:131;:::i;:::-;35905:139;;35632:419;;;:::o;36057:182::-;36197:34;36193:1;36185:6;36181:14;36174:58;36057:182;:::o;36245:366::-;36387:3;36408:67;36472:2;36467:3;36408:67;:::i;:::-;36401:74;;36484:93;36573:3;36484:93;:::i;:::-;36602:2;36597:3;36593:12;36586:19;;36245:366;;;:::o;36617:419::-;36783:4;36821:2;36810:9;36806:18;36798:26;;36870:9;36864:4;36860:20;36856:1;36845:9;36841:17;36834:47;36898:131;37024:4;36898:131;:::i;:::-;36890:139;;36617:419;;;:::o;37042:179::-;37182:31;37178:1;37170:6;37166:14;37159:55;37042:179;:::o;37227:366::-;37369:3;37390:67;37454:2;37449:3;37390:67;:::i;:::-;37383:74;;37466:93;37555:3;37466:93;:::i;:::-;37584:2;37579:3;37575:12;37568:19;;37227:366;;;:::o;37599:419::-;37765:4;37803:2;37792:9;37788:18;37780:26;;37852:9;37846:4;37842:20;37838:1;37827:9;37823:17;37816:47;37880:131;38006:4;37880:131;:::i;:::-;37872:139;;37599:419;;;:::o;38024:147::-;38125:11;38162:3;38147:18;;38024:147;;;;:::o;38177:114::-;;:::o;38297:398::-;38456:3;38477:83;38558:1;38553:3;38477:83;:::i;:::-;38470:90;;38569:93;38658:3;38569:93;:::i;:::-;38687:1;38682:3;38678:11;38671:18;;38297:398;;;:::o;38701:379::-;38885:3;38907:147;39050:3;38907:147;:::i;:::-;38900:154;;39071:3;39064:10;;38701:379;;;:::o;39086:245::-;39226:34;39222:1;39214:6;39210:14;39203:58;39295:28;39290:2;39282:6;39278:15;39271:53;39086:245;:::o;39337:366::-;39479:3;39500:67;39564:2;39559:3;39500:67;:::i;:::-;39493:74;;39576:93;39665:3;39576:93;:::i;:::-;39694:2;39689:3;39685:12;39678:19;;39337:366;;;:::o;39709:419::-;39875:4;39913:2;39902:9;39898:18;39890:26;;39962:9;39956:4;39952:20;39948:1;39937:9;39933:17;39926:47;39990:131;40116:4;39990:131;:::i;:::-;39982:139;;39709:419;;;:::o
Swarm Source
ipfs://8c9d4254d9fc79e4236a7d66ea0c907e8d17005ead06f123996bd33615fe7cc7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,489.68 | 0.0303 | $105.63 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.