Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LidStaking
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-21 */ pragma solidity 0.5.16; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } /* * @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 GSN 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. */ contract Context is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be aplied to your functions to restrict their use to * the owner. */ contract Ownable is Initializable, Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function initialize(address sender) public initializer { _owner = sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * > Note: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[50] private ______gap; } library BasisPoints { using SafeMath for uint; uint constant private BASIS_POINTS = 10000; function mulBP(uint amt, uint bp) internal pure returns (uint) { if (amt == 0) return 0; return amt.mul(bp).div(BASIS_POINTS); } function divBP(uint amt, uint bp) internal pure returns (uint) { require(bp > 0, "Cannot divide by zero."); if (amt == 0) return 0; return amt.mul(BASIS_POINTS).div(bp); } function addBP(uint amt, uint bp) internal pure returns (uint) { if (amt == 0) return 0; if (bp == 0) return amt; return amt.add(mulBP(amt, bp)); } function subBP(uint amt, uint bp) internal pure returns (uint) { if (amt == 0) return 0; if (bp == 0) return amt; return amt.sub(mulBP(amt, bp)); } } interface IStakeHandler { function handleStake(address staker, uint stakerDeltaValue, uint stakerFinalValue) external; function handleUnstake(address staker, uint stakerDeltaValue, uint stakerFinalValue) external; } interface ILidCertifiableToken { function activateTransfers() external; function activateTax() external; function mint(address account, uint256 amount) external returns (bool); function addMinter(address account) external; function renounceMinter() external; function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function isMinter(address account) external view returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract LidStaking is Initializable, Ownable { using BasisPoints for uint; using SafeMath for uint; uint256 constant internal DISTRIBUTION_MULTIPLIER = 2 ** 64; uint public stakingTaxBP; uint public unstakingTaxBP; ILidCertifiableToken private lidToken; mapping(address => uint) public stakeValue; mapping(address => int) public stakerPayouts; uint public totalDistributions; uint public totalStaked; uint public totalStakers; uint public profitPerShare; uint private emptyStakeTokens; //These are tokens given to the contract when there are no stakers. IStakeHandler[] public stakeHandlers; uint public startTime; uint public registrationFeeWithReferrer; uint public registrationFeeWithoutReferrer; mapping(address => uint) public accountReferrals; mapping(address => bool) public stakerIsRegistered; event OnDistribute(address sender, uint amountSent); event OnStake(address sender, uint amount, uint tax); event OnUnstake(address sender, uint amount, uint tax); event OnReinvest(address sender, uint amount, uint tax); event OnWithdraw(address sender, uint amount); bool private initialized; struct Checkpoint { uint128 fromBlock; uint128 value; } mapping(address => Checkpoint[]) internal stakeValueHistory; Checkpoint[] internal totalStakedHistory; modifier v2Initializer() { require(!initialized, "V2 Contract instance has already been initialized"); initialized = true; _; } modifier onlyLidToken { require(msg.sender == address(lidToken), "Can only be called by LidToken contract."); _; } modifier whenStakingActive { require(startTime != 0 && now > startTime, "Staking not yet started."); _; } function initialize( uint _stakingTaxBP, uint _ustakingTaxBP, uint _registrationFeeWithReferrer, uint _registrationFeeWithoutReferrer, address owner, ILidCertifiableToken _lidToken ) external initializer { Ownable.initialize(msg.sender); stakingTaxBP = _stakingTaxBP; unstakingTaxBP = _ustakingTaxBP; lidToken = _lidToken; registrationFeeWithReferrer = _registrationFeeWithReferrer; registrationFeeWithoutReferrer = _registrationFeeWithoutReferrer; //Due to issue in oz testing suite, the msg.sender might not be owner _transferOwnership(owner); } function v2Initialize( ILidCertifiableToken _lidToken ) external v2Initializer onlyOwner { lidToken = _lidToken; } function registerAndStake(uint amount) public { registerAndStake(amount, address(0x0)); } function registerAndStake(uint amount, address referrer) public whenStakingActive { require(!stakerIsRegistered[msg.sender], "Staker must not be registered"); require(lidToken.balanceOf(msg.sender) >= amount, "Must have enough balance to stake amount"); uint finalAmount; if(address(0x0) == referrer) { //No referrer require(amount >= registrationFeeWithoutReferrer, "Must send at least enough LID to pay registration fee."); distribute(registrationFeeWithoutReferrer); finalAmount = amount.sub(registrationFeeWithoutReferrer); } else { //has referrer require(amount >= registrationFeeWithReferrer, "Must send at least enough LID to pay registration fee."); require(lidToken.transferFrom(msg.sender, referrer, registrationFeeWithReferrer), "Stake failed due to failed referral transfer."); accountReferrals[referrer] = accountReferrals[referrer].add(1); finalAmount = amount.sub(registrationFeeWithReferrer); } stakerIsRegistered[msg.sender] = true; stake(finalAmount); } function stake(uint amount) public whenStakingActive { require(stakerIsRegistered[msg.sender] == true, "Must be registered to stake."); require(amount >= 1e18, "Must stake at least one LID."); require(lidToken.balanceOf(msg.sender) >= amount, "Cannot stake more LID than you hold unstaked."); if (stakeValue[msg.sender] == 0) totalStakers = totalStakers.add(1); uint tax = _addStake(amount); require(lidToken.transferFrom(msg.sender, address(this), amount), "Stake failed due to failed transfer."); emit OnStake(msg.sender, amount, tax); } function unstake(uint amount) external whenStakingActive { require(amount >= 1e18, "Must unstake at least one LID."); require(stakeValue[msg.sender] >= amount, "Cannot unstake more LID than you have staked."); // Update staker's history _updateCheckpointValueAtNow( stakeValueHistory[msg.sender], stakeValue[msg.sender], stakeValue[msg.sender].sub(amount) ); // Update total staked history _updateCheckpointValueAtNow( totalStakedHistory, totalStaked, totalStaked.sub(amount) ); //must withdraw all dividends, to prevent overflows withdraw(dividendsOf(msg.sender)); if (stakeValue[msg.sender] == amount) totalStakers = totalStakers.sub(1); totalStaked = totalStaked.sub(amount); stakeValue[msg.sender] = stakeValue[msg.sender].sub(amount); uint tax = findTaxAmount(amount, unstakingTaxBP); uint earnings = amount.sub(tax); _increaseProfitPerShare(tax); stakerPayouts[msg.sender] = uintToInt(profitPerShare.mul(stakeValue[msg.sender])); for (uint i=0; i < stakeHandlers.length; i++) { stakeHandlers[i].handleUnstake(msg.sender, amount, stakeValue[msg.sender]); } require(lidToken.transferFrom(address(this), msg.sender, earnings), "Unstake failed due to failed transfer."); emit OnUnstake(msg.sender, amount, tax); } function withdraw(uint amount) public whenStakingActive { require(dividendsOf(msg.sender) >= amount, "Cannot withdraw more dividends than you have earned."); stakerPayouts[msg.sender] = stakerPayouts[msg.sender] + uintToInt(amount.mul(DISTRIBUTION_MULTIPLIER)); lidToken.transfer(msg.sender, amount); emit OnWithdraw(msg.sender, amount); } function reinvest(uint amount) external whenStakingActive { require(dividendsOf(msg.sender) >= amount, "Cannot reinvest more dividends than you have earned."); uint payout = amount.mul(DISTRIBUTION_MULTIPLIER); stakerPayouts[msg.sender] = stakerPayouts[msg.sender] + uintToInt(payout); uint tax = _addStake(amount); emit OnReinvest(msg.sender, amount, tax); } function distribute(uint amount) public { require(lidToken.balanceOf(msg.sender) >= amount, "Cannot distribute more LID than you hold unstaked."); totalDistributions = totalDistributions.add(amount); _increaseProfitPerShare(amount); require( lidToken.transferFrom(msg.sender, address(this), amount), "Distribution failed due to failed transfer." ); emit OnDistribute(msg.sender, amount); } function handleTaxDistribution(uint amount) external onlyLidToken { totalDistributions = totalDistributions.add(amount); _increaseProfitPerShare(amount); emit OnDistribute(msg.sender, amount); } function dividendsOf(address staker) public view returns (uint) { int divPayout = uintToInt(profitPerShare.mul(stakeValue[staker])); require(divPayout >= stakerPayouts[staker], "dividend calc overflow"); return uint(divPayout - stakerPayouts[staker]) .div(DISTRIBUTION_MULTIPLIER); } function findTaxAmount(uint value, uint taxBP) public pure returns (uint) { return value.mulBP(taxBP); } function numberStakeHandlersRegistered() external view returns (uint) { return stakeHandlers.length; } function registerStakeHandler(IStakeHandler sc) external onlyOwner { stakeHandlers.push(sc); } function unregisterStakeHandler(uint index) external onlyOwner { IStakeHandler sc = stakeHandlers[stakeHandlers.length-1]; stakeHandlers.pop(); stakeHandlers[index] = sc; } function setStakingBP(uint valueBP) external onlyOwner { require(valueBP < 10000, "Tax connot be over 100% (10000 BP)"); stakingTaxBP = valueBP; } function setUnstakingBP(uint valueBP) external onlyOwner { require(valueBP < 10000, "Tax connot be over 100% (10000 BP)"); unstakingTaxBP = valueBP; } function setStartTime(uint _startTime) external onlyOwner { startTime = _startTime; } function totalStakedAt(uint _blockNumber) public view returns(uint) { // If we haven't initialized history yet if (totalStakedHistory.length == 0) { // Use the existing value return totalStaked; } else { // Binary search history for the proper staked amount return _getCheckpointValueAt( totalStakedHistory, _blockNumber ); } } function stakeValueAt(address _owner, uint _blockNumber) public view returns (uint) { // If we haven't initialized history yet if (stakeValueHistory[_owner].length == 0) { // Use the existing latest value return stakeValue[_owner]; } else { // Binary search history for the proper staked amount return _getCheckpointValueAt(stakeValueHistory[_owner], _blockNumber); } } function setRegistrationFees(uint valueWithReferrer, uint valueWithoutReferrer) external onlyOwner { registrationFeeWithReferrer = valueWithReferrer; registrationFeeWithoutReferrer = valueWithoutReferrer; } function uintToInt(uint val) internal pure returns (int) { if (val >= uint(-1).div(2)) { require(false, "Overflow. Cannot convert uint to int."); } else { return int(val); } } function _addStake(uint _amount) internal returns (uint tax) { tax = findTaxAmount(_amount, stakingTaxBP); uint stakeAmount = _amount.sub(tax); // Update staker's history _updateCheckpointValueAtNow( stakeValueHistory[msg.sender], stakeValue[msg.sender], stakeValue[msg.sender].add(stakeAmount) ); // Update total staked history _updateCheckpointValueAtNow( totalStakedHistory, totalStaked, totalStaked.add(stakeAmount) ); totalStaked = totalStaked.add(stakeAmount); stakeValue[msg.sender] = stakeValue[msg.sender].add(stakeAmount); for (uint i=0; i < stakeHandlers.length; i++) { stakeHandlers[i].handleStake(msg.sender, stakeAmount, stakeValue[msg.sender]); } uint payout = profitPerShare.mul(stakeAmount); stakerPayouts[msg.sender] = stakerPayouts[msg.sender] + uintToInt(payout); _increaseProfitPerShare(tax); } function _increaseProfitPerShare(uint amount) internal { if (totalStaked != 0) { if (emptyStakeTokens != 0) { amount = amount.add(emptyStakeTokens); emptyStakeTokens = 0; } profitPerShare = profitPerShare.add(amount.mul(DISTRIBUTION_MULTIPLIER).div(totalStaked)); } else { emptyStakeTokens = emptyStakeTokens.add(amount); } } function _getCheckpointValueAt(Checkpoint[] storage checkpoints, uint _block) view internal returns (uint) { // This case should be handled by caller if (checkpoints.length == 0) return 0; // Use the latest checkpoint if (_block >= checkpoints[checkpoints.length-1].fromBlock) return checkpoints[checkpoints.length-1].value; // Use the oldest checkpoint if (_block < checkpoints[0].fromBlock) return checkpoints[0].value; // Binary search of the value in the array uint min = 0; uint max = checkpoints.length-1; while (max > min) { uint mid = (max + min + 1) / 2; if (checkpoints[mid].fromBlock<=_block) { min = mid; } else { max = mid-1; } } return checkpoints[min].value; } function _updateCheckpointValueAtNow( Checkpoint[] storage checkpoints, uint _oldValue, uint _value ) internal { require(_value <= uint128(-1)); require(_oldValue <= uint128(-1)); if (checkpoints.length == 0) { Checkpoint storage genesis = checkpoints[checkpoints.length++]; genesis.fromBlock = uint128(block.number - 1); genesis.value = uint128(_oldValue); } if (checkpoints[checkpoints.length - 1].fromBlock < block.number) { Checkpoint storage newCheckPoint = checkpoints[checkpoints.length++]; newCheckPoint.fromBlock = uint128(block.number); newCheckPoint.value = uint128(_value); } else { Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length - 1]; oldCheckPoint.value = uint128(_value); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSent","type":"uint256"}],"name":"OnDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"OnReinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"OnStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"OnUnstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OnWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accountReferrals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distribute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"dividendsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"taxBP","type":"uint256"}],"name":"findTaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleTaxDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_stakingTaxBP","type":"uint256"},{"internalType":"uint256","name":"_ustakingTaxBP","type":"uint256"},{"internalType":"uint256","name":"_registrationFeeWithReferrer","type":"uint256"},{"internalType":"uint256","name":"_registrationFeeWithoutReferrer","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract ILidCertifiableToken","name":"_lidToken","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberStakeHandlersRegistered","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"profitPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"registerAndStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"registerAndStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IStakeHandler","name":"sc","type":"address"}],"name":"registerStakeHandler","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"registrationFeeWithReferrer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registrationFeeWithoutReferrer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"valueWithReferrer","type":"uint256"},{"internalType":"uint256","name":"valueWithoutReferrer","type":"uint256"}],"name":"setRegistrationFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"valueBP","type":"uint256"}],"name":"setStakingBP","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"valueBP","type":"uint256"}],"name":"setUnstakingBP","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeHandlers","outputs":[{"internalType":"contract IStakeHandler","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"stakeValueAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerIsRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerPayouts","outputs":[{"internalType":"int256","name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakingTaxBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalDistributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"totalStakedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"unregisterStakeHandler","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"unstakingTaxBP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ILidCertifiableToken","name":"_lidToken","type":"address"}],"name":"v2Initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052612c75806100136000396000f3fe608060405234801561001057600080fd5b5060043610610264576000357c0100000000000000000000000000000000000000000000000000000000900480638698903811610158578063c4d66de8116100d5578063e7d643cf11610099578063e7d643cf14610607578063ee3e3acf1461062a578063f24ee7d314610650578063f2fde38b1461067c578063fc8690a2146106a257610264565b8063c4d66de814610564578063c52d47f01461058a578063c5acdb7a146105a7578063c9c53232146105c4578063d7a88e3c146105e157610264565b806391c05b0b1161011c57806391c05b0b146104f4578063947f9a81146105115780639d58b00c14610519578063a694fc3a1461053f578063a830a78b1461055c57610264565b806386989038146104855780638cb3c6611461048d5780638da5cb5b146104aa5780638f32d59b146104b2578063903ca8cb146104ce57610264565b80634feba02a116101e6578063715018a6116101aa578063715018a61461044857806378e9792514610450578063817b1cd21461045857806383b4918b146104605780638650e92a1461047d57610264565b80634feba02a146103d25780635632fe2a146103da578063568b19ed146103e257806361879df3146103ff5780636921091a1461041c57610264565b80633e0a322d1161022d5780633e0a322d14610308578063439cc54c146103255780634448e1801461036b5780634a1523dd146103915780634bd5fd5d1461039957610264565b806265318b14610269578063163db71b146102a15780632e17de78146102a95780632e1a7d4d146102c85780633a8ec83e146102e5575b600080fd5b61028f6004803603602081101561027f57600080fd5b5035600160a060020a03166106c8565b60408051918252519081900360200190f35b61028f6107ae565b6102c6600480360360208110156102bf57600080fd5b50356107b4565b005b6102c6600480360360208110156102de57600080fd5b5035610bc6565b61028f600480360360408110156102fb57600080fd5b5080359060200135610d6d565b6102c66004803603602081101561031e57600080fd5b5035610d88565b6102c6600480360360c081101561033b57600080fd5b50803590602081013590604081013590606081013590600160a060020a03608082013581169160a0013516610dd7565b6102c66004803603602081101561038157600080fd5b5035600160a060020a0316610ec3565b61028f610f81565b6103b6600480360360208110156103af57600080fd5b5035610f88565b60408051600160a060020a039092168252519081900360200190f35b61028f610faf565b61028f610fb5565b6102c6600480360360208110156103f857600080fd5b5035610fbb565b6102c66004803603602081101561041557600080fd5b50356110a5565b61028f6004803603604081101561043257600080fd5b50600160a060020a038135169060200135611137565b6102c661119c565b61028f611230565b61028f611236565b6102c66004803603602081101561047657600080fd5b503561123c565b61028f61136a565b61028f611370565b6102c6600480360360208110156104a357600080fd5b5035611376565b6103b661141f565b6104ba61142e565b604080519115158252519081900360200190f35b6102c6600480360360208110156104e457600080fd5b5035600160a060020a0316611454565b6102c66004803603602081101561050a57600080fd5b50356114f0565b61028f6116a5565b6104ba6004803603602081101561052f57600080fd5b5035600160a060020a03166116ab565b6102c66004803603602081101561055557600080fd5b50356116c0565b61028f6119f4565b6102c66004803603602081101561057a57600080fd5b5035600160a060020a03166119fa565b6102c6600480360360208110156105a057600080fd5b5035611aef565b6102c6600480360360208110156105bd57600080fd5b5035611afd565b61028f600480360360208110156105da57600080fd5b5035611b8f565b61028f600480360360208110156105f757600080fd5b5035600160a060020a0316611bb4565b6102c66004803603604081101561061d57600080fd5b5080359060200135611bc6565b61028f6004803603602081101561064057600080fd5b5035600160a060020a0316611c1b565b6102c66004803603604081101561066657600080fd5b5080359060200135600160a060020a0316611c2d565b6102c66004803603602081101561069257600080fd5b5035600160a060020a0316611fc5565b61028f600480360360208110156106b857600080fd5b5035600160a060020a0316612018565b600160a060020a038116600090815260696020526040812054606e5482916106fe916106f99163ffffffff61202a16565b612086565b600160a060020a0384166000908152606a6020526040902054909150811215610771576040805160e560020a62461bcd02815260206004820152601660248201527f6469766964656e642063616c63206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b600160a060020a0383166000908152606a60205260409020546107a59082036801000000000000000063ffffffff6120e216565b9150505b919050565b606b5481565b607154158015906107c6575060715442115b610808576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b670de0b6b3a7640000811015610868576040805160e560020a62461bcd02815260206004820152601e60248201527f4d75737420756e7374616b65206174206c65617374206f6e65204c49442e0000604482015290519081900360640190fd5b336000908152606960205260409020548111156108b95760405160e560020a62461bcd02815260040180806020018281038252602d815260200180612b5d602d913960400191505060405180910390fd5b3360009081526077602090815260408083206069909252909120546108ee91906108e9818563ffffffff61212416565b612166565b606c54610908906078906108e9818563ffffffff61212416565b610919610914336106c8565b610bc6565b3360009081526069602052604090205481141561094857606d5461094490600163ffffffff61212416565b606d555b606c5461095b908263ffffffff61212416565b606c553360009081526069602052604090205461097e908263ffffffff61212416565b3360009081526069602052604081209190915560675461099f908390610d6d565b905060006109b3838363ffffffff61212416565b90506109be826122ec565b33600090815260696020526040902054606e546109e5916106f9919063ffffffff61202a16565b336000908152606a60205260408120919091555b607054811015610ab95760708181548110610a1057fe5b600091825260208083209091015433808452606990925260408084205481517f63863e6f000000000000000000000000000000000000000000000000000000008152600481019490945260248401899052604484015251600160a060020a03909116926363863e6f926064808201939182900301818387803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b5050600190920191506109f99050565b506068546040805160e060020a6323b872dd028152306004820152336024820152604481018490529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610b1757600080fd5b505af1158015610b2b573d6000803e3d6000fd5b505050506040513d6020811015610b4157600080fd5b5051610b815760405160e560020a62461bcd028152600401808060200182810382526026815260200180612b376026913960400191505060405180910390fd5b604080513381526020810185905280820184905290517fefe5e683dfe58f596b38874c815bc9599676515f5e641a3305c40aba31c822a79181900360600190a1505050565b60715415801590610bd8575060715442115b610c1a576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b80610c24336106c8565b1015610c645760405160e560020a62461bcd0281526004018080602001828103825260348152602001806129dc6034913960400191505060405180910390fd5b610c806106f9826801000000000000000063ffffffff61202a16565b336000818152606a6020908152604080832080549590950190945560685484517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810194909452602484018690529351600160a060020a039094169363a9059cbb93604480820194918390030190829087803b158015610d0357600080fd5b505af1158015610d17573d6000803e3d6000fd5b505050506040513d6020811015610d2d57600080fd5b5050604080513381526020810183905281517fbace9fd79d5ea02ed8b43fa96af07e4e8f859a2f71ff878c748f5c22c5780284929181900390910190a150565b6000610d7f838363ffffffff61237816565b90505b92915050565b610d9061142e565b610dd2576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b607155565b600054610100900460ff1680610df05750610df061239d565b80610dfe575060005460ff16155b610e3c5760405160e560020a62461bcd02815260040180806020018281038252602e815260200180612bcb602e913960400191505060405180910390fd5b600054610100900460ff16158015610e67576000805460ff1961ff0019909116610100171660011790555b610e70336119fa565b6066879055606786905560688054600160a060020a031916600160a060020a03841617905560728590556073849055610ea8836123a3565b8015610eba576000805461ff00191690555b50505050505050565b60765460ff1615610f085760405160e560020a62461bcd028152600401808060200182810382526031815260200180612b066031913960400191505060405180910390fd5b6076805460ff19166001179055610f1d61142e565b610f5f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b60688054600160a060020a031916600160a060020a0392909216919091179055565b6070545b90565b60708181548110610f9557fe5b600091825260209091200154600160a060020a0316905081565b60735481565b60725481565b610fc361142e565b611005576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b6070805460009190600019810190811061101b57fe5b60009182526020909120015460708054600160a060020a039092169250908061104057fe5b60008281526020902081016000199081018054600160a060020a0319169055019055607080548291908490811061107357fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505050565b6110ad61142e565b6110ef576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b61271081106111325760405160e560020a62461bcd028152600401808060200182810382526022815260200180612ae46022913960400191505060405180910390fd5b606755565b600160a060020a0382166000908152607760205260408120546111735750600160a060020a038216600090815260696020526040902054610d82565b600160a060020a03831660009081526077602052604090206111959083612447565b9050610d82565b6111a461142e565b6111e6576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b603354604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360338054600160a060020a0319169055565b60715481565b606c5481565b6071541580159061124e575060715442115b611290576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b8061129a336106c8565b10156112da5760405160e560020a62461bcd028152600401808060200182810382526034815260200180612ab06034913960400191505060405180910390fd5b60006112f5826801000000000000000063ffffffff61202a16565b905061130081612086565b336000908152606a6020526040812080549290920190915561132183612596565b604080513381526020810186905280820183905290519192507fc7baba15468fd1418314fb422f04b4c098e4537c6272e621667aff807222a480919081900360600190a1505050565b606e5481565b606d5481565b606854600160a060020a031633146113c25760405160e560020a62461bcd028152600401808060200182810382526028815260200180612a366028913960400191505060405180910390fd5b606b546113d5908263ffffffff61275716565b606b556113e1816122ec565b604080513381526020810183905281517f3b5b764958bcf10eae6e214b635b729c52c8a4962688629cf597c3167cca2022929181900390910190a150565b603354600160a060020a031690565b603354600090600160a060020a03166114456127b4565b600160a060020a031614905090565b61145c61142e565b61149e576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b607080546001810182556000919091527f8f6b23ffa15f0465e3176e15ca644cf24f86dc1312fe715484e3c4aead5eb78b018054600160a060020a031916600160a060020a0392909216919091179055565b606854604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290518392600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561155357600080fd5b505afa158015611567573d6000803e3d6000fd5b505050506040513d602081101561157d57600080fd5b505110156115bf5760405160e560020a62461bcd02815260040180806020018281038252603281526020018061297d6032913960400191505060405180910390fd5b606b546115d2908263ffffffff61275716565b606b556115de816122ec565b6068546040805160e060020a6323b872dd028152336004820152306024820152604481018490529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050506040513d602081101561166557600080fd5b50516113e15760405160e560020a62461bcd02815260040180806020018281038252602b8152602001806128f8602b913960400191505060405180910390fd5b60675481565b60756020526000908152604090205460ff1681565b607154158015906116d2575060715442115b611714576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b3360009081526075602052604090205460ff161515600114611780576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374206265207265676973746572656420746f207374616b652e00000000604482015290519081900360640190fd5b670de0b6b3a76400008110156117e0576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374207374616b65206174206c65617374206f6e65204c49442e00000000604482015290519081900360640190fd5b606854604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290518392600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561184357600080fd5b505afa158015611857573d6000803e3d6000fd5b505050506040513d602081101561186d57600080fd5b505110156118af5760405160e560020a62461bcd02815260040180806020018281038252602d8152602001806129af602d913960400191505060405180910390fd5b336000908152606960205260409020546118db57606d546118d790600163ffffffff61275716565b606d555b60006118e682612596565b6068546040805160e060020a6323b872dd028152336004820152306024820152604481018690529051929350600160a060020a03909116916323b872dd916064808201926020929091908290030181600087803b15801561194657600080fd5b505af115801561195a573d6000803e3d6000fd5b505050506040513d602081101561197057600080fd5b50516119b05760405160e560020a62461bcd0281526004018080602001828103825260248152602001806129596024913960400191505060405180910390fd5b604080513381526020810184905280820183905290517ffeb41de252fbc1de97d95a27ed44f6044e66e11df6ca319955eef830b598fdb49181900360600190a15050565b60665481565b600054610100900460ff1680611a135750611a1361239d565b80611a21575060005460ff16155b611a5f5760405160e560020a62461bcd02815260040180806020018281038252602e815260200180612bcb602e913960400191505060405180910390fd5b600054610100900460ff16158015611a8a576000805460ff1961ff0019909116610100171660011790555b60338054600160a060020a031916600160a060020a0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38015611aeb576000805461ff00191690555b5050565b611afa816000611c2d565b50565b611b0561142e565b611b47576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b6127108110611b8a5760405160e560020a62461bcd028152600401808060200182810382526022815260200180612ae46022913960400191505060405180910390fd5b606655565b607854600090611ba25750606c546107a9565b611bad607883612447565b90506107a9565b60696020526000908152604090205481565b611bce61142e565b611c10576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b607291909155607355565b60746020526000908152604090205481565b60715415801590611c3f575060715442115b611c81576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b3360009081526075602052604090205460ff1615611ce9576040805160e560020a62461bcd02815260206004820152601d60248201527f5374616b6572206d757374206e6f742062652072656769737465726564000000604482015290519081900360640190fd5b606854604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290518492600160a060020a0316916370a08231916024808301926020929190829003018186803b158015611d4c57600080fd5b505afa158015611d60573d6000803e3d6000fd5b505050506040513d6020811015611d7657600080fd5b50511015611db85760405160e560020a62461bcd028152600401808060200182810382526028815260200180612c196028913960400191505060405180910390fd5b6000600160a060020a038216611e3257607354831015611e0c5760405160e560020a62461bcd0281526004018080602001828103825260368152602001806129236036913960400191505060405180910390fd5b611e176073546114f0565b607354611e2b90849063ffffffff61212416565b9050611f9d565b607254831015611e765760405160e560020a62461bcd0281526004018080602001828103825260368152602001806129236036913960400191505060405180910390fd5b6068546072546040805160e060020a6323b872dd028152336004820152600160a060020a0386811660248301526044820193909352905191909216916323b872dd9160648083019260209291908290030181600087803b158015611ed957600080fd5b505af1158015611eed573d6000803e3d6000fd5b505050506040513d6020811015611f0357600080fd5b5051611f435760405160e560020a62461bcd02815260040180806020018281038252602d815260200180612a5e602d913960400191505060405180910390fd5b600160a060020a038216600090815260746020526040902054611f6d90600163ffffffff61275716565b600160a060020a038316600090815260746020526040902055607254611f9a90849063ffffffff61212416565b90505b336000908152607560205260409020805460ff19166001179055611fc0816116c0565b505050565b611fcd61142e565b61200f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b611afa816123a3565b606a6020526000908152604090205481565b60008261203957506000610d82565b8282028284828161204657fe5b0414610d7f5760405160e560020a62461bcd028152600401808060200182810382526021815260200180612b8a6021913960400191505060405180910390fd5b600061209b600019600263ffffffff6120e216565b82106120db5760405160e560020a62461bcd028152600401808060200182810382526025815260200180612a8b6025913960400191505060405180910390fd5b50806107a9565b6000610d7f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127b8565b6000610d7f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061285d565b6001608060020a0381111561217a57600080fd5b6001608060020a0382111561218e57600080fd5b825461220357825460009084906121a882600183016128ba565b815481106121b257fe5b600091825260209091200180546001608060020a0385811670010000000000000000000000000000000002600019430182166fffffffffffffffffffffffffffffffff199093169290921716179055505b825443908490600019810190811061221757fe5b6000918252602090912001546001608060020a031610156122a1578254600090849061224682600183016128ba565b8154811061225057fe5b600091825260209091200180546001608060020a03848116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617905550611fc0565b8254600090849060001981019081106122b657fe5b600091825260209091200180546001608060020a0380851670010000000000000000000000000000000002911617905550505050565b606c541561235f57606f541561231857606f5461231090829063ffffffff61275716565b6000606f5590505b606c54612357906123489061233c846801000000000000000063ffffffff61202a16565b9063ffffffff6120e216565b606e549063ffffffff61275716565b606e55611afa565b606f54612372908263ffffffff61275716565b606f5550565b60008261238757506000610d82565b610d7f61271061233c858563ffffffff61202a16565b303b1590565b600160a060020a0381166123eb5760405160e560020a62461bcd028152600401808060200182810382526026815260200180612a106026913960400191505060405180910390fd5b603354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360338054600160a060020a031916600160a060020a0392909216919091179055565b815460009061245857506000610d82565b82548390600019810190811061246a57fe5b6000918252602090912001546001608060020a031682106124c75782548390600019810190811061249757fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a03169050610d82565b826000815481106124d457fe5b6000918252602090912001546001608060020a03168210156124fd578260008154811061249757fe5b8254600090600019015b8181111561255857600060026001838501010490508486828154811061252957fe5b6000918252602090912001546001608060020a03161161254b57809250612552565b6001810391505b50612507565b84828154811061256457fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031695945050505050565b60006125a482606654610d6d565b905060006125b8838363ffffffff61212416565b3360009081526077602090815260408083206069909252909120549192506125ea916108e9818563ffffffff61275716565b606c54612604906078906108e9818563ffffffff61275716565b606c54612617908263ffffffff61275716565b606c553360009081526069602052604090205461263a908263ffffffff61275716565b336000908152606960205260408120919091555b60705481101561270e576070818154811061266557fe5b600091825260208083209091015433808452606990925260408084205481517f71d7278e000000000000000000000000000000000000000000000000000000008152600481019490945260248401879052604484015251600160a060020a03909116926371d7278e926064808201939182900301818387803b1580156126ea57600080fd5b505af11580156126fe573d6000803e3d6000fd5b50506001909201915061264e9050565b50606e54600090612725908363ffffffff61202a16565b905061273081612086565b336000908152606a602052604090208054919091019055612750836122ec565b5050919050565b600082820183811015610d7f576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b600081836128475760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561280c5781810151838201526020016127f4565b50505050905090810190601f1680156128395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161285357fe5b0495945050505050565b600081848411156128b25760405160e560020a62461bcd02815260206004820181815283516024840152835190928392604490910191908501908083836000831561280c5781810151838201526020016127f4565b505050900390565b815481835581811115611fc057600083815260209020611fc0918101908301610f8591905b808211156128f357600081556001016128df565b509056fe446973747269627574696f6e206661696c65642064756520746f206661696c6564207472616e736665722e4d7573742073656e64206174206c6561737420656e6f756768204c494420746f2070617920726567697374726174696f6e206665652e5374616b65206661696c65642064756520746f206661696c6564207472616e736665722e43616e6e6f742064697374726962757465206d6f7265204c4944207468616e20796f7520686f6c6420756e7374616b65642e43616e6e6f74207374616b65206d6f7265204c4944207468616e20796f7520686f6c6420756e7374616b65642e43616e6e6f74207769746864726177206d6f7265206469766964656e6473207468616e20796f752068617665206561726e65642e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737343616e206f6e6c792062652063616c6c6564206279204c6964546f6b656e20636f6e74726163742e5374616b65206661696c65642064756520746f206661696c656420726566657272616c207472616e736665722e4f766572666c6f772e2043616e6e6f7420636f6e766572742075696e7420746f20696e742e43616e6e6f74207265696e76657374206d6f7265206469766964656e6473207468616e20796f752068617665206561726e65642e54617820636f6e6e6f74206265206f76657220313030252028313030303020425029563220436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564556e7374616b65206661696c65642064756520746f206661696c6564207472616e736665722e43616e6e6f7420756e7374616b65206d6f7265204c4944207468616e20796f752068617665207374616b65642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645374616b696e67206e6f742079657420737461727465642e00000000000000004d757374206861766520656e6f7567682062616c616e636520746f207374616b6520616d6f756e74a265627a7a72315820337294ba0b7631db1cbe0f99818e4e993cee12de4c0696cc5b456fa28d0f020d64736f6c63430005100032
Deployed Bytecode
0x608060405234801561001057600080fd5b5060043610610264576000357c0100000000000000000000000000000000000000000000000000000000900480638698903811610158578063c4d66de8116100d5578063e7d643cf11610099578063e7d643cf14610607578063ee3e3acf1461062a578063f24ee7d314610650578063f2fde38b1461067c578063fc8690a2146106a257610264565b8063c4d66de814610564578063c52d47f01461058a578063c5acdb7a146105a7578063c9c53232146105c4578063d7a88e3c146105e157610264565b806391c05b0b1161011c57806391c05b0b146104f4578063947f9a81146105115780639d58b00c14610519578063a694fc3a1461053f578063a830a78b1461055c57610264565b806386989038146104855780638cb3c6611461048d5780638da5cb5b146104aa5780638f32d59b146104b2578063903ca8cb146104ce57610264565b80634feba02a116101e6578063715018a6116101aa578063715018a61461044857806378e9792514610450578063817b1cd21461045857806383b4918b146104605780638650e92a1461047d57610264565b80634feba02a146103d25780635632fe2a146103da578063568b19ed146103e257806361879df3146103ff5780636921091a1461041c57610264565b80633e0a322d1161022d5780633e0a322d14610308578063439cc54c146103255780634448e1801461036b5780634a1523dd146103915780634bd5fd5d1461039957610264565b806265318b14610269578063163db71b146102a15780632e17de78146102a95780632e1a7d4d146102c85780633a8ec83e146102e5575b600080fd5b61028f6004803603602081101561027f57600080fd5b5035600160a060020a03166106c8565b60408051918252519081900360200190f35b61028f6107ae565b6102c6600480360360208110156102bf57600080fd5b50356107b4565b005b6102c6600480360360208110156102de57600080fd5b5035610bc6565b61028f600480360360408110156102fb57600080fd5b5080359060200135610d6d565b6102c66004803603602081101561031e57600080fd5b5035610d88565b6102c6600480360360c081101561033b57600080fd5b50803590602081013590604081013590606081013590600160a060020a03608082013581169160a0013516610dd7565b6102c66004803603602081101561038157600080fd5b5035600160a060020a0316610ec3565b61028f610f81565b6103b6600480360360208110156103af57600080fd5b5035610f88565b60408051600160a060020a039092168252519081900360200190f35b61028f610faf565b61028f610fb5565b6102c6600480360360208110156103f857600080fd5b5035610fbb565b6102c66004803603602081101561041557600080fd5b50356110a5565b61028f6004803603604081101561043257600080fd5b50600160a060020a038135169060200135611137565b6102c661119c565b61028f611230565b61028f611236565b6102c66004803603602081101561047657600080fd5b503561123c565b61028f61136a565b61028f611370565b6102c6600480360360208110156104a357600080fd5b5035611376565b6103b661141f565b6104ba61142e565b604080519115158252519081900360200190f35b6102c6600480360360208110156104e457600080fd5b5035600160a060020a0316611454565b6102c66004803603602081101561050a57600080fd5b50356114f0565b61028f6116a5565b6104ba6004803603602081101561052f57600080fd5b5035600160a060020a03166116ab565b6102c66004803603602081101561055557600080fd5b50356116c0565b61028f6119f4565b6102c66004803603602081101561057a57600080fd5b5035600160a060020a03166119fa565b6102c6600480360360208110156105a057600080fd5b5035611aef565b6102c6600480360360208110156105bd57600080fd5b5035611afd565b61028f600480360360208110156105da57600080fd5b5035611b8f565b61028f600480360360208110156105f757600080fd5b5035600160a060020a0316611bb4565b6102c66004803603604081101561061d57600080fd5b5080359060200135611bc6565b61028f6004803603602081101561064057600080fd5b5035600160a060020a0316611c1b565b6102c66004803603604081101561066657600080fd5b5080359060200135600160a060020a0316611c2d565b6102c66004803603602081101561069257600080fd5b5035600160a060020a0316611fc5565b61028f600480360360208110156106b857600080fd5b5035600160a060020a0316612018565b600160a060020a038116600090815260696020526040812054606e5482916106fe916106f99163ffffffff61202a16565b612086565b600160a060020a0384166000908152606a6020526040902054909150811215610771576040805160e560020a62461bcd02815260206004820152601660248201527f6469766964656e642063616c63206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b600160a060020a0383166000908152606a60205260409020546107a59082036801000000000000000063ffffffff6120e216565b9150505b919050565b606b5481565b607154158015906107c6575060715442115b610808576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b670de0b6b3a7640000811015610868576040805160e560020a62461bcd02815260206004820152601e60248201527f4d75737420756e7374616b65206174206c65617374206f6e65204c49442e0000604482015290519081900360640190fd5b336000908152606960205260409020548111156108b95760405160e560020a62461bcd02815260040180806020018281038252602d815260200180612b5d602d913960400191505060405180910390fd5b3360009081526077602090815260408083206069909252909120546108ee91906108e9818563ffffffff61212416565b612166565b606c54610908906078906108e9818563ffffffff61212416565b610919610914336106c8565b610bc6565b3360009081526069602052604090205481141561094857606d5461094490600163ffffffff61212416565b606d555b606c5461095b908263ffffffff61212416565b606c553360009081526069602052604090205461097e908263ffffffff61212416565b3360009081526069602052604081209190915560675461099f908390610d6d565b905060006109b3838363ffffffff61212416565b90506109be826122ec565b33600090815260696020526040902054606e546109e5916106f9919063ffffffff61202a16565b336000908152606a60205260408120919091555b607054811015610ab95760708181548110610a1057fe5b600091825260208083209091015433808452606990925260408084205481517f63863e6f000000000000000000000000000000000000000000000000000000008152600481019490945260248401899052604484015251600160a060020a03909116926363863e6f926064808201939182900301818387803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b5050600190920191506109f99050565b506068546040805160e060020a6323b872dd028152306004820152336024820152604481018490529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b158015610b1757600080fd5b505af1158015610b2b573d6000803e3d6000fd5b505050506040513d6020811015610b4157600080fd5b5051610b815760405160e560020a62461bcd028152600401808060200182810382526026815260200180612b376026913960400191505060405180910390fd5b604080513381526020810185905280820184905290517fefe5e683dfe58f596b38874c815bc9599676515f5e641a3305c40aba31c822a79181900360600190a1505050565b60715415801590610bd8575060715442115b610c1a576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b80610c24336106c8565b1015610c645760405160e560020a62461bcd0281526004018080602001828103825260348152602001806129dc6034913960400191505060405180910390fd5b610c806106f9826801000000000000000063ffffffff61202a16565b336000818152606a6020908152604080832080549590950190945560685484517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810194909452602484018690529351600160a060020a039094169363a9059cbb93604480820194918390030190829087803b158015610d0357600080fd5b505af1158015610d17573d6000803e3d6000fd5b505050506040513d6020811015610d2d57600080fd5b5050604080513381526020810183905281517fbace9fd79d5ea02ed8b43fa96af07e4e8f859a2f71ff878c748f5c22c5780284929181900390910190a150565b6000610d7f838363ffffffff61237816565b90505b92915050565b610d9061142e565b610dd2576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b607155565b600054610100900460ff1680610df05750610df061239d565b80610dfe575060005460ff16155b610e3c5760405160e560020a62461bcd02815260040180806020018281038252602e815260200180612bcb602e913960400191505060405180910390fd5b600054610100900460ff16158015610e67576000805460ff1961ff0019909116610100171660011790555b610e70336119fa565b6066879055606786905560688054600160a060020a031916600160a060020a03841617905560728590556073849055610ea8836123a3565b8015610eba576000805461ff00191690555b50505050505050565b60765460ff1615610f085760405160e560020a62461bcd028152600401808060200182810382526031815260200180612b066031913960400191505060405180910390fd5b6076805460ff19166001179055610f1d61142e565b610f5f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b60688054600160a060020a031916600160a060020a0392909216919091179055565b6070545b90565b60708181548110610f9557fe5b600091825260209091200154600160a060020a0316905081565b60735481565b60725481565b610fc361142e565b611005576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b6070805460009190600019810190811061101b57fe5b60009182526020909120015460708054600160a060020a039092169250908061104057fe5b60008281526020902081016000199081018054600160a060020a0319169055019055607080548291908490811061107357fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a031602179055505050565b6110ad61142e565b6110ef576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b61271081106111325760405160e560020a62461bcd028152600401808060200182810382526022815260200180612ae46022913960400191505060405180910390fd5b606755565b600160a060020a0382166000908152607760205260408120546111735750600160a060020a038216600090815260696020526040902054610d82565b600160a060020a03831660009081526077602052604090206111959083612447565b9050610d82565b6111a461142e565b6111e6576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b603354604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360338054600160a060020a0319169055565b60715481565b606c5481565b6071541580159061124e575060715442115b611290576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b8061129a336106c8565b10156112da5760405160e560020a62461bcd028152600401808060200182810382526034815260200180612ab06034913960400191505060405180910390fd5b60006112f5826801000000000000000063ffffffff61202a16565b905061130081612086565b336000908152606a6020526040812080549290920190915561132183612596565b604080513381526020810186905280820183905290519192507fc7baba15468fd1418314fb422f04b4c098e4537c6272e621667aff807222a480919081900360600190a1505050565b606e5481565b606d5481565b606854600160a060020a031633146113c25760405160e560020a62461bcd028152600401808060200182810382526028815260200180612a366028913960400191505060405180910390fd5b606b546113d5908263ffffffff61275716565b606b556113e1816122ec565b604080513381526020810183905281517f3b5b764958bcf10eae6e214b635b729c52c8a4962688629cf597c3167cca2022929181900390910190a150565b603354600160a060020a031690565b603354600090600160a060020a03166114456127b4565b600160a060020a031614905090565b61145c61142e565b61149e576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b607080546001810182556000919091527f8f6b23ffa15f0465e3176e15ca644cf24f86dc1312fe715484e3c4aead5eb78b018054600160a060020a031916600160a060020a0392909216919091179055565b606854604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290518392600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561155357600080fd5b505afa158015611567573d6000803e3d6000fd5b505050506040513d602081101561157d57600080fd5b505110156115bf5760405160e560020a62461bcd02815260040180806020018281038252603281526020018061297d6032913960400191505060405180910390fd5b606b546115d2908263ffffffff61275716565b606b556115de816122ec565b6068546040805160e060020a6323b872dd028152336004820152306024820152604481018490529051600160a060020a03909216916323b872dd916064808201926020929091908290030181600087803b15801561163b57600080fd5b505af115801561164f573d6000803e3d6000fd5b505050506040513d602081101561166557600080fd5b50516113e15760405160e560020a62461bcd02815260040180806020018281038252602b8152602001806128f8602b913960400191505060405180910390fd5b60675481565b60756020526000908152604090205460ff1681565b607154158015906116d2575060715442115b611714576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b3360009081526075602052604090205460ff161515600114611780576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374206265207265676973746572656420746f207374616b652e00000000604482015290519081900360640190fd5b670de0b6b3a76400008110156117e0576040805160e560020a62461bcd02815260206004820152601c60248201527f4d757374207374616b65206174206c65617374206f6e65204c49442e00000000604482015290519081900360640190fd5b606854604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290518392600160a060020a0316916370a08231916024808301926020929190829003018186803b15801561184357600080fd5b505afa158015611857573d6000803e3d6000fd5b505050506040513d602081101561186d57600080fd5b505110156118af5760405160e560020a62461bcd02815260040180806020018281038252602d8152602001806129af602d913960400191505060405180910390fd5b336000908152606960205260409020546118db57606d546118d790600163ffffffff61275716565b606d555b60006118e682612596565b6068546040805160e060020a6323b872dd028152336004820152306024820152604481018690529051929350600160a060020a03909116916323b872dd916064808201926020929091908290030181600087803b15801561194657600080fd5b505af115801561195a573d6000803e3d6000fd5b505050506040513d602081101561197057600080fd5b50516119b05760405160e560020a62461bcd0281526004018080602001828103825260248152602001806129596024913960400191505060405180910390fd5b604080513381526020810184905280820183905290517ffeb41de252fbc1de97d95a27ed44f6044e66e11df6ca319955eef830b598fdb49181900360600190a15050565b60665481565b600054610100900460ff1680611a135750611a1361239d565b80611a21575060005460ff16155b611a5f5760405160e560020a62461bcd02815260040180806020018281038252602e815260200180612bcb602e913960400191505060405180910390fd5b600054610100900460ff16158015611a8a576000805460ff1961ff0019909116610100171660011790555b60338054600160a060020a031916600160a060020a0384811691909117918290556040519116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38015611aeb576000805461ff00191690555b5050565b611afa816000611c2d565b50565b611b0561142e565b611b47576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b6127108110611b8a5760405160e560020a62461bcd028152600401808060200182810382526022815260200180612ae46022913960400191505060405180910390fd5b606655565b607854600090611ba25750606c546107a9565b611bad607883612447565b90506107a9565b60696020526000908152604090205481565b611bce61142e565b611c10576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b607291909155607355565b60746020526000908152604090205481565b60715415801590611c3f575060715442115b611c81576040805160e560020a62461bcd0281526020600482015260186024820152600080516020612bf9833981519152604482015290519081900360640190fd5b3360009081526075602052604090205460ff1615611ce9576040805160e560020a62461bcd02815260206004820152601d60248201527f5374616b6572206d757374206e6f742062652072656769737465726564000000604482015290519081900360640190fd5b606854604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290518492600160a060020a0316916370a08231916024808301926020929190829003018186803b158015611d4c57600080fd5b505afa158015611d60573d6000803e3d6000fd5b505050506040513d6020811015611d7657600080fd5b50511015611db85760405160e560020a62461bcd028152600401808060200182810382526028815260200180612c196028913960400191505060405180910390fd5b6000600160a060020a038216611e3257607354831015611e0c5760405160e560020a62461bcd0281526004018080602001828103825260368152602001806129236036913960400191505060405180910390fd5b611e176073546114f0565b607354611e2b90849063ffffffff61212416565b9050611f9d565b607254831015611e765760405160e560020a62461bcd0281526004018080602001828103825260368152602001806129236036913960400191505060405180910390fd5b6068546072546040805160e060020a6323b872dd028152336004820152600160a060020a0386811660248301526044820193909352905191909216916323b872dd9160648083019260209291908290030181600087803b158015611ed957600080fd5b505af1158015611eed573d6000803e3d6000fd5b505050506040513d6020811015611f0357600080fd5b5051611f435760405160e560020a62461bcd02815260040180806020018281038252602d815260200180612a5e602d913960400191505060405180910390fd5b600160a060020a038216600090815260746020526040902054611f6d90600163ffffffff61275716565b600160a060020a038316600090815260746020526040902055607254611f9a90849063ffffffff61212416565b90505b336000908152607560205260409020805460ff19166001179055611fc0816116c0565b505050565b611fcd61142e565b61200f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020612bab833981519152604482015290519081900360640190fd5b611afa816123a3565b606a6020526000908152604090205481565b60008261203957506000610d82565b8282028284828161204657fe5b0414610d7f5760405160e560020a62461bcd028152600401808060200182810382526021815260200180612b8a6021913960400191505060405180910390fd5b600061209b600019600263ffffffff6120e216565b82106120db5760405160e560020a62461bcd028152600401808060200182810382526025815260200180612a8b6025913960400191505060405180910390fd5b50806107a9565b6000610d7f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127b8565b6000610d7f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061285d565b6001608060020a0381111561217a57600080fd5b6001608060020a0382111561218e57600080fd5b825461220357825460009084906121a882600183016128ba565b815481106121b257fe5b600091825260209091200180546001608060020a0385811670010000000000000000000000000000000002600019430182166fffffffffffffffffffffffffffffffff199093169290921716179055505b825443908490600019810190811061221757fe5b6000918252602090912001546001608060020a031610156122a1578254600090849061224682600183016128ba565b8154811061225057fe5b600091825260209091200180546001608060020a03848116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617905550611fc0565b8254600090849060001981019081106122b657fe5b600091825260209091200180546001608060020a0380851670010000000000000000000000000000000002911617905550505050565b606c541561235f57606f541561231857606f5461231090829063ffffffff61275716565b6000606f5590505b606c54612357906123489061233c846801000000000000000063ffffffff61202a16565b9063ffffffff6120e216565b606e549063ffffffff61275716565b606e55611afa565b606f54612372908263ffffffff61275716565b606f5550565b60008261238757506000610d82565b610d7f61271061233c858563ffffffff61202a16565b303b1590565b600160a060020a0381166123eb5760405160e560020a62461bcd028152600401808060200182810382526026815260200180612a106026913960400191505060405180910390fd5b603354604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360338054600160a060020a031916600160a060020a0392909216919091179055565b815460009061245857506000610d82565b82548390600019810190811061246a57fe5b6000918252602090912001546001608060020a031682106124c75782548390600019810190811061249757fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a03169050610d82565b826000815481106124d457fe5b6000918252602090912001546001608060020a03168210156124fd578260008154811061249757fe5b8254600090600019015b8181111561255857600060026001838501010490508486828154811061252957fe5b6000918252602090912001546001608060020a03161161254b57809250612552565b6001810391505b50612507565b84828154811061256457fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031695945050505050565b60006125a482606654610d6d565b905060006125b8838363ffffffff61212416565b3360009081526077602090815260408083206069909252909120549192506125ea916108e9818563ffffffff61275716565b606c54612604906078906108e9818563ffffffff61275716565b606c54612617908263ffffffff61275716565b606c553360009081526069602052604090205461263a908263ffffffff61275716565b336000908152606960205260408120919091555b60705481101561270e576070818154811061266557fe5b600091825260208083209091015433808452606990925260408084205481517f71d7278e000000000000000000000000000000000000000000000000000000008152600481019490945260248401879052604484015251600160a060020a03909116926371d7278e926064808201939182900301818387803b1580156126ea57600080fd5b505af11580156126fe573d6000803e3d6000fd5b50506001909201915061264e9050565b50606e54600090612725908363ffffffff61202a16565b905061273081612086565b336000908152606a602052604090208054919091019055612750836122ec565b5050919050565b600082820183811015610d7f576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b600081836128475760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561280c5781810151838201526020016127f4565b50505050905090810190601f1680156128395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161285357fe5b0495945050505050565b600081848411156128b25760405160e560020a62461bcd02815260206004820181815283516024840152835190928392604490910191908501908083836000831561280c5781810151838201526020016127f4565b505050900390565b815481835581811115611fc057600083815260209020611fc0918101908301610f8591905b808211156128f357600081556001016128df565b509056fe446973747269627574696f6e206661696c65642064756520746f206661696c6564207472616e736665722e4d7573742073656e64206174206c6561737420656e6f756768204c494420746f2070617920726567697374726174696f6e206665652e5374616b65206661696c65642064756520746f206661696c6564207472616e736665722e43616e6e6f742064697374726962757465206d6f7265204c4944207468616e20796f7520686f6c6420756e7374616b65642e43616e6e6f74207374616b65206d6f7265204c4944207468616e20796f7520686f6c6420756e7374616b65642e43616e6e6f74207769746864726177206d6f7265206469766964656e6473207468616e20796f752068617665206561726e65642e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737343616e206f6e6c792062652063616c6c6564206279204c6964546f6b656e20636f6e74726163742e5374616b65206661696c65642064756520746f206661696c656420726566657272616c207472616e736665722e4f766572666c6f772e2043616e6e6f7420636f6e766572742075696e7420746f20696e742e43616e6e6f74207265696e76657374206d6f7265206469766964656e6473207468616e20796f752068617665206561726e65642e54617820636f6e6e6f74206265206f76657220313030252028313030303020425029563220436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564556e7374616b65206661696c65642064756520746f206661696c6564207472616e736665722e43616e6e6f7420756e7374616b65206d6f7265204c4944207468616e20796f752068617665207374616b65642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645374616b696e67206e6f742079657420737461727465642e00000000000000004d757374206861766520656e6f7567682062616c616e636520746f207374616b6520616d6f756e74a265627a7a72315820337294ba0b7631db1cbe0f99818e4e993cee12de4c0696cc5b456fa28d0f020d64736f6c63430005100032
Deployed Bytecode Sourcemap
13206:13556:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13206:13556:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20870:328;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20870:328:0;-1:-1:-1;;;;;20870:328:0;;:::i;:::-;;;;;;;;;;;;;;;;13606:30;;;:::i;17839:1502::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17839:1502:0;;:::i;:::-;;19349:380;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19349:380:0;;:::i;21206:118::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21206:118:0;;;;;;;:::i;22142:99::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22142:99:0;;:::i;15099:683::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;15099:683:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15099:683:0;;;;;;;;;;;;:::i;15790:142::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15790:142:0;-1:-1:-1;;;;;15790:142:0;;:::i;21332:116::-;;;:::i;13843:36::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13843:36:0;;:::i;:::-;;;;-1:-1:-1;;;;;13843:36:0;;;;;;;;;;;;;;13962:42;;;:::i;13916:39::-;;;:::i;21572:204::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21572:204:0;;:::i;21961:173::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21961:173:0;;:::i;22696:446::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22696:446:0;;;;;;;;:::i;10317:140::-;;;:::i;13886:21::-;;;:::i;13643:23::-;;;:::i;19737:409::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19737:409:0;;:::i;13704:26::-;;;:::i;13673:24::-;;;:::i;20636:226::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20636:226:0;;:::i;9504:79::-;;;:::i;9870:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;21456:108;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21456:108:0;-1:-1:-1;;;;;21456:108:0;;:::i;20154:474::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20154:474:0;;:::i;13423:26::-;;;:::i;14066:50::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14066:50:0;-1:-1:-1;;;;;14066:50:0;;:::i;17224:607::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17224:607:0;;:::i;13392:24::-;;;:::i;9278:145::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9278:145:0;-1:-1:-1;;;;;9278:145:0;;:::i;15940:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15940:103:0;;:::i;21784:169::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21784:169:0;;:::i;22249:439::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22249:439:0;;:::i;13502:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13502:42:0;-1:-1:-1;;;;;13502:42:0;;:::i;23150:229::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23150:229:0;;;;;;;:::i;14011:48::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14011:48:0;-1:-1:-1;;;;;14011:48:0;;:::i;16051:1165::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16051:1165:0;;;;;;-1:-1:-1;;;;;16051:1165:0;;:::i;10612:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10612:109:0;-1:-1:-1;;;;;10612:109:0;;:::i;13551:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13551:44:0;-1:-1:-1;;;;;13551:44:0;;:::i;20870:328::-;-1:-1:-1;;;;;20990:18:0;;20928:4;20990:18;;;:10;:18;;;;;;20971:14;;20928:4;;20961:49;;20971:38;;;:18;:38;:::i;:::-;20961:9;:49::i;:::-;-1:-1:-1;;;;;21042:21:0;;;;;;:13;:21;;;;;;20945:65;;-1:-1:-1;21029:34:0;;;21021:69;;;;;-1:-1:-1;;;;;21021:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21125:21:0;;;;;;:13;:21;;;;;;21108:82;;21113:33;;13376:7;21108:82;:57;:82;:::i;:::-;21101:89;;;20870:328;;;;:::o;13606:30::-;;;;:::o;17839:1502::-;15009:9;;:14;;;;:33;;;15033:9;;15027:3;:15;15009:33;15001:70;;;;;-1:-1:-1;;;;;15001:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15001:70:0;;;;;;;;;;;;;;;17925:4;17915:6;:14;;17907:57;;;;;-1:-1:-1;;;;;17907:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17994:10;17983:22;;;;:10;:22;;;;;;:32;-1:-1:-1;17983:32:0;17975:90;;;;-1:-1:-1;;;;;17975:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18168:10;18150:29;;;;:17;:29;;;;;;;;18190:10;:22;;;;;;;18112:156;;18150:29;18223:34;18190:22;18250:6;18223:34;:26;:34;:::i;:::-;18112:27;:156::i;:::-;18388:11;;18321:123;;18359:18;;18410:23;18388:11;18426:6;18410:23;:15;:23;:::i;18321:123::-;18526:33;18535:23;18547:10;18535:11;:23::i;:::-;18526:8;:33::i;:::-;18585:10;18574:22;;;;:10;:22;;;;;;:32;;18570:72;;;18623:12;;:19;;18640:1;18623:19;:16;:19;:::i;:::-;18608:12;:34;18570:72;18667:11;;:23;;18683:6;18667:23;:15;:23;:::i;:::-;18653:11;:37;18737:10;18726:22;;;;:10;:22;;;;;;:34;;18753:6;18726:34;:26;:34;:::i;:::-;18712:10;18701:22;;;;:10;:22;;;;;:59;;;;18806:14;;18784:37;;18798:6;;18784:13;:37::i;:::-;18773:48;-1:-1:-1;18832:13:0;18848:15;:6;18773:48;18848:15;:10;:15;:::i;:::-;18832:31;;18874:28;18898:3;18874:23;:28::i;:::-;18981:10;18970:22;;;;:10;:22;;;;;;18951:14;;18941:53;;18951:42;;:14;:42;:18;:42;:::i;18941:53::-;18927:10;18913:25;;;;:13;:25;;;;;:81;;;;19007:147;19026:13;:20;19022:24;;19007:147;;;19068:13;19082:1;19068:16;;;;;;;;;;;;;;;;;;;;19099:10;19119:22;;;:10;:22;;;;;;;;19068:74;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19068:16:0;;;;:30;;:74;;;;;;;;;;;:16;;:74;;;5:2:-1;;;;30:1;27;20:12;5:2;19068:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19048:3:0;;;;;-1:-1:-1;19007:147:0;;-1:-1:-1;19007:147:0;;-1:-1:-1;19182:8:0;;:58;;;-1:-1:-1;;;;;19182:58:0;;19212:4;19182:58;;;;19219:10;19182:58;;;;;;;;;;;;-1:-1:-1;;;;;19182:8:0;;;;:21;;:58;;;;;;;;;;;;;;;:8;;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;19182:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19182:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19182:58:0;19174:109;;;;-1:-1:-1;;;;;19174:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19299:34;;;19309:10;19299:34;;;;;;;;;;;;;;;;;;;;;;;;;15082:1;;17839:1502;:::o;19349:380::-;15009:9;;:14;;;;:33;;;15033:9;;15027:3;:15;15009:33;15001:70;;;;;-1:-1:-1;;;;;15001:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15001:70:0;;;;;;;;;;;;;;;19451:6;19424:23;19436:10;19424:11;:23::i;:::-;:33;;19416:98;;;;-1:-1:-1;;;;;19416:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19581:46;19591:35;:6;13376:7;19591:35;:10;:35;:::i;19581:46::-;19567:10;19553:25;;;;:13;:25;;;;;;;;;;:74;;;;19525:102;;;19638:8;;:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19638:8:0;;;;:17;;:37;;;;;;;;;;;;;:8;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;19638:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19638:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;19691:30:0;;;19702:10;19691:30;;19638:37;19691:30;;;;;;;;;;;;;;;;;;19349:380;:::o;21206:118::-;21274:4;21298:18;:5;21310;21298:18;:11;:18;:::i;:::-;21291:25;;21206:118;;;;;:::o;22142:99::-;9716:9;:7;:9::i;:::-;9708:54;;;;;-1:-1:-1;;;;;9708:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9708:54:0;;;;;;;;;;;;;;;22211:9;:22;22142:99::o;15099:683::-;6475:12;;;;;;;;:31;;;6491:15;:13;:15::i;:::-;6475:47;;;-1:-1:-1;6511:11:0;;;;6510:12;6475:47;6467:106;;;;-1:-1:-1;;;;;6467:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6582:19;6605:12;;;;;;6604:13;6624:83;;;;6653:12;:19;;-1:-1:-1;;;;6653:19:0;;;;;6681:18;6668:4;6681:18;;;6624:83;15373:30;15392:10;15373:18;:30::i;:::-;15414:12;:28;;;15453:14;:31;;;15495:8;:20;;-1:-1:-1;;;;;;15495:20:0;-1:-1:-1;;;;;15495:20:0;;;;;15526:27;:58;;;15595:30;:64;;;15749:25;15768:5;15749:18;:25::i;:::-;6729:14;6725:57;;;6769:5;6754:20;;-1:-1:-1;;6754:20:0;;;6725:57;15099:683;;;;;;;:::o;15790:142::-;14696:11;;;;14695:12;14687:74;;;;-1:-1:-1;;;;;14687:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14772:11;:18;;-1:-1:-1;;14772:18:0;14786:4;14772:18;;;9716:9;:7;:9::i;:::-;9708:54;;;;;-1:-1:-1;;;;;9708:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9708:54:0;;;;;;;;;;;;;;;15904:8;:20;;-1:-1:-1;;;;;;15904:20:0;-1:-1:-1;;;;;15904:20:0;;;;;;;;;;15790:142::o;21332:116::-;21420:13;:20;21332:116;;:::o;13843:36::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13843:36:0;;-1:-1:-1;13843:36:0;:::o;13962:42::-;;;;:::o;13916:39::-;;;;:::o;21572:204::-;9716:9;:7;:9::i;:::-;9708:54;;;;;-1:-1:-1;;;;;9708:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9708:54:0;;;;;;;;;;;;;;;21665:13;21679:20;;21646:16;;21665:13;-1:-1:-1;;21679:22:0;;;21665:37;;;;;;;;;;;;;;;;21713:13;:19;;-1:-1:-1;;;;;21665:37:0;;;;-1:-1:-1;21713:13:0;:19;;;;;;;;;;;;;;-1:-1:-1;;21713:19:0;;;;;-1:-1:-1;;;;;;21713:19:0;;;;;;21743:13;:20;;21766:2;;21743:13;21757:5;;21743:20;;;;;;;;;;;;;;:25;;;;;-1:-1:-1;;;;;21743:25:0;;;;;-1:-1:-1;;;;;21743:25:0;;;;;;9773:1;21572:204;:::o;21961:173::-;9716:9;:7;:9::i;:::-;9708:54;;;;;-1:-1:-1;;;;;9708:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9708:54:0;;;;;;;;;;;;;;;22047:5;22037:7;:15;22029:62;;;;-1:-1:-1;;;;;22029:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22102:14;:24;21961:173::o;22696:446::-;-1:-1:-1;;;;;22845:25:0;;22774:4;22845:25;;;:17;:25;;;;;:32;22841:294;;-1:-1:-1;;;;;;22944:18:0;;;;;;:10;:18;;;;;;22937:25;;22841:294;-1:-1:-1;;;;;23083:25:0;;;;;;:17;:25;;;;;23061:62;;23110:12;23061:21;:62::i;:::-;23054:69;;;;10317:140;9716:9;:7;:9::i;:::-;9708:54;;;;;-1:-1:-1;;;;;9708:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9708:54:0;;;;;;;;;;;;;;;10400:6;;10379:40;;10416:1;;-1:-1:-1;;;;;10400:6:0;;10379:40;;10416:1;;10379:40;10430:6;:19;;-1:-1:-1;;;;;;10430:19:0;;;10317:140::o;13886:21::-;;;;:::o;13643:23::-;;;;:::o;19737:409::-;15009:9;;:14;;;;:33;;;15033:9;;15027:3;:15;15009:33;15001:70;;;;;-1:-1:-1;;;;;15001:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15001:70:0;;;;;;;;;;;;;;;19841:6;19814:23;19826:10;19814:11;:23::i;:::-;:33;;19806:98;;;;-1:-1:-1;;;;;19806:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19915:11;19929:35;:6;13376:7;19929:35;:10;:35;:::i;:::-;19915:49;;20031:17;20041:6;20031:9;:17::i;:::-;20017:10;20003:25;;;;:13;:25;;;;;;;:45;;;;19975:73;;;20070:17;20080:6;20070:9;:17::i;:::-;20103:35;;;20114:10;20103:35;;;;;;;;;;;;;;;;20059:28;;-1:-1:-1;20103:35:0;;;;;;;;;;15082:1;;19737:409;:::o;13704:26::-;;;;:::o;13673:24::-;;;;:::o;20636:226::-;14881:8;;-1:-1:-1;;;;;14881:8:0;14859:10;:31;14851:84;;;;-1:-1:-1;;;;;14851:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20734:18;;:30;;20757:6;20734:30;:22;:30;:::i;:::-;20713:18;:51;20775:31;20799:6;20775:23;:31::i;:::-;20822:32;;;20835:10;20822:32;;;;;;;;;;;;;;;;;;;;;20636:226;:::o;9504:79::-;9569:6;;-1:-1:-1;;;;;9569:6:0;9504:79;:::o;9870:94::-;9950:6;;9910:4;;-1:-1:-1;;;;;9950:6:0;9934:12;:10;:12::i;:::-;-1:-1:-1;;;;;9934:22:0;;9927:29;;9870:94;:::o;21456:108::-;9716:9;:7;:9::i;:::-;9708:54;;;;;-1:-1:-1;;;;;9708:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9708:54:0;;;;;;;;;;;;;;;21534:13;27:10:-1;;39:1;23:18;;45:23;;-1:-1;21534:22:0;;;;;;;;-1:-1:-1;;;;;;21534:22:0;-1:-1:-1;;;;;21534:22:0;;;;;;;;;;21456:108::o;20154:474::-;20213:8;;:30;;;;;;20232:10;20213:30;;;;;;20247:6;;-1:-1:-1;;;;;20213:8:0;;:18;;:30;;;;;;;;;;;;;;:8;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;20213:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20213:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20213:30:0;:40;;20205:103;;;;-1:-1:-1;;;;;20205:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20340:18;;:30;;20363:6;20340:30;:22;:30;:::i;:::-;20319:18;:51;20381:31;20405:6;20381:23;:31::i;:::-;20445:8;;:56;;;-1:-1:-1;;;;;20445:56:0;;20467:10;20445:56;;;;20487:4;20445:56;;;;;;;;;;;;-1:-1:-1;;;;;20445:8:0;;;;:21;;:56;;;;;;;;;;;;;;;:8;;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;20445:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20445:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20445:56:0;20423:149;;;;-1:-1:-1;;;;;20423:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13423:26;;;;:::o;14066:50::-;;;;;;;;;;;;;;;:::o;17224:607::-;15009:9;;:14;;;;:33;;;15033:9;;15027:3;:15;15009:33;15001:70;;;;;-1:-1:-1;;;;;15001:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15001:70:0;;;;;;;;;;;;;;;17315:10;17296:30;;;;:18;:30;;;;;;;;:38;;:30;:38;17288:79;;;;;-1:-1:-1;;;;;17288:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17396:4;17386:6;:14;;17378:55;;;;;-1:-1:-1;;;;;17378:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17452:8;;:30;;;;;;17471:10;17452:30;;;;;;17486:6;;-1:-1:-1;;;;;17452:8:0;;:18;;:30;;;;;;;;;;;;;;:8;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;17452:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17452:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17452:30:0;:40;;17444:98;;;;-1:-1:-1;;;;;17444:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17568:10;17557:22;;;;:10;:22;;;;;;17553:67;;17601:12;;:19;;17618:1;17601:19;:16;:19;:::i;:::-;17586:12;:34;17553:67;17631:8;17642:17;17652:6;17642:9;:17::i;:::-;17678:8;;:56;;;-1:-1:-1;;;;;17678:56:0;;17700:10;17678:56;;;;17720:4;17678:56;;;;;;;;;;;;17631:28;;-1:-1:-1;;;;;;17678:8:0;;;;:21;;:56;;;;;;;;;;;;;;;:8;;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;17678:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17678:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17678:56:0;17670:105;;;;-1:-1:-1;;;;;17670:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17791:32;;;17799:10;17791:32;;;;;;;;;;;;;;;;;;;;;;;;;15082:1;17224:607;:::o;13392:24::-;;;;:::o;9278:145::-;6475:12;;;;;;;;:31;;;6491:15;:13;:15::i;:::-;6475:47;;;-1:-1:-1;6511:11:0;;;;6510:12;6475:47;6467:106;;;;-1:-1:-1;;;;;6467:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6582:19;6605:12;;;;;;6604:13;6624:83;;;;6653:12;:19;;-1:-1:-1;;;;6653:19:0;;;;;6681:18;6668:4;6681:18;;;6624:83;9344:6;:15;;-1:-1:-1;;;;;;9344:15:0;-1:-1:-1;;;;;9344:15:0;;;;;;;;;;;9375:40;;9408:6;;;-1:-1:-1;;9375:40:0;;-1:-1:-1;;9375:40:0;6729:14;6725:57;;;6769:5;6754:20;;-1:-1:-1;;6754:20:0;;;6725:57;9278:145;;:::o;15940:103::-;15997:38;16014:6;16030:3;15997:16;:38::i;:::-;15940:103;:::o;21784:169::-;9716:9;:7;:9::i;:::-;9708:54;;;;;-1:-1:-1;;;;;9708:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9708:54:0;;;;;;;;;;;;;;;21868:5;21858:7;:15;21850:62;;;;-1:-1:-1;;;;;21850:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21923:12;:22;21784:169::o;22249:439::-;22382:18;:25;22311:4;;22378:303;;-1:-1:-1;22467:11:0;;22460:18;;22378:303;22577:92;22613:18;22646:12;22577:21;:92::i;:::-;22570:99;;;;13502:42;;;;;;;;;;;;;:::o;23150:229::-;9716:9;:7;:9::i;:::-;9708:54;;;;;-1:-1:-1;;;;;9708:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9708:54:0;;;;;;;;;;;;;;;23260:27;:47;;;;23318:30;:53;23150:229::o;14011:48::-;;;;;;;;;;;;;:::o;16051:1165::-;15009:9;;:14;;;;:33;;;15033:9;;15027:3;:15;15009:33;15001:70;;;;;-1:-1:-1;;;;;15001:70:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15001:70:0;;;;;;;;;;;;;;;16172:10;16153:30;;;;:18;:30;;;;;;;;16152:31;16144:73;;;;;-1:-1:-1;;;;;16144:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16236:8;;:30;;;;;;16255:10;16236:30;;;;;;16270:6;;-1:-1:-1;;;;;16236:8:0;;:18;;:30;;;;;;;;;;;;;;:8;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;16236:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16236:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16236:30:0;:40;;16228:93;;;;-1:-1:-1;;;;;16228:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16332:16;-1:-1:-1;;;;;16362:24:0;;16359:773;;16448:30;;16438:6;:40;;16430:107;;;;-1:-1:-1;;;;;16430:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16552:42;16563:30;;16552:10;:42::i;:::-;16634:30;;16623:42;;:6;;:42;:10;:42;:::i;:::-;16609:56;;16359:773;;;16744:27;;16734:6;:37;;16726:104;;;;-1:-1:-1;;;;;16726:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16853:8;;16897:27;;16853:72;;;-1:-1:-1;;;;;16853:72:0;;16875:10;16853:72;;;;-1:-1:-1;;;;;16853:72:0;;;;;;;;;;;;;;;;:8;;;;;:21;;:72;;;;;;;;;;;;;;:8;;:72;;;5:2:-1;;;;30:1;27;20:12;5:2;16853:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16853:72:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16853:72:0;16845:130;;;;-1:-1:-1;;;;;16845:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17019:26:0;;;;;;:16;:26;;;;;;:33;;17050:1;17019:33;:30;:33;:::i;:::-;-1:-1:-1;;;;;16990:26:0;;;;;;:16;:26;;;;;:62;17092:27;;17081:39;;:6;;:39;:10;:39;:::i;:::-;17067:53;;16359:773;17161:10;17142:30;;;;:18;:30;;;;;:37;;-1:-1:-1;;17142:37:0;17175:4;17142:37;;;17190:18;17196:11;17190:5;:18::i;:::-;15082:1;16051:1165;;:::o;10612:109::-;9716:9;:7;:9::i;:::-;9708:54;;;;;-1:-1:-1;;;;;9708:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9708:54:0;;;;;;;;;;;;;;;10685:28;10704:8;10685:18;:28::i;13551:44::-;;;;;;;;;;;;;:::o;2231:471::-;2289:7;2534:6;2530:47;;-1:-1:-1;2564:1:0;2557:8;;2530:47;2601:5;;;2605:1;2601;:5;:1;2625:5;;;;;:10;2617:56;;;;-1:-1:-1;;;;;2617:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23387:233;23439:3;23466:15;-1:-1:-1;;23479:1:0;23466:15;:12;:15;:::i;:::-;23459:3;:22;23455:158;;23498:55;;-1:-1:-1;;;;;23498:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23455:158;-1:-1:-1;23597:3:0;23586:15;;3170:132;3228:7;3255:39;3259:1;3262;3255:39;;;;;;;;;;;;;;;;;:3;:39::i;1315:136::-;1373:7;1400:43;1404:1;1407;1400:43;;;;;;;;;;;;;;;;;:3;:43::i;25932:825::-;-1:-1:-1;;;;;26076:21:0;;;26068:30;;;;;;-1:-1:-1;;;;;26113:24:0;;;26105:33;;;;;;26151:18;;26147:205;;26226:20;;26185:26;;26214:11;;26226:20;26214:11;26226:20;;;;:::i;:::-;26214:33;;;;;;;;;;;;;;;;;26256:45;;-1:-1:-1;;;;;26310:34:0;;;;;-1:-1:-1;;26284:12:0;:16;26256:45;;-1:-1:-1;;26256:45:0;;;;;;;26310:34;;;;-1:-1:-1;26147:205:0;26376:18;;26412:12;;26364:11;;-1:-1:-1;;26376:22:0;;;26364:35;;;;;;;;;;;;;;;:45;-1:-1:-1;;;;;26364:45:0;:60;26360:392;;;26482:20;;26435:32;;26470:11;;26482:20;26470:11;26482:20;;;;:::i;:::-;26470:33;;;;;;;;;;;;;;;;;26512:47;;-1:-1:-1;;;;;26568:37:0;;;;;26546:12;26512:47;;-1:-1:-1;;26512:47:0;;;;;;;26568:37;;;;-1:-1:-1;26360:392:0;;;26675:18;;26628:32;;26663:11;;-1:-1:-1;;26675:22:0;;;26663:35;;;;;;;;;;;;;;;26707:37;;-1:-1:-1;;;;;26707:37:0;;;;;;;;;;-1:-1:-1;25932:825:0;;;:::o;24664:443::-;24734:11;;:16;24730:370;;24771:16;;:21;24767:138;;24833:16;;24822:28;;:6;;:28;:10;:28;:::i;:::-;24888:1;24869:16;:20;24813:37;-1:-1:-1;24767:138:0;24995:11;;24936:72;;24955:52;;:35;:6;13376:7;24955:35;:10;:35;:::i;:::-;:39;:52;:39;:52;:::i;:::-;24936:14;;;:72;:18;:72;:::i;:::-;24919:14;:89;24730:370;;;25060:16;;:28;;25081:6;25060:28;:20;:28;:::i;:::-;25041:16;:47;24664:443;:::o;11213:151::-;11270:4;11291:8;11287:22;;-1:-1:-1;11308:1:0;11301:8;;11287:22;11327:29;11199:5;11327:11;:3;11335:2;11327:11;:7;:11;:::i;6876:508::-;7293:4;7339:17;7371:7;6876:508;:::o;10827:229::-;-1:-1:-1;;;;;10901:22:0;;10893:73;;;;-1:-1:-1;;;;;10893:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11003:6;;10982:38;;-1:-1:-1;;;;;10982:38:0;;;;11003:6;;10982:38;;11003:6;;10982:38;11031:6;:17;;-1:-1:-1;;;;;;11031:17:0;-1:-1:-1;;;;;11031:17:0;;;;;;;;;;10827:229::o;25115:811::-;25279:18;;25216:4;;25275:44;;-1:-1:-1;25318:1:0;25311:8;;25275:44;25388:18;;25376:11;;-1:-1:-1;;25388:20:0;;;25376:33;;;;;;;;;;;;;;;:43;-1:-1:-1;;;;;25376:43:0;25366:53;;25362:112;;25447:18;;25435:11;;-1:-1:-1;;25447:20:0;;;25435:33;;;;;;;;;;;;;;;:39;;;;-1:-1:-1;;;;;25435:39:0;;-1:-1:-1;25428:46:0;;25362:112;25530:11;25542:1;25530:14;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;;;;25530:24:0;25521:33;;25517:73;;;25570:11;25582:1;25570:14;;;;;;;25517:73;25677:18;;25647:8;;-1:-1:-1;;25677:20:0;25704:181;25717:3;25711;:9;25704:181;;;25731:8;25760:1;25755;25743:9;;;:13;25742:19;25731:30;;25802:6;25774:11;25786:3;25774:16;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;25774:26:0;:34;25770:108;;25827:3;25821:9;;25770:108;;;25867:1;25863:3;:5;25857:11;;25770:108;25704:181;;;;25898:11;25910:3;25898:16;;;;;;;;;;;;;;;;;:22;;;;-1:-1:-1;;;;;25898:22:0;;25115:811;-1:-1:-1;;;;;25115:811:0:o;23628:1028::-;23679:8;23706:36;23720:7;23729:12;;23706:13;:36::i;:::-;23700:42;-1:-1:-1;23753:16:0;23772;:7;23700:42;23772:16;:11;:16;:::i;:::-;23893:10;23875:29;;;;:17;:29;;;;;;;;23915:10;:22;;;;;;;23753:35;;-1:-1:-1;23837:161:0;;23948:39;23915:22;23753:35;23948:39;:26;:39;:::i;23837:161::-;24118:11;;24051:128;;24089:18;;24140:28;24118:11;24156;24140:28;:15;:28;:::i;24051:128::-;24206:11;;:28;;24222:11;24206:28;:15;:28;:::i;:::-;24192:11;:42;24281:10;24270:22;;;;:10;:22;;;;;;:39;;24297:11;24270:39;:26;:39;:::i;:::-;24256:10;24245:22;;;;:10;:22;;;;;:64;;;;24320:150;24339:13;:20;24335:24;;24320:150;;;24381:13;24395:1;24381:16;;;;;;;;;;;;;;;;;;;;24410:10;24435:22;;;:10;:22;;;;;;;;24381:77;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24381:16:0;;;;:28;;:77;;;;;;;;;;;:16;;:77;;;5:2:-1;;;;30:1;27;20:12;5:2;24381:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24361:3:0;;;;;-1:-1:-1;24320:150:0;;-1:-1:-1;24320:150:0;;-1:-1:-1;24494:14:0;;24480:11;;24494:31;;24513:11;24494:31;:18;:31;:::i;:::-;24480:45;;24592:17;24602:6;24592:9;:17::i;:::-;24578:10;24564:25;;;;:13;:25;;;;;;;:45;;;;24536:73;;24620:28;24644:3;24620:23;:28::i;:::-;23628:1028;;;;;:::o;859:181::-;917:7;949:5;;;973:6;;;;965:46;;;;;-1:-1:-1;;;;;965:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8297:98;8377:10;8297:98;:::o;3832:345::-;3918:7;4020:12;4013:5;4005:28;;;;-1:-1:-1;;;;;4005:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4005:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4044:9;4060:1;4056;:5;;;;;;;3832:345;-1:-1:-1;;;;;3832:345:0:o;1788:192::-;1874:7;1910:12;1902:6;;;;1894:29;;;;-1:-1:-1;;;;;1894:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1894:29:0;-1:-1:-1;;;1946:5:0;;;1788:192::o;13206:13556::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://337294ba0b7631db1cbe0f99818e4e993cee12de4c0696cc5b456fa28d0f020d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.