More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 912 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Donate | 21253076 | 35 secs ago | IN | 0.1 ETH | 0.00238763 | ||||
Donate | 21253065 | 2 mins ago | IN | 0.1 ETH | 0.00259779 | ||||
Donate | 21253046 | 6 mins ago | IN | 0.1 ETH | 0.00270858 | ||||
Donate | 21253016 | 12 mins ago | IN | 0.1 ETH | 0.00274562 | ||||
Donate | 21252988 | 18 mins ago | IN | 0.1 ETH | 0.00272883 | ||||
Donate | 21252967 | 22 mins ago | IN | 0.1 ETH | 0.0028572 | ||||
Donate | 21252958 | 24 mins ago | IN | 0.1 ETH | 0.00269389 | ||||
Donate | 21252928 | 30 mins ago | IN | 0.1 ETH | 0.00318521 | ||||
Donate | 21252919 | 32 mins ago | IN | 0.1 ETH | 0.00304118 | ||||
Donate | 21252899 | 36 mins ago | IN | 0.1 ETH | 0.00323054 | ||||
Donate | 21252869 | 42 mins ago | IN | 0.1 ETH | 0.00375116 | ||||
Donate | 21252868 | 42 mins ago | IN | 0.1 ETH | 0.00376822 | ||||
Donate | 21252809 | 54 mins ago | IN | 0.1 ETH | 0.00326104 | ||||
Donate | 21252779 | 1 hr ago | IN | 0.1 ETH | 0.00324902 | ||||
Donate | 21252768 | 1 hr ago | IN | 0.1 ETH | 0.00348862 | ||||
Donate | 21252751 | 1 hr ago | IN | 0.1 ETH | 0.0031607 | ||||
Donate | 21252720 | 1 hr ago | IN | 0.1 ETH | 0.00336829 | ||||
Donate | 21252719 | 1 hr ago | IN | 0.1 ETH | 0.00338612 | ||||
Donate | 21252690 | 1 hr ago | IN | 0.1 ETH | 0.00340307 | ||||
Donate | 21252669 | 1 hr ago | IN | 0.1 ETH | 0.00352932 | ||||
Donate | 21252656 | 1 hr ago | IN | 0.2 ETH | 0.00366588 | ||||
Donate | 21252632 | 1 hr ago | IN | 0.1 ETH | 0.00362885 | ||||
Donate | 21252627 | 1 hr ago | IN | 0.2 ETH | 0.00305349 | ||||
Donate | 21252621 | 1 hr ago | IN | 0.1 ETH | 0.00371643 | ||||
Donate | 21252602 | 1 hr ago | IN | 0.1 ETH | 0.00391131 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
21253076 | 35 secs ago | 0.003 ETH | ||||
21253076 | 35 secs ago | 0.04 ETH | ||||
21253076 | 35 secs ago | 0.007 ETH | ||||
21253065 | 2 mins ago | 0.003 ETH | ||||
21253065 | 2 mins ago | 0.04 ETH | ||||
21253065 | 2 mins ago | 0.007 ETH | ||||
21253046 | 6 mins ago | 0.003 ETH | ||||
21253046 | 6 mins ago | 0.04 ETH | ||||
21253046 | 6 mins ago | 0.007 ETH | ||||
21253016 | 12 mins ago | 0.003 ETH | ||||
21253016 | 12 mins ago | 0.04 ETH | ||||
21253016 | 12 mins ago | 0.007 ETH | ||||
21252988 | 18 mins ago | 0.003 ETH | ||||
21252988 | 18 mins ago | 0.04 ETH | ||||
21252988 | 18 mins ago | 0.007 ETH | ||||
21252967 | 22 mins ago | 0.003 ETH | ||||
21252967 | 22 mins ago | 0.04 ETH | ||||
21252967 | 22 mins ago | 0.007 ETH | ||||
21252958 | 24 mins ago | 0.003 ETH | ||||
21252958 | 24 mins ago | 0.04 ETH | ||||
21252958 | 24 mins ago | 0.007 ETH | ||||
21252928 | 30 mins ago | 0.003 ETH | ||||
21252928 | 30 mins ago | 0.04 ETH | ||||
21252928 | 30 mins ago | 0.007 ETH | ||||
21252919 | 32 mins ago | 0.003 ETH |
Loading...
Loading
Contract Name:
JUMPTreasury
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "./libraries/SafeERC20.sol"; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @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(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public 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; } } contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor (){ _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } interface IUniswapV2Factory { function owner() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Pair { function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); } interface IUniswapV2Router is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); } interface IJUMPBonusPool { function addTick(address user,uint256 mintTotal) external payable; function getEndBonusTime() external view returns(uint256); function startTime() external view returns(uint256); } contract JUMPTreasury is ReentrancyGuard,Ownable{ using SafeERC20 for IERC20; // Info of each token lq. struct TokenLqInfo{ uint256 ethAddAmount; //add eth amount uint256 tokenAddAmount; //add token amount uint256 lqAmountTotal; uint256 addLqTime; uint256 rmLqAmount; bool isLiqWar; bool isStartLiqWar; bool isCTOFlag; } // Info of each user. struct UserInfo { uint256 depositAmount; // How many tokens the user has provided. uint256 mintTotal; // How many mint tokens the user will receive. uint256 mintReleased; bool isRefund; bool isStartClaim; } struct LiqWarInfo{ uint256 rewardETH; uint256 rewardSeq; address[2] rewardTokenAddrs; bool rmFlag; } address public JUMPToken; address public constant DEAD = 0x000000000000000000000000000000000000dEaD; uint256 public constant basePoints = 100; uint256 public constant refundRate = 75; uint256 public constant rmLiqWarRate = 10; uint256 public constant buyTokenCnt = 24; uint256 public bonusRate = 7; uint256 public marketMakerRate = 25; uint256 public rmSlippage = 5; uint256 public adLPRate = 15; uint256 public inviteRate = 3; uint256 public protectLQDuration = 24 * 3600; uint256 public protectRefundDuration = 7 * 24 * 3600; uint256 public minPerDeposit; uint256 public mintTokenLimit; uint256 public addLQTokenLimit; uint256 public mintedToken; uint256 public mintLimitETH; uint256 public debitTotal; uint256 public debitLimit; uint256 public userDepositTotal; mapping(address => bool) public keeperMap; // address => amount mapping(address => UserInfo) public userInfo; mapping(address => address) public tokenPair; mapping(address => TokenLqInfo) public tokenLqInfo; address public marketMakerAddr; address public inviteRewardAddr; mapping(address => uint256) public tokenDebitLevel; mapping(address => address) public tokenUser; mapping(uint256 => LiqWarInfo) public seqLiqWarInfo; uint256 public rangeIndex; uint256[20] public buyRange; uint256[20] public mintRange; address public WETH; IUniswapV2Factory public factory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); //ETH; IUniswapV2Router public swapRouter = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //ETH; IJUMPBonusPool public bonusPool; // The time when debit starts uint256 public startTime; // The time when debit ends uint256 public endTime; bool public isDestroyToken; address public lockLPAddr; event AddNewDebit(address user,address newToken,address pair,uint256 debitLevel,uint256 initBuyAmount); event Donate(address indexed user, uint256 amount,uint256 range, uint256 userDeposit); event Claim(address indexed user, uint256 amount); event SetKeeper(address indexed sender,address addr,bool active); event RemoveLiqWarLiquidity(uint256 seqNo,address tokenAddr,address pair,uint256 lqAmount,uint256 ethAmount); event AddLiquidity(address tokenAddr,address pair,uint256 tokenAmount,uint256 ethAmount); event WithdrawDebitForLiqWar(address tokenAddr,address pair,uint256 lqAmount,uint256 ethAmount,bool isLiqWar); event RefundETH(address user, uint256 depositAmount,uint256 refundAmount); event RemoveLiqWarFlag(address sender,address tokenAddr); event SetRmLqSlippage(address sender,uint256 rmSlippage); event SetDebitLimit(address sender,uint256 debitLimit); event SetBonusPool(address sender,address bonusPool); modifier onlyKeeper() { require(isKeeper(msg.sender), "Not keeper"); _; } constructor(address _v2Factory,address _v2Router,address _bonusPool,address _rewardAddr,address _JUMPToken) { swapRouter = IUniswapV2Router(_v2Router); factory = IUniswapV2Factory(_v2Factory); bonusPool = IJUMPBonusPool(_bonusPool); WETH = swapRouter.WETH(); mintTokenLimit = 800_000_000e18; addLQTokenLimit = 120_000_000e18; mintLimitETH = 101287e17; minPerDeposit = 1e17; //0.1 ETH marketMakerAddr = 0xFE49c3D7b7EF988233FAddeD69f7B624A392E017; inviteRewardAddr = _rewardAddr; startTime = bonusPool.startTime(); endTime = bonusPool.getEndBonusTime(); JUMPToken = _JUMPToken; buyRange = [4600e17,9246e17,13938e17,18678e17,23465e17,28299e17,33182e17,38114e17,43095e17,48126e17,53207e17,58340e17,63523e17,68758e17,74046e17,79386e17,84780e17,90228e17,95730e17,101287e17]; mintRange = [8695652174e13,8609556608e13,8524313473e13,8439914330e13,8356350822e13,8273614675e13,8191697698e13,8110591780e13,8030288891e13,7950781080e13,7872060476e13,7794119283e13,7716949785e13,7640544341e13,7564895388e13,7489995433e13,7415837063e13,7342412933e13,7269715776e13,7197738392e13]; keeperMap[msg.sender] = true; lockLPAddr = 0xFE49c3D7b7EF988233FAddeD69f7B624A392E017; } function addNewDebit(address newToken,address user,uint256 debitLevel,bool isLiqWar) public payable onlyKeeper returns(address pair) { require(address(this).balance >= debitLevel,'Balance less than debit level'); require(debitTotal + debitLevel <= debitLimit && (debitLimit > 0),'Exceed debitLimit'); tokenDebitLevel[newToken] = debitLevel; tokenUser[newToken] = user; tokenLqInfo[newToken].isLiqWar = isLiqWar; _addLiquidity(newToken); uint256 initBuyAmount = msg.value; //swap buy address[] memory path = new address[](2); path[0] = address(WETH); path[1] = address(newToken); swapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value:initBuyAmount}( 0, path, user, block.timestamp ); debitTotal += debitLevel; pair = tokenPair[newToken]; emit AddNewDebit(user,newToken,pair,debitLevel,initBuyAmount); } function donate(uint256 donateNum) external payable nonReentrant{ uint256 amount = msg.value; require(block.timestamp <= endTime,'Deposit end'); require(amount >= minPerDeposit,'Less minPerDeposit'); require(donateNum * minPerDeposit == amount,'Donate amount not equal to value'); require(0 == amount % minPerDeposit,'Amount wrong'); require(userDepositTotal + amount <= mintLimitETH,'Exceed ETH Limit'); (uint256 tokenAmount,uint256 index,,) = getMintIndexAndAmount(userDepositTotal,amount); rangeIndex = index; address user = msg.sender; userDepositTotal += amount; userInfo[user].depositAmount += amount; userInfo[user].mintTotal += tokenAmount; mintedToken += tokenAmount; uint256 bonusPoolAmount = amount * bonusRate / basePoints; bonusPool.addTick{value: bonusPoolAmount}(msg.sender,userDepositTotal); endTime = bonusPool.getEndBonusTime(); //marketMakerRate && add LP uint256 marketMakerAmount = amount * (marketMakerRate + adLPRate) / basePoints; (bool success, ) = marketMakerAddr.call{value: marketMakerAmount}(""); require(success, "marketMaker Fail to refund ETH"); //invite uint256 inviteETH = amount * inviteRate / basePoints; (bool success2, ) = inviteRewardAddr.call{value: inviteETH}(""); require(success2, "invite Fail to refund ETH"); if(userDepositTotal == mintLimitETH){ endTime = block.timestamp; } emit Donate(msg.sender, amount, rangeIndex, userDepositTotal); } function refundETH() public nonReentrant{ require(block.timestamp > endTime && block.timestamp <= endTime + protectRefundDuration,'Protect Refund Duration'); address user = msg.sender; require(userInfo[user].depositAmount > 0,'Without Deposit'); require(!userInfo[user].isRefund && !userInfo[user].isStartClaim,'Has Refunded'); uint256 refundAmount = userInfo[user].depositAmount * refundRate / basePoints; userInfo[user].isRefund = true; (bool success, ) = user.call{value: refundAmount}(""); require(success, "Unable to refund ETH"); IERC20(JUMPToken).safeTransfer(DEAD,userInfo[user].mintTotal); emit RefundETH(user,userInfo[user].depositAmount,refundAmount); } //After start claim, then claim the offering token function claim() public nonReentrant { address user = msg.sender; require(userInfo[user].depositAmount > 0,'Without Deposit'); require(block.timestamp > endTime,'Mint Not Finished'); require(!userInfo[user].isRefund,'Has Refunded'); require(userInfo[user].mintTotal > userInfo[user].mintReleased,'All Released'); //claim release token uint canRelease = userInfo[user].mintTotal - userInfo[user].mintReleased; userInfo[user].mintReleased += canRelease; IERC20(JUMPToken).safeTransfer(user,canRelease); userInfo[user].isStartClaim = true; emit Claim(user, canRelease); } // get the amount of IDO token you will get function getOfferingAmount(address user) public view returns(uint256 userOfferingTotalAmount) { if(userInfo[user].isRefund){ return 0; } userOfferingTotalAmount = userInfo[user].mintTotal; } function getMintAndLQInfo() public view returns(uint256 mintJUMPLimit,uint256 addLqJUMP,uint256 mintedJUMP){ mintJUMPLimit = mintTokenLimit; addLqJUMP = addLQTokenLimit; mintedJUMP = mintedToken; } function getCanReleaseInfo(address user) public view returns (uint256 total, uint256 canRelease, uint256 released,uint256 locked) { total = userInfo[user].mintTotal; released = userInfo[user].mintReleased; if(block.timestamp <= endTime){ return (total,0,0,total); } if(userInfo[user].isRefund){ return (0,0,0,0); } if (uint128(block.timestamp) >= endTime) { canRelease = total - released; } locked = (total > canRelease + released) ? (total-canRelease-released) : 0; } function _addLiquidity(address tokenAddr) internal{ require(tokenPair[tokenAddr] == address(0),'LQ added'); uint256 currentEth = address(this).balance; uint256 tokenAmount = IERC20(tokenAddr).balanceOf(address(this)); uint256 ethAmount = tokenDebitLevel[tokenAddr]; require(currentEth >= ethAmount,'Amount exceed current ETH'); uint256 beforeEth = address(this).balance; IERC20(tokenAddr).safeApprove(address(swapRouter), tokenAmount); (,,uint lq) = swapRouter.addLiquidityETH{value: ethAmount}(tokenAddr, tokenAmount,0,0,address(this), block.timestamp); //update lq info; address pair = factory.getPair(tokenAddr,address(WETH)); tokenPair[tokenAddr] = pair; uint256 afterEth = address(this).balance; tokenLqInfo[tokenAddr].lqAmountTotal = lq; tokenLqInfo[tokenAddr].ethAddAmount = beforeEth - afterEth; tokenLqInfo[tokenAddr].tokenAddAmount = tokenAmount; tokenLqInfo[tokenAddr].addLqTime = block.timestamp; emit AddLiquidity(tokenAddr,pair,tokenAmount,ethAmount); } function withdrawDebitsForLiqWar(address[] memory tokenAddrs) public nonReentrant onlyKeeper{ for(uint256 i = 0; i < tokenAddrs.length;i++){ address tokenAddr = tokenAddrs[i]; require(tokenLqInfo[tokenAddr].isLiqWar,'Not LiqWar token'); _removeLiquidity(tokenAddrs[i],true); } } function withdrawDebitsForWithoutLiqWar(address[] memory tokenAddrs) public nonReentrant onlyKeeper{ for(uint256 i = 0; i < tokenAddrs.length;i++){ address tokenAddr = tokenAddrs[i]; require(!tokenLqInfo[tokenAddr].isLiqWar,'LiqWar token'); _removeLiquidity(tokenAddr,false); } } //Liqwar handle: remove failed tokens and mark two reward tokens function startLiqWarHandle(uint256 seqNo,address[] memory rmTokenAddrs,address[2] calldata rewardTokenAddrs) public nonReentrant onlyKeeper{ require(!seqLiqWarInfo[seqNo].rmFlag,'seqNo has used'); for(uint256 i = 0; i < rmTokenAddrs.length;i++){ address tokenAddr = rmTokenAddrs[i]; require(tokenLqInfo[tokenAddr].isStartLiqWar,'Not allow to Start LiqWar'); _removeLiqWarLiquidity(seqNo,tokenAddr); seqLiqWarInfo[seqNo].rewardTokenAddrs = rewardTokenAddrs; } } //remove the LiqWar Flag && set CTO Flag function removeLiqWarFlag(address[] calldata tokenAddrs) public nonReentrant onlyKeeper { for(uint256 i =0;i < tokenAddrs.length; i++){ _removeLiqWarFlag(tokenAddrs[i]); } } function _removeLiqWarFlag(address tokenAddr) internal { require(tokenLqInfo[tokenAddr].isStartLiqWar,'remove LiqWar Flag wrong'); require(tokenLqInfo[tokenAddr].isLiqWar,'Not LiqWar token'); tokenLqInfo[tokenAddr].isStartLiqWar = false; tokenLqInfo[tokenAddr].isCTOFlag = true; address pair = tokenPair[tokenAddr]; uint256 lqBalance = IERC20(pair).balanceOf(address(this)); if(lqBalance > 0){ IERC20(pair).safeTransfer(DEAD, lqBalance); } emit RemoveLiqWarFlag(msg.sender,tokenAddr); } function _removeLiquidity(address tokenAddr,bool flag) internal { address pair = tokenPair[tokenAddr]; uint256 lqBalance = IERC20(pair).balanceOf(address(this)); //get reserve { require(!tokenLqInfo[tokenAddr].isStartLiqWar,'Start LiqWar'); uint256 lqTotal = IERC20(pair).totalSupply(); (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(pair).getReserves(); uint256 reserveEth = (address(WETH) > tokenAddr) ? reserve1 : reserve0; uint256 ethAmount = tokenDebitLevel[tokenAddr]; uint256 amountOutETHMin = (ethAmount + ethAmount * rmSlippage / basePoints) * (basePoints - rmSlippage) / basePoints; require(block.timestamp >= tokenLqInfo[tokenAddr].addLqTime + protectLQDuration,'RemoveLiquidity condition fail'); uint256 lqAmount = (ethAmount + ethAmount * rmSlippage / basePoints) * lqTotal / reserveEth; if(lqAmount > lqBalance){ lqAmount = lqBalance; amountOutETHMin = 0; } IERC20(pair).safeApprove(address(swapRouter), lqAmount); (,uint amountETH) = swapRouter.removeLiquidityETH(tokenAddr,lqAmount,0,amountOutETHMin,address(this), block.timestamp); tokenLqInfo[tokenAddr].rmLqAmount += lqAmount; tokenLqInfo[tokenAddr].isStartLiqWar = true; //token IERC20(tokenAddr).safeTransfer(DEAD,IERC20(tokenAddr).balanceOf(address(this))); if(!flag){ tokenLqInfo[tokenAddr].isCTOFlag = true; lqBalance = IERC20(pair).balanceOf(address(this)); if(lqBalance > 0){ IERC20(pair).safeTransfer(DEAD, lqBalance); } } emit WithdrawDebitForLiqWar(tokenAddr,pair,lqAmount,amountETH,flag); } } function _removeLiqWarLiquidity(uint256 seqNo,address tokenAddr) internal { address pair = tokenPair[tokenAddr]; uint256 lqBalance = IERC20(pair).balanceOf(address(this)); uint256 lqAmount = lqBalance * rmLiqWarRate / basePoints; IERC20(pair).safeApprove(address(swapRouter), lqAmount); (, uint amountETH) = swapRouter.removeLiquidityETH(tokenAddr,lqAmount,0,0,address(this), block.timestamp); tokenLqInfo[tokenAddr].rmLqAmount += lqAmount; //token uint256 tokenBalance = IERC20(tokenAddr).balanceOf(address(this)); IERC20(tokenAddr).safeTransfer(DEAD,tokenBalance); //RefundETH seqLiqWarInfo[seqNo].rewardETH += amountETH; seqLiqWarInfo[seqNo].rmFlag = true; emit RemoveLiqWarLiquidity(seqNo,tokenAddr,pair,lqAmount,amountETH); } //reward two LiqWar token function rewardLiqWarToken(uint256 seqNo) public onlyKeeper{ require(seqLiqWarInfo[seqNo].rmFlag,'Not remove LiqWar'); require(seqLiqWarInfo[seqNo].rewardSeq < buyTokenCnt,'Not remove LiqWar'); seqLiqWarInfo[seqNo].rewardSeq++; //swap buy uint256 buyAmount = seqLiqWarInfo[seqNo].rewardETH / (buyTokenCnt * 2); for(uint256 i = 0;i < 2; i++){ address buyToken = seqLiqWarInfo[seqNo].rewardTokenAddrs[i]; address[] memory path = new address[](2); path[0] = address(WETH); path[1] = address(buyToken); swapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value:buyAmount}( 0, path, address(this), block.timestamp ); //transfer buyToken uint256 buyTokenAmount = IERC20(buyToken).balanceOf(address(this)); IERC20(buyToken).safeTransfer(DEAD,buyTokenAmount); } } function destroyLeftToken() public onlyKeeper { require(block.timestamp > endTime,'Not allow to destroy LeftToken'); require(mintedToken < mintTokenLimit,'Minted less than Limit'); require(!isDestroyToken,'Already Destroy'); //left mint token transfer to dead uint256 leftMintAmount = mintTokenLimit - mintedToken; IERC20(JUMPToken).safeTransfer(DEAD,leftMintAmount); isDestroyToken = true; } //Avoid unable to remove liquidity //The ownership will transfer to timeLock contract or emergency admin role will be multi-sig function setRmLqSlippage(uint256 _rmSlippage) public onlyOwner{ rmSlippage = _rmSlippage; emit SetRmLqSlippage(msg.sender,_rmSlippage); } //Prevent the lending pool from being drained by malicious lending //The ownership will transfer to timeLock contract or emergency admin role will be multi-sig function setDebitLimit(uint256 _debitLimit) public onlyOwner{ debitLimit = _debitLimit; emit SetDebitLimit(msg.sender,_debitLimit); } //Prevent the eth Blockchain network congestion from being drained by malicious lending //The ownership will transfer to timeLock contract or emergency admin role will be multi-sig function setEmergencyBonusPool(address _bonusPool) public onlyOwner{ bonusPool = IJUMPBonusPool(_bonusPool); emit SetBonusPool(msg.sender,address(bonusPool)); } function getCurrMintPhaseInfo() public view returns(uint256 currPhase,uint256 currRate,uint256 nextPhase,uint256 nextRate,uint256 currETHLimit,uint256 currDepositETH){ currPhase = rangeIndex; currRate = mintRange[currPhase]; if(rangeIndex + 1 < 20){ nextPhase = currPhase +1; }else{ nextPhase = 19; } nextRate = mintRange[nextPhase]; currETHLimit = buyRange[currPhase]; currDepositETH = userDepositTotal; } function getMintIndexAndAmount(uint256 lastDeposit, uint256 userAmount) public view returns(uint256 mintTokenAmount,uint256 index,uint256[] memory mintRangeIndex,uint256[] memory mintAmounts){ mintRangeIndex = new uint256[](20); mintAmounts = new uint256[](20); uint256 cnt; for(uint256 i = rangeIndex;i < 20; i++){ if(lastDeposit <= buyRange[i] && lastDeposit + userAmount <= buyRange[i]){ mintRangeIndex[cnt] = i; index = i; mintAmounts[cnt] = userAmount; cnt++; mintTokenAmount = userAmount * mintRange[i] /1e18; break; }else if(lastDeposit <= buyRange[i] && lastDeposit + userAmount >= buyRange[i]){ //cross multi range; mintRangeIndex[cnt] = i; index = i; mintAmounts[cnt] = buyRange[i] - lastDeposit; mintTokenAmount += (buyRange[i] - lastDeposit) * mintRange[i] /1e18; cnt++; //cycle next range: uint256 lastMintAmount = buyRange[i]; for(uint256 j = i+1; j < 20; j++){ if(lastDeposit + userAmount >= buyRange[j]){ //add j mintRangeIndex[cnt] = j; index = j; mintAmounts[cnt] = buyRange[j] - lastMintAmount; mintTokenAmount += (buyRange[j] - lastMintAmount) * mintRange[j] /1e18; lastMintAmount = buyRange[j]; cnt++; }else{ mintRangeIndex[cnt] = j; index = j; mintAmounts[cnt] = lastDeposit + userAmount - buyRange[j-1]; mintTokenAmount += (lastDeposit + userAmount - buyRange[j-1]) * mintRange[j] /1e18; cnt++; break; } } break; } } // Downsize the array to fit. assembly { mstore(mintRangeIndex, cnt) mstore(mintAmounts, cnt) } } function getDebitTime() public view returns(uint256,uint256){ return (startTime,endTime); } function getTokenCirculation() public view returns(uint256 circulation){ circulation = mintedToken + addLQTokenLimit; } function getLeftInfo() public view returns(uint256 tokenLQAmount, uint256 realMintTokenAmount,uint256 leftLQAmount, uint256 leftMintAmount,uint256 totalLeft){ tokenLQAmount = addLQTokenLimit; leftLQAmount = 0; //left mint token transfer to dead realMintTokenAmount = mintedToken; leftMintAmount = mintTokenLimit - mintedToken; totalLeft = leftLQAmount + leftMintAmount; } function lockLP(address tokenAddr,uint256 lockAmount) public onlyOwner{ require(block.timestamp > endTime + protectRefundDuration,'Protect lockLP Duration'); address pair = tokenPair[tokenAddr]; uint256 lqBalance = IERC20(pair).balanceOf(address(this)); if(lqBalance > lockAmount){ IERC20(pair).safeTransfer(lockLPAddr, lockAmount); } } function lockETH(uint256 lockAmount) public onlyOwner{ require(block.timestamp > endTime + protectRefundDuration,'Protect lockETH Duration'); (bool success, ) = lockLPAddr.call{value: lockAmount}(""); require(success, "lockLPAddr Unable to Withdraw ETH"); } function getLQ(address tokenAddr) public view returns(uint256 ethAmount,uint256 reserveEth,uint256 amountOutETHMin,uint256 lqAmount,uint256 lqBalance){ address pair = tokenPair[tokenAddr]; uint256 lqTotal = IERC20(pair).totalSupply(); (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(pair).getReserves(); reserveEth = (address(WETH) > tokenAddr) ? reserve1 : reserve0; ethAmount = tokenDebitLevel[tokenAddr]; amountOutETHMin = (ethAmount + ethAmount * rmSlippage / basePoints) * (basePoints - rmSlippage) / basePoints; lqAmount = (ethAmount + ethAmount * rmSlippage / basePoints) * lqTotal / reserveEth; lqBalance = IERC20(pair).balanceOf(address(this)); } function getCurrBlockAndTime() public view returns(uint256 blockNum,uint256 blockTime){ blockNum = block.number; blockTime = block.timestamp; } function setKeeper(address addr, bool active) public onlyOwner { keeperMap[addr] = active; emit SetKeeper(msg.sender,addr,active); } function isKeeper(address addr) public view returns (bool) { return keeperMap[addr]; } receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.0; interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_v2Factory","type":"address"},{"internalType":"address","name":"_v2Router","type":"address"},{"internalType":"address","name":"_bonusPool","type":"address"},{"internalType":"address","name":"_rewardAddr","type":"address"},{"internalType":"address","name":"_JUMPToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddr","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"newToken","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"debitLevel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initBuyAmount","type":"uint256"}],"name":"AddNewDebit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"range","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userDeposit","type":"uint256"}],"name":"Donate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"refundAmount","type":"uint256"}],"name":"RefundETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddr","type":"address"}],"name":"RemoveLiqWarFlag","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"seqNo","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddr","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"lqAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"RemoveLiqWarLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"bonusPool","type":"address"}],"name":"SetBonusPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"debitLimit","type":"uint256"}],"name":"SetDebitLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"SetKeeper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"rmSlippage","type":"uint256"}],"name":"SetRmLqSlippage","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddr","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"lqAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isLiqWar","type":"bool"}],"name":"WithdrawDebitForLiqWar","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"JUMPToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adLPRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLQTokenLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debitLevel","type":"uint256"},{"internalType":"bool","name":"isLiqWar","type":"bool"}],"name":"addNewDebit","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"basePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusPool","outputs":[{"internalType":"contract IJUMPBonusPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyRange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokenCnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"debitLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"debitTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"destroyLeftToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"donateNum","type":"uint256"}],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getCanReleaseInfo","outputs":[{"internalType":"uint256","name":"total","type":"uint256"},{"internalType":"uint256","name":"canRelease","type":"uint256"},{"internalType":"uint256","name":"released","type":"uint256"},{"internalType":"uint256","name":"locked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrBlockAndTime","outputs":[{"internalType":"uint256","name":"blockNum","type":"uint256"},{"internalType":"uint256","name":"blockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrMintPhaseInfo","outputs":[{"internalType":"uint256","name":"currPhase","type":"uint256"},{"internalType":"uint256","name":"currRate","type":"uint256"},{"internalType":"uint256","name":"nextPhase","type":"uint256"},{"internalType":"uint256","name":"nextRate","type":"uint256"},{"internalType":"uint256","name":"currETHLimit","type":"uint256"},{"internalType":"uint256","name":"currDepositETH","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDebitTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"}],"name":"getLQ","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"reserveEth","type":"uint256"},{"internalType":"uint256","name":"amountOutETHMin","type":"uint256"},{"internalType":"uint256","name":"lqAmount","type":"uint256"},{"internalType":"uint256","name":"lqBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLeftInfo","outputs":[{"internalType":"uint256","name":"tokenLQAmount","type":"uint256"},{"internalType":"uint256","name":"realMintTokenAmount","type":"uint256"},{"internalType":"uint256","name":"leftLQAmount","type":"uint256"},{"internalType":"uint256","name":"leftMintAmount","type":"uint256"},{"internalType":"uint256","name":"totalLeft","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintAndLQInfo","outputs":[{"internalType":"uint256","name":"mintJUMPLimit","type":"uint256"},{"internalType":"uint256","name":"addLqJUMP","type":"uint256"},{"internalType":"uint256","name":"mintedJUMP","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lastDeposit","type":"uint256"},{"internalType":"uint256","name":"userAmount","type":"uint256"}],"name":"getMintIndexAndAmount","outputs":[{"internalType":"uint256","name":"mintTokenAmount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256[]","name":"mintRangeIndex","type":"uint256[]"},{"internalType":"uint256[]","name":"mintAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOfferingAmount","outputs":[{"internalType":"uint256","name":"userOfferingTotalAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenCirculation","outputs":[{"internalType":"uint256","name":"circulation","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inviteRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inviteRewardAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDestroyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isKeeper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"keeperMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockAmount","type":"uint256"}],"name":"lockETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddr","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"}],"name":"lockLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockLPAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketMakerAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketMakerRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPerDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLimitETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintRange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintTokenLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectLQDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectRefundDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rangeIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refundRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokenAddrs","type":"address[]"}],"name":"removeLiqWarFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"seqNo","type":"uint256"}],"name":"rewardLiqWarToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmLiqWarRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rmSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"seqLiqWarInfo","outputs":[{"internalType":"uint256","name":"rewardETH","type":"uint256"},{"internalType":"uint256","name":"rewardSeq","type":"uint256"},{"internalType":"bool","name":"rmFlag","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_debitLimit","type":"uint256"}],"name":"setDebitLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusPool","type":"address"}],"name":"setEmergencyBonusPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rmSlippage","type":"uint256"}],"name":"setRmLqSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"seqNo","type":"uint256"},{"internalType":"address[]","name":"rmTokenAddrs","type":"address[]"},{"internalType":"address[2]","name":"rewardTokenAddrs","type":"address[2]"}],"name":"startLiqWarHandle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenDebitLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenLqInfo","outputs":[{"internalType":"uint256","name":"ethAddAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAddAmount","type":"uint256"},{"internalType":"uint256","name":"lqAmountTotal","type":"uint256"},{"internalType":"uint256","name":"addLqTime","type":"uint256"},{"internalType":"uint256","name":"rmLqAmount","type":"uint256"},{"internalType":"bool","name":"isLiqWar","type":"bool"},{"internalType":"bool","name":"isStartLiqWar","type":"bool"},{"internalType":"bool","name":"isCTOFlag","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenUser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"userDepositTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"depositAmount","type":"uint256"},{"internalType":"uint256","name":"mintTotal","type":"uint256"},{"internalType":"uint256","name":"mintReleased","type":"uint256"},{"internalType":"bool","name":"isRefund","type":"bool"},{"internalType":"bool","name":"isStartClaim","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokenAddrs","type":"address[]"}],"name":"withdrawDebitsForLiqWar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokenAddrs","type":"address[]"}],"name":"withdrawDebitsForWithoutLiqWar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260076003818155601960045560058055600f60065590556201518060085562093a80600955604580546001600160a01b0319908116735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f1790915560468054909116737a250d5630b4cf539739df2c5dacb4c659f2488d1790553480156200007e57600080fd5b506040516200520e3803806200520e833981016040819052620000a1916200069a565b6001600081815581546001600160a01b031916339081179092556040518291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350604680546001600160a01b038087166001600160a01b03199283168117909355604580548983169084161790556047805491871691909216179055604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa1580156200015e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018491906200070a565b604480546001600160a01b03199081166001600160a01b03938416179091556b0295be96e640669720000000600b556a6342fd08f00f6378000000600c5569022513f309d8f3060000600e5567016345785d8a0000600a556016805473fe49c3d7b7ef988233fadded69f7b624a392e01790831617905560178054909116848316179055604754604080516378e9792560e01b8152905191909216916378e979259160048281019260209291908290030181865afa1580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027191906200072f565b604855604754604080516326beb82160e01b815290516001600160a01b03909216916326beb821916004808201926020929091908290030181865afa158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e591906200072f565b604955600280546001600160a01b0319166001600160a01b03831617905560408051610280810182526818efc84ad0c7b00000815268321f6711425e2c00006020820152684b8edc5354c374000091810191909152686540ee9bf8b29c00006060820152687f343aa5b5ce1a00006080820152689968c0708c15ee000060a082015268b3e146876c452c000060c082015268ce9dccea565bd4000060e082015268e99e53994a59e60000610100820152690104e43dd9c09cec00006101208201526901206f8babb924e6000061014082015269013c43039a24ace800006101608201526901585bdf1a1279de0000610180820152690174bce4b67346dc00006101a08201526901916777b4bf716c00006101c08201526901ae5a34cf7e9c0400006101e08201526901cb97e291a181b800006102008201526901e92080fb2822880000610220820152690206f4100c127e74000061024082015269022513f309d8f30600006102608201526200046090601c90601462000618565b506040805161028081018252691269ec283f21e84cc000815269123b3fff4be6aa500000602082015269120d0a22c7736da2a000918101919091526911df4966e1862dac400060608201526911b1fca2b3a6068bc000608082015269118522b04a3b8389e00060a0820152691158ba6ca4909f19400060c082015269112cc2b79987d77e800060e08201526911013a73e0b47d42e0006101008201526910d62087002a164f00006101208201526910ab73d95594ac5d80006101408201526910813355e8bf44bde0006101608201526910575dea990d6891a00061018082015269102df287f0019c8f20006101a0820152691004f0213c864c5980006101c0820152690fdc55ac4a2b56eba0006101e0820152690fb42221bc191f126000610200820152690f8c547c9fecde0d2000610220820152690f64ebbac8abb4080000610240820152690f3de6dc6ab7492f0000610260820152620005c790603090601462000618565b5050336000908152601260205260409020805460ff191660011790555050604a805474fe49c3d7b7ef988233fadded69f7b624a392e01700610100600160a81b031990911617905550620007499050565b826014810192821562000654579160200282015b828111156200065457825182906001600160501b03169055916020019190600101906200062c565b506200066292915062000666565b5090565b5b8082111562000662576000815560010162000667565b80516001600160a01b03811681146200069557600080fd5b919050565b600080600080600060a08688031215620006b357600080fd5b620006be866200067d565b9450620006ce602087016200067d565b9350620006de604087016200067d565b9250620006ee606087016200067d565b9150620006fe608087016200067d565b90509295509295909350565b6000602082840312156200071d57600080fd5b62000728826200067d565b9392505050565b6000602082840312156200074257600080fd5b5051919050565b614ab580620007596000396000f3fe6080604052600436106104125760003560e01c8063831cb8e81161021e578063c30b7ecb11610123578063e7740454116100ab578063f14faf6f1161007a578063f14faf6f14610d63578063f26bd8d914610d76578063f2fde38b14610d96578063f670ed4114610db6578063f7ed40a714610dcc57600080fd5b8063e774045414610c7f578063e805a8d014610d26578063ec6fdad014610d3b578063ed6a469f14610d5057600080fd5b8063c4b0ee39116100f2578063c4b0ee3914610be8578063c978a7bc14610bfd578063ce1ff67e14610c13578063d1b9e85314610c49578063d3c6d2b514610c6957600080fd5b8063c30b7ecb14610b72578063c31c9c0714610b88578063c320339514610ba8578063c45a015514610bc857600080fd5b8063a035b237116101a6578063ae0526d311610175578063ae0526d314610ad0578063b7dfa36c14610af0578063ba6f991c14610b06578063bc184cb914610b46578063bf040de114610b5c57600080fd5b8063a035b23714610a40578063a2c7608114610a70578063aa7f217014610a90578063ad5c464814610ab057600080fd5b80638eec6f7b116101ed5780638eec6f7b14610979578063923881661461099957806394afb0d5146109af578063965f8c9914610a0b5780639f3f54af14610a2b57600080fd5b8063831cb8e8146109105780638542925a1461092557806387e97bc61461093b5780638da5cb5b1461095b57600080fd5b80634c18ccfc116103245780636475c305116102ac578063715018a61161027b578063715018a61461088257806378e97925146108975780637bfb06b4146108ad5780637e3aac04146108c35780638283aee5146108f057600080fd5b80636475c3051461081357806365bbd34614610833578063685a043a146108485780636ba42aaa1461086257600080fd5b80635af123f4116102f35780635af123f4146107765780635b1e860c1461078c5780635b335e9c146107a2578063613fc6e7146107d357806362fc3ea6146107f357600080fd5b80634c18ccfc146106e65780634e71d92d146107265780634fa5f6511461073b5780635121a2e51461076057600080fd5b80631959a002116103a757806327dcc0601161037657806327dcc060146106475780632ee9a24d1461065d5780633197cbb614610673578063365c7a29146106895780634b0c86cf146106c657600080fd5b80631959a002146105575780631cc6391e146105d15780632295c42d146106075780632693ee801461062757600080fd5b80630dce4d45116103e35780630dce4d45146104b75780630ea479b4146104e05780630f018e271461050057806312210e8a1461054257600080fd5b806283b2f51461041e578062d4e77f1461044757806303fd2a4514610469578063058753951461049757600080fd5b3661041957005b600080fd5b34801561042a57600080fd5b50610434600e5481565b6040519081526020015b60405180910390f35b34801561045357600080fd5b5061046761046236600461446b565b610de0565b005b34801561047557600080fd5b5061047f61dead81565b6040516001600160a01b03909116815260200161043e565b3480156104a357600080fd5b5060175461047f906001600160a01b031681565b3480156104c357600080fd5b506048546049545b6040805192835260208301919091520161043e565b3480156104ec57600080fd5b5060165461047f906001600160a01b031681565b34801561050c57600080fd5b50610515610f7d565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161043e565b34801561054e57600080fd5b50610467611006565b34801561056357600080fd5b506105a56105723660046144ca565b60136020526000908152604090208054600182015460028301546003909301549192909160ff8082169161010090041685565b60408051958652602086019490945292840191909152151560608301521515608082015260a00161043e565b3480156105dd57600080fd5b5061047f6105ec3660046144ca565b6014602052600090815260409020546001600160a01b031681565b34801561061357600080fd5b506104676106223660046144ee565b6112e5565b34801561063357600080fd5b5060475461047f906001600160a01b031681565b34801561065357600080fd5b5061043460095481565b34801561066957600080fd5b50610434601b5481565b34801561067f57600080fd5b5061043460495481565b34801561069557600080fd5b5061069e611418565b604080519586526020860194909452928401919091526060830152608082015260a00161043e565b3480156106d257600080fd5b506104676106e136600461451a565b611448565b3480156106f257600080fd5b506107166107013660046144ca565b60126020526000908152604090205460ff1681565b604051901515815260200161043e565b34801561073257600080fd5b50610467611562565b34801561074757600080fd5b50604a5461047f9061010090046001600160a01b031681565b34801561076c57600080fd5b50610434600b5481565b34801561078257600080fd5b5061043460035481565b34801561079857600080fd5b5061043460105481565b3480156107ae57600080fd5b50600b54600c54600d546040805193845260208401929092529082015260600161043e565b3480156107df57600080fd5b506104676107ee36600461454f565b6117bb565b3480156107ff57600080fd5b5061046761080e36600461454f565b611aa2565b34801561081f57600080fd5b5061069e61082e3660046144ca565b611b0e565b34801561083f57600080fd5b50610467611d47565b34801561085457600080fd5b50604a546107169060ff1681565b34801561086e57600080fd5b5061071661087d3660046144ca565b611e8c565b34801561088e57600080fd5b50610467611eaa565b3480156108a357600080fd5b5061043460485481565b3480156108b957600080fd5b5061043460055481565b3480156108cf57600080fd5b506104346108de3660046144ca565b60186020526000908152604090205481565b3480156108fc57600080fd5b5060025461047f906001600160a01b031681565b34801561091c57600080fd5b50610434604b81565b34801561093157600080fd5b50610434600d5481565b34801561094757600080fd5b506104346109563660046144ca565b611f1e565b34801561096757600080fd5b506001546001600160a01b031661047f565b34801561098557600080fd5b5061046761099436600461454f565b611f69565b3480156109a557600080fd5b50610434600a5481565b3480156109bb57600080fd5b506109ee6109ca36600461454f565b601a6020526000908152604090208054600182015460049092015490919060ff1683565b60408051938452602084019290925215159082015260600161043e565b348015610a1757600080fd5b50610467610a2636600461454f565b6120a7565b348015610a3757600080fd5b50610434600a81565b348015610a4c57600080fd5b50610a60610a5b366004614568565b61210c565b60405161043e94939291906145c5565b348015610a7c57600080fd5b50610434610a8b36600461454f565b6125b6565b348015610a9c57600080fd5b50610467610aab3660046144ca565b6125cd565b348015610abc57600080fd5b5060445461047f906001600160a01b031681565b348015610adc57600080fd5b50610434610aeb36600461454f565b61264c565b348015610afc57600080fd5b50610434600f5481565b348015610b1257600080fd5b50610b26610b213660046144ca565b61265c565b60408051948552602085019390935291830152606082015260800161043e565b348015610b5257600080fd5b50610434600c5481565b348015610b6857600080fd5b5061043460045481565b348015610b7e57600080fd5b5061043460085481565b348015610b9457600080fd5b5060465461047f906001600160a01b031681565b348015610bb457600080fd5b50610467610bc33660046145f6565b61272e565b348015610bd457600080fd5b5060455461047f906001600160a01b031681565b348015610bf457600080fd5b50610434606481565b348015610c0957600080fd5b5061043460075481565b348015610c1f57600080fd5b5061047f610c2e3660046144ca565b6019602052600090815260409020546001600160a01b031681565b348015610c5557600080fd5b50610467610c64366004614679565b6127d0565b348015610c7557600080fd5b5061043460065481565b348015610c8b57600080fd5b50610ce5610c9a3660046144ca565b601560205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff808216916101008104821691620100009091041688565b6040805198895260208901979097529587019490945260608601929092526080850152151560a0840152151560c0830152151560e08201526101000161043e565b348015610d3257600080fd5b5061043461285f565b348015610d4757600080fd5b50610434601881565b61047f610d5e3660046146b2565b612876565b610467610d7136600461454f565b612b2d565b348015610d8257600080fd5b50610467610d9136600461451a565b613077565b348015610da257600080fd5b50610467610db13660046144ca565b61316c565b348015610dc257600080fd5b5061043460115481565b348015610dd857600080fd5b5043426104cb565b600260005403610e0b5760405162461bcd60e51b8152600401610e0290614705565b60405180910390fd5b6002600055610e1933611e8c565b610e355760405162461bcd60e51b8152600401610e029061473c565b6000838152601a602052604090206004015460ff1615610e885760405162461bcd60e51b815260206004820152600e60248201526d1cd95c539bc81a185cc81d5cd95960921b6044820152606401610e02565b60005b8251811015610f72576000838281518110610ea857610ea8614760565b6020026020010151905060156000826001600160a01b03166001600160a01b0316815260200190815260200160002060050160019054906101000a900460ff16610f345760405162461bcd60e51b815260206004820152601960248201527f4e6f7420616c6c6f7720746f205374617274204c6971576172000000000000006044820152606401610e02565b610f3e85826131a2565b6000858152601a60205260409020610f5d90600290810190859061432e565b50508080610f6a9061478c565b915050610e8b565b505060016000555050565b601b5460008080808060308660148110610f9957610f99614760565b015494506014601b546001610fae91906147a5565b1015610fc657610fbf8660016147a5565b9350610fcb565b601393505b60308460148110610fde57610fde614760565b01549250601c8660148110610ff557610ff5614760565b015491506011549050909192939495565b6002600054036110285760405162461bcd60e51b8152600401610e0290614705565b60026000556049544211801561104d575060095460495461104991906147a5565b4211155b6110995760405162461bcd60e51b815260206004820152601760248201527f50726f7465637420526566756e64204475726174696f6e0000000000000000006044820152606401610e02565b336000818152601360205260409020546110e75760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a1bdd5d0811195c1bdcda5d608a1b6044820152606401610e02565b6001600160a01b03811660009081526013602052604090206003015460ff1615801561113457506001600160a01b038116600090815260136020526040902060030154610100900460ff16155b61116f5760405162461bcd60e51b815260206004820152600c60248201526b12185cc81499599d5b99195960a21b6044820152606401610e02565b6001600160a01b03811660009081526013602052604081205460649061119790604b906147be565b6111a191906147eb565b6001600160a01b038316600081815260136020526040808220600301805460ff19166001179055519293509183908381818185875af1925050503d8060008114611207576040519150601f19603f3d011682016040523d82523d6000602084013e61120c565b606091505b50509050806112545760405162461bcd60e51b81526020600482015260146024820152730aadcc2c4d8ca40e8de40e4cacceadcc8408aa8960631b6044820152606401610e02565b6001600160a01b0380841660009081526013602052604090206001015460025461128392169061dead9061342e565b6001600160a01b0383166000818152601360209081526040918290205482519384529083015281018390527f0a51d2fc760fc947eee0ddb113878c9774c389343c0b08aa0afe1caa731e7a179060600160405180910390a15050600160005550565b6001546001600160a01b0316331461130f5760405162461bcd60e51b8152600401610e02906147ff565b60095460495461131f91906147a5565b421161136d5760405162461bcd60e51b815260206004820152601760248201527f50726f74656374206c6f636b4c50204475726174696f6e0000000000000000006044820152606401610e02565b6001600160a01b038281166000908152601460205260408082205490516370a0823160e01b815230600482015292169182906370a0823190602401602060405180830381865afa1580156113c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e99190614834565b90508281111561141257604a54611412906001600160a01b03848116916101009004168561342e565b50505050565b600c54600d54600b546000908190819061143390859061484d565b915061143f82846147a5565b90509091929394565b60026000540361146a5760405162461bcd60e51b8152600401610e0290614705565b600260005561147833611e8c565b6114945760405162461bcd60e51b8152600401610e029061473c565b60005b81518110156115595760008282815181106114b4576114b4614760565b6020908102919091018101516001600160a01b0381166000908152601590925260409091206005015490915060ff166115225760405162461bcd60e51b815260206004820152601060248201526f2737ba102634b8abb0b9103a37b5b2b760811b6044820152606401610e02565b61154683838151811061153757611537614760565b60200260200101516001613491565b50806115518161478c565b915050611497565b50506001600055565b6002600054036115845760405162461bcd60e51b8152600401610e0290614705565b600260009081553380825260136020526040909120546115d85760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a1bdd5d0811195c1bdcda5d608a1b6044820152606401610e02565b604954421161161d5760405162461bcd60e51b8152602060048201526011602482015270135a5b9d08139bdd08119a5b9a5cda1959607a1b6044820152606401610e02565b6001600160a01b03811660009081526013602052604090206003015460ff16156116785760405162461bcd60e51b815260206004820152600c60248201526b12185cc81499599d5b99195960a21b6044820152606401610e02565b6001600160a01b03811660009081526013602052604090206002810154600190910154116116d75760405162461bcd60e51b815260206004820152600c60248201526b105b1b0814995b19585cd95960a21b6044820152606401610e02565b6001600160a01b03811660009081526013602052604081206002810154600190910154611704919061484d565b6001600160a01b0383166000908152601360205260408120600201805492935083929091906117349084906147a5565b9091555050600254611750906001600160a01b0316838361342e565b6001600160a01b03821660008181526013602052604090819020600301805461ff001916610100179055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906117aa9084815260200190565b60405180910390a250506001600055565b6117c433611e8c565b6117e05760405162461bcd60e51b8152600401610e029061473c565b6000818152601a602052604090206004015460ff166118355760405162461bcd60e51b81526020600482015260116024820152702737ba103932b6b7bb32902634b8abb0b960791b6044820152606401610e02565b6000818152601a602052604090206001015460181161188a5760405162461bcd60e51b81526020600482015260116024820152702737ba103932b6b7bb32902634b8abb0b960791b6044820152606401610e02565b6000818152601a602052604081206001018054916118a78361478c565b90915550600090506118bb601860026147be565b6000838152601a60205260409020546118d491906147eb565b905060005b6002811015611a9d576000838152601a602052604081206002908101908390811061190657611906614760565b01546040805160028082526060820183526001600160a01b0390931693506000929091602083019080368337505060445482519293506001600160a01b03169183915060009061195857611958614760565b60200260200101906001600160a01b031690816001600160a01b031681525050818160018151811061198c5761198c614760565b6001600160a01b03928316602091820292909201015260465460405163b6f9de9560e01b815291169063b6f9de959086906119d290600090869030904290600401614860565b6000604051808303818588803b1580156119eb57600080fd5b505af11580156119ff573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03861692506370a082319150602401602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190614834565b9050611a876001600160a01b03841661dead8361342e565b5050508080611a959061478c565b9150506118d9565b505050565b6001546001600160a01b03163314611acc5760405162461bcd60e51b8152600401610e02906147ff565b600581905560408051338152602081018390527f81eb433ecff7578fea633a4eed84b25e60b72223d14b5296e94823b9e5571f5f91015b60405180910390a150565b6001600160a01b0380821660009081526014602090815260408083205481516318160ddd60e01b815291519394859485948594859490931692849284926318160ddd92600480820193918290030181865afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b959190614834565b9050600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc91906148e1565b5060445491935091506001600160a01b03808c16911611611c1d5781611c1f565b805b6001600160a01b038b16600090815260186020526040902054600554909a506001600160701b03919091169850606490611c59908261484d565b60646005548c611c6991906147be565b611c7391906147eb565b611c7d908c6147a5565b611c8791906147be565b611c9191906147eb565b9650878360646005548c611ca591906147be565b611caf91906147eb565b611cb9908c6147a5565b611cc391906147be565b611ccd91906147eb565b6040516370a0823160e01b81523060048201529096506001600160a01b038516906370a0823190602401602060405180830381865afa158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d389190614834565b94505050505091939590929450565b611d5033611e8c565b611d6c5760405162461bcd60e51b8152600401610e029061473c565b6049544211611dbd5760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420616c6c6f7720746f2064657374726f79204c656674546f6b656e00006044820152606401610e02565b600b54600d5410611e095760405162461bcd60e51b8152602060048201526016602482015275135a5b9d1959081b195cdcc81d1a185b88131a5b5a5d60521b6044820152606401610e02565b604a5460ff1615611e4e5760405162461bcd60e51b815260206004820152600f60248201526e416c72656164792044657374726f7960881b6044820152606401610e02565b6000600d54600b54611e60919061484d565b600254909150611e7c906001600160a01b031661dead8361342e565b50604a805460ff19166001179055565b6001600160a01b031660009081526012602052604090205460ff1690565b6001546001600160a01b03163314611ed45760405162461bcd60e51b8152600401610e02906147ff565b6001546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180546001600160a01b0319169055565b6001600160a01b03811660009081526013602052604081206003015460ff1615611f4a57506000919050565b506001600160a01b031660009081526013602052604090206001015490565b6001546001600160a01b03163314611f935760405162461bcd60e51b8152600401610e02906147ff565b600954604954611fa391906147a5565b4211611ff15760405162461bcd60e51b815260206004820152601860248201527f50726f74656374206c6f636b455448204475726174696f6e00000000000000006044820152606401610e02565b604a5460405160009161010090046001600160a01b03169083908381818185875af1925050503d8060008114612043576040519150601f19603f3d011682016040523d82523d6000602084013e612048565b606091505b50509050806120a35760405162461bcd60e51b815260206004820152602160248201527f6c6f636b4c504164647220556e61626c6520746f2057697468647261772045546044820152600960fb1b6064820152608401610e02565b5050565b6001546001600160a01b031633146120d15760405162461bcd60e51b8152600401610e02906147ff565b601081905560408051338152602081018390527fa70cec5ab93bb60a6face5d07b91f1ffc5bdfd14803d27b1f5f5f0e9d36241109101611b03565b6040805160148082526102a082019092526000918291606091829190602082016102808036833750506040805160148082526102a082019092529294509050602082016102808036833701905050601b549091506000905b60148110156125a757601c816014811061218057612180614760565b015488111580156121ae5750601c816014811061219f5761219f614760565b01546121ab888a6147a5565b11155b1561223957808483815181106121c6576121c6614760565b602002602001018181525050809450868383815181106121e8576121e8614760565b6020908102919091010152816121fd8161478c565b925050670de0b6b3a76400006030826014811061221c5761221c614760565b015461222890896147be565b61223291906147eb565b95506125a7565b601c816014811061224c5761224c614760565b0154881115801561227a5750601c816014811061226b5761226b614760565b0154612277888a6147a5565b10155b15612595578084838151811061229257612292614760565b60200260200101818152505080945087601c82601481106122b5576122b5614760565b01546122c1919061484d565b8383815181106122d3576122d3614760565b602002602001018181525050670de0b6b3a7640000603082601481106122fb576122fb614760565b015489601c846014811061231157612311614760565b015461231d919061484d565b61232791906147be565b61233191906147eb565b61233b90876147a5565b9550816123478161478c565b9250506000601c826014811061235f5761235f614760565b0154905060006123708360016147a5565b90505b601481101561258e57601c816014811061238f5761238f614760565b015461239b8a8c6147a5565b1061248757808685815181106123b3576123b3614760565b60200260200101818152505080965081601c82601481106123d6576123d6614760565b01546123e2919061484d565b8585815181106123f4576123f4614760565b602002602001018181525050670de0b6b3a76400006030826014811061241c5761241c614760565b015483601c846014811061243257612432614760565b015461243e919061484d565b61244891906147be565b61245291906147eb565b61245c90896147a5565b9750601c816014811061247157612471614760565b015491508361247f8161478c565b94505061257c565b8086858151811061249a5761249a614760565b6020908102919091010152955085601c6124b560018361484d565b601481106124c5576124c5614760565b01546124d18a8c6147a5565b6124db919061484d565b8585815181106124ed576124ed614760565b602002602001018181525050670de0b6b3a76400006030826014811061251557612515614760565b0154601c61252460018561484d565b6014811061253457612534614760565b01546125408c8e6147a5565b61254a919061484d565b61255491906147be565b61255e91906147eb565b61256890896147a5565b9750836125748161478c565b94505061258e565b806125868161478c565b915050612373565b50506125a7565b8061259f8161478c565b915050612164565b50808352815292959194509250565b603081601481106125c657600080fd5b0154905081565b6001546001600160a01b031633146125f75760405162461bcd60e51b8152600401610e02906147ff565b604780546001600160a01b0319166001600160a01b0383169081179091556040805133815260208101929092527f6c8aa1451bb27118767004fb0f2f6ac5866736a3dc12d751a239043469e4cf319101611b03565b601c81601481106125c657600080fd5b6001600160a01b038116600090815260136020526040812060018101546002909101546049549192918290421161269b57506000915081905082612727565b6001600160a01b03851660009081526013602052604090206003015460ff16156126d057506000925082915081905080612727565b604954426fffffffffffffffffffffffffffffffff16106126f8576126f5828561484d565b92505b61270282846147a5565b841161270f576000612724565b8161271a848661484d565b612724919061484d565b90505b9193509193565b6002600054036127505760405162461bcd60e51b8152600401610e0290614705565b600260005561275e33611e8c565b61277a5760405162461bcd60e51b8152600401610e029061473c565b60005b818110156127c6576127b483838381811061279a5761279a614760565b90506020020160208101906127af91906144ca565b613a17565b806127be8161478c565b91505061277d565b5050600160005550565b6001546001600160a01b031633146127fa5760405162461bcd60e51b8152600401610e02906147ff565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915582519384529083015233917f8ff482920e9c46f3eaae463cb945cee6bf6ede646ff885e22885efa7c61cd1d3910160405180910390a25050565b6000600c54600d5461287191906147a5565b905090565b600061288133611e8c565b61289d5760405162461bcd60e51b8152600401610e029061473c565b824710156128ed5760405162461bcd60e51b815260206004820152601d60248201527f42616c616e6365206c657373207468616e206465626974206c6576656c0000006044820152606401610e02565b60105483600f546128fe91906147a5565b1115801561290e57506000601054115b61294e5760405162461bcd60e51b8152602060048201526011602482015270115e18d95959081919589a5d131a5b5a5d607a1b6044820152606401610e02565b6001600160a01b0385811660009081526018602090815260408083208790556019825280832080546001600160a01b031916948916949094179093556015905220600501805460ff19168315151790556129a785613be1565b60408051600280825260608201835234926000929190602083019080368337505060445482519293506001600160a01b0316918391506000906129ec576129ec614760565b60200260200101906001600160a01b031690816001600160a01b0316815250508681600181518110612a2057612a20614760565b6001600160a01b03928316602091820292909201015260465460405163b6f9de9560e01b815291169063b6f9de95908490612a669060009086908c904290600401614860565b6000604051808303818588803b158015612a7f57600080fd5b505af1158015612a93573d6000803e3d6000fd5b505050505084600f6000828254612aaa91906147a5565b90915550506001600160a01b038781166000818152601460209081526040918290205482518b86168152918201939093529190921691810182905260608101879052608081018490529093507ff1a35f5b0475d58d3efa229f8d7a18c81aa5b916585ab625274bacb363de7d249060a00160405180910390a15050949350505050565b600260005403612b4f5760405162461bcd60e51b8152600401610e0290614705565b60026000556049543490421115612b965760405162461bcd60e51b815260206004820152600b60248201526a11195c1bdcda5d08195b9960aa1b6044820152606401610e02565b600a54811015612bdd5760405162461bcd60e51b815260206004820152601260248201527113195cdcc81b5a5b94195c91195c1bdcda5d60721b6044820152606401610e02565b80600a5483612bec91906147be565b14612c395760405162461bcd60e51b815260206004820181905260248201527f446f6e61746520616d6f756e74206e6f7420657175616c20746f2076616c75656044820152606401610e02565b600a54612c469082614931565b15612c825760405162461bcd60e51b815260206004820152600c60248201526b416d6f756e742077726f6e6760a01b6044820152606401610e02565b600e5481601154612c9391906147a5565b1115612cd45760405162461bcd60e51b815260206004820152601060248201526f115e18d959590811551208131a5b5a5d60821b6044820152606401610e02565b600080612ce36011548461210c565b50509150915080601b8190555060003390508360116000828254612d0791906147a5565b90915550506001600160a01b03811660009081526013602052604081208054869290612d349084906147a5565b90915550506001600160a01b03811660009081526013602052604081206001018054859290612d649084906147a5565b9250508190555082600d6000828254612d7d91906147a5565b9091555050600354600090606490612d9590876147be565b612d9f91906147eb565b604754601154604051632b3773d760e11b815233600482015260248101919091529192506001600160a01b03169063566ee7ae9083906044016000604051808303818588803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b5050604754604080516326beb82160e01b815290516001600160a01b0390921694506326beb821935060048082019350602092918290030181865afa158015612e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e769190614834565b604955600654600454600091606491612e8f91906147a5565b612e9990886147be565b612ea391906147eb565b6016546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612ef5576040519150601f19603f3d011682016040523d82523d6000602084013e612efa565b606091505b5050905080612f4b5760405162461bcd60e51b815260206004820152601e60248201527f6d61726b65744d616b6572204661696c20746f20726566756e642045544800006044820152606401610e02565b6000606460075489612f5d91906147be565b612f6791906147eb565b6017546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612fb9576040519150601f19603f3d011682016040523d82523d6000602084013e612fbe565b606091505b505090508061300f5760405162461bcd60e51b815260206004820152601960248201527f696e76697465204661696c20746f20726566756e6420455448000000000000006044820152606401610e02565b600e546011540361301f57426049555b601b54601154604080518c8152602081019390935282015233907f94dfa012dbd3d53b6c092bf771f1f8891ba0605b776a2a861b84099e1b61d3e99060600160405180910390a2505060016000555050505050505050565b6002600054036130995760405162461bcd60e51b8152600401610e0290614705565b60026000556130a733611e8c565b6130c35760405162461bcd60e51b8152600401610e029061473c565b60005b81518110156115595760008282815181106130e3576130e3614760565b6020908102919091018101516001600160a01b0381166000908152601590925260409091206005015490915060ff161561314e5760405162461bcd60e51b815260206004820152600c60248201526b2634b8abb0b9103a37b5b2b760a11b6044820152606401610e02565b613159816000613491565b50806131648161478c565b9150506130c6565b6001546001600160a01b031633146131965760405162461bcd60e51b8152600401610e02906147ff565b61319f81613ef6565b50565b6001600160a01b038181166000908152601460205260408082205490516370a0823160e01b815230600482015292169182906370a0823190602401602060405180830381865afa1580156131fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061321e9190614834565b90506000606461322f600a846147be565b61323991906147eb565b604654909150613256906001600160a01b03858116911683613fb7565b604654604051629d473b60e21b81526000916001600160a01b0316906302751cec9061329090889086908690819030904290600401614945565b60408051808303816000875af11580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d29190614980565b6001600160a01b03871660009081526015602052604081206004018054929450859350916133019084906147a5565b90915550506040516370a0823160e01b81523060048201526000906001600160a01b038716906370a0823190602401602060405180830381865afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133719190614834565b90506133896001600160a01b03871661dead8361342e565b6000878152601a6020526040812080548492906133a79084906147a5565b90915550506000878152601a6020908152604091829020600401805460ff1916600117905581518981526001600160a01b038981169282019290925290871681830152606081018590526080810184905290517fa7b5a7547555e504fc5f79823a1a5f40bc542e88fbdd247c75d5aa16c354e1149160a0908290030190a150505050505050565b6040516001600160a01b038316602482015260448101829052611a9d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526140cc565b6001600160a01b038281166000908152601460205260408082205490516370a0823160e01b815230600482015292169182906370a0823190602401602060405180830381865afa1580156134e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350d9190614834565b6001600160a01b038516600090815260156020526040902060050154909150610100900460ff16156135705760405162461bcd60e51b815260206004820152600c60248201526b29ba30b93a102634b8abb0b960a11b6044820152606401610e02565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d49190614834565b9050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b91906148e1565b5060445491935091506000906001600160a01b03808a1691161161365f5782613661565b815b6001600160a01b0389166000908152601860205260408120546005546001600160701b0393909316935091606490613699908261484d565b6064600554856136a991906147be565b6136b391906147eb565b6136bd90856147a5565b6136c791906147be565b6136d191906147eb565b6008546001600160a01b038c166000908152601560205260409020600301549192506136fc916147a5565b42101561374b5760405162461bcd60e51b815260206004820152601e60248201527f52656d6f76654c697175696469747920636f6e646974696f6e206661696c00006044820152606401610e02565b6000838760646005548661375f91906147be565b61376991906147eb565b61377390866147a5565b61377d91906147be565b61378791906147eb565b905087811115613798575060009050865b6046546137b2906001600160a01b038b8116911683613fb7565b604654604051629d473b60e21b81526000916001600160a01b0316906302751cec906137ec908f9086908690899030904290600401614945565b60408051808303816000875af115801561380a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382e9190614980565b6001600160a01b038e16600090815260156020526040812060040180549294508593509161385d9084906147a5565b90915550506001600160a01b038c1660008181526015602052604090819020600501805461ff001916610100179055516370a0823160e01b81523060048201526139009161dead916370a0823190602401602060405180830381865afa1580156138cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ef9190614834565b6001600160a01b038f16919061342e565b8a6139af576001600160a01b038c811660009081526015602052604090819020600501805462ff0000191662010000179055516370a0823160e01b8152306004820152908b16906370a0823190602401602060405180830381865afa15801561396d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139919190614834565b985088156139af576139af6001600160a01b038b1661dead8b61342e565b604080516001600160a01b03808f1682528c166020820152908101839052606081018290528b151560808201527f7632fadb27e92c768fc7195eb0a1ee6337acb0446dcc2c1a1f3ba57d71ef8ac69060a00160405180910390a1505050505050505050505050565b6001600160a01b038116600090815260156020526040902060050154610100900460ff16613a875760405162461bcd60e51b815260206004820152601860248201527f72656d6f7665204c697157617220466c61672077726f6e6700000000000000006044820152606401610e02565b6001600160a01b03811660009081526015602052604090206005015460ff16613ae55760405162461bcd60e51b815260206004820152601060248201526f2737ba102634b8abb0b9103a37b5b2b760811b6044820152606401610e02565b6001600160a01b038181166000908152601560209081526040808320600501805462ffff0019166201000017905560149091528082205490516370a0823160e01b815230600482015292169182906370a0823190602401602060405180830381865afa158015613b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7d9190614834565b90508015613b9b57613b9b6001600160a01b03831661dead8361342e565b604080513381526001600160a01b03851660208201527f9186d1756a49f3b7102ee7c9a0d0be004d229e2eec7d1e789b41d4f935a8f3cf910160405180910390a1505050565b6001600160a01b038181166000908152601460205260409020541615613c345760405162461bcd60e51b8152602060048201526008602482015267131448185919195960c21b6044820152606401610e02565b6040516370a0823160e01b815230600482015247906000906001600160a01b038416906370a0823190602401602060405180830381865afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190614834565b6001600160a01b03841660009081526018602052604090205490915080831015613d0d5760405162461bcd60e51b815260206004820152601960248201527f416d6f756e74206578636565642063757272656e7420455448000000000000006044820152606401610e02565b6046544790613d29906001600160a01b03878116911685613fb7565b60465460405163f305d71960e01b81526000916001600160a01b03169063f305d719908590613d66908a9089908790819030904290600401614945565b60606040518083038185885af1158015613d84573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613da991906149a4565b6045546044805460405163e6a4390560e01b81526001600160a01b038d81166004830152918216602482015293965060009550909116925063e6a439059101602060405180830381865afa158015613e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2991906149d2565b6001600160a01b03888116600090815260146020908152604080832080546001600160a01b031916948616949094179093556015905220600201839055905047613e73818561484d565b6001600160a01b03898116600081815260156020908152604091829020948555600185018b9055426003909501949094558051918252918516928101929092528101879052606081018690527fd2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e9060800160405180910390a15050505050505050565b6001600160a01b038116613f5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e02565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b8015806140315750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561400b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402f9190614834565b155b61409c5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610e02565b6040516001600160a01b038316602482015260448101829052611a9d90849063095ea7b360e01b9060640161345a565b6000614121826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661419e9092919063ffffffff16565b805190915015611a9d578080602001905181019061413f91906149ef565b611a9d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e02565b60606141ad84846000856141b5565b949350505050565b6060824710156142165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e02565b600080866001600160a01b031685876040516142329190614a30565b60006040518083038185875af1925050503d806000811461426f576040519150601f19603f3d011682016040523d82523d6000602084013e614274565b606091505b509150915061428587838387614290565b979650505050505050565b606083156142ff5782516000036142f8576001600160a01b0385163b6142f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e02565b50816141ad565b6141ad83838151156143145781518083602001fd5b8060405162461bcd60e51b8152600401610e029190614a4c565b8260028101928215614374579160200282015b828111156143745781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614341565b50614380929150614384565b5090565b5b808211156143805760008155600101614385565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461319f57600080fd5b80356143cf816143af565b919050565b600082601f8301126143e557600080fd5b8135602067ffffffffffffffff8083111561440257614402614399565b8260051b604051601f19603f8301168101818110848211171561442757614427614399565b60405293845285810183019383810192508785111561444557600080fd5b83870191505b848210156142855761445c826143c4565b8352918301919083019061444b565b60008060006080848603121561448057600080fd5b83359250602084013567ffffffffffffffff81111561449e57600080fd5b6144aa868287016143d4565b925050846080850111156144bd57600080fd5b6040840190509250925092565b6000602082840312156144dc57600080fd5b81356144e7816143af565b9392505050565b6000806040838503121561450157600080fd5b823561450c816143af565b946020939093013593505050565b60006020828403121561452c57600080fd5b813567ffffffffffffffff81111561454357600080fd5b6141ad848285016143d4565b60006020828403121561456157600080fd5b5035919050565b6000806040838503121561457b57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156145ba5781518752958201959082019060010161459e565b509495945050505050565b8481528360208201526080604082015260006145e4608083018561458a565b8281036060840152614285818561458a565b6000806020838503121561460957600080fd5b823567ffffffffffffffff8082111561462157600080fd5b818501915085601f83011261463557600080fd5b81358181111561464457600080fd5b8660208260051b850101111561465957600080fd5b60209290920196919550909350505050565b801515811461319f57600080fd5b6000806040838503121561468c57600080fd5b8235614697816143af565b915060208301356146a78161466b565b809150509250929050565b600080600080608085870312156146c857600080fd5b84356146d3816143af565b935060208501356146e3816143af565b92506040850135915060608501356146fa8161466b565b939692955090935050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252600a90820152692737ba1035b2b2b832b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161479e5761479e614776565b5060010190565b808201808211156147b8576147b8614776565b92915050565b80820281158282048414176147b8576147b8614776565b634e487b7160e01b600052601260045260246000fd5b6000826147fa576147fa6147d5565b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561484657600080fd5b5051919050565b818103818111156147b8576147b8614776565b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156148aa5784516001600160a01b031683529383019391830191600101614885565b50506001600160a01b039690961660408501525050506060015292915050565b80516001600160701b03811681146143cf57600080fd5b6000806000606084860312156148f657600080fd5b6148ff846148ca565b925061490d602085016148ca565b9150604084015163ffffffff8116811461492657600080fd5b809150509250925092565b600082614940576149406147d5565b500690565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806040838503121561499357600080fd5b505080516020909101519092909150565b6000806000606084860312156149b957600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156149e457600080fd5b81516144e7816143af565b600060208284031215614a0157600080fd5b81516144e78161466b565b60005b83811015614a27578181015183820152602001614a0f565b50506000910152565b60008251614a42818460208701614a0c565b9190910192915050565b6020815260008251806020840152614a6b816040850160208701614a0c565b601f01601f1916919091016040019291505056fea2646970667358221220bbdec15596cf3b219624098df4059c58ad3dbf0ed2d25f35a4e0c094f0a06fe564736f6c634300081400330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000008f8eb567a9f875180eed690dd231fd9619bb09a7000000000000000000000000edffbd7b6f6060e29b262681e9ff52d8772258c90000000000000000000000005843988dfa70805ea740c4af464468c05d73a869
Deployed Bytecode
0x6080604052600436106104125760003560e01c8063831cb8e81161021e578063c30b7ecb11610123578063e7740454116100ab578063f14faf6f1161007a578063f14faf6f14610d63578063f26bd8d914610d76578063f2fde38b14610d96578063f670ed4114610db6578063f7ed40a714610dcc57600080fd5b8063e774045414610c7f578063e805a8d014610d26578063ec6fdad014610d3b578063ed6a469f14610d5057600080fd5b8063c4b0ee39116100f2578063c4b0ee3914610be8578063c978a7bc14610bfd578063ce1ff67e14610c13578063d1b9e85314610c49578063d3c6d2b514610c6957600080fd5b8063c30b7ecb14610b72578063c31c9c0714610b88578063c320339514610ba8578063c45a015514610bc857600080fd5b8063a035b237116101a6578063ae0526d311610175578063ae0526d314610ad0578063b7dfa36c14610af0578063ba6f991c14610b06578063bc184cb914610b46578063bf040de114610b5c57600080fd5b8063a035b23714610a40578063a2c7608114610a70578063aa7f217014610a90578063ad5c464814610ab057600080fd5b80638eec6f7b116101ed5780638eec6f7b14610979578063923881661461099957806394afb0d5146109af578063965f8c9914610a0b5780639f3f54af14610a2b57600080fd5b8063831cb8e8146109105780638542925a1461092557806387e97bc61461093b5780638da5cb5b1461095b57600080fd5b80634c18ccfc116103245780636475c305116102ac578063715018a61161027b578063715018a61461088257806378e97925146108975780637bfb06b4146108ad5780637e3aac04146108c35780638283aee5146108f057600080fd5b80636475c3051461081357806365bbd34614610833578063685a043a146108485780636ba42aaa1461086257600080fd5b80635af123f4116102f35780635af123f4146107765780635b1e860c1461078c5780635b335e9c146107a2578063613fc6e7146107d357806362fc3ea6146107f357600080fd5b80634c18ccfc146106e65780634e71d92d146107265780634fa5f6511461073b5780635121a2e51461076057600080fd5b80631959a002116103a757806327dcc0601161037657806327dcc060146106475780632ee9a24d1461065d5780633197cbb614610673578063365c7a29146106895780634b0c86cf146106c657600080fd5b80631959a002146105575780631cc6391e146105d15780632295c42d146106075780632693ee801461062757600080fd5b80630dce4d45116103e35780630dce4d45146104b75780630ea479b4146104e05780630f018e271461050057806312210e8a1461054257600080fd5b806283b2f51461041e578062d4e77f1461044757806303fd2a4514610469578063058753951461049757600080fd5b3661041957005b600080fd5b34801561042a57600080fd5b50610434600e5481565b6040519081526020015b60405180910390f35b34801561045357600080fd5b5061046761046236600461446b565b610de0565b005b34801561047557600080fd5b5061047f61dead81565b6040516001600160a01b03909116815260200161043e565b3480156104a357600080fd5b5060175461047f906001600160a01b031681565b3480156104c357600080fd5b506048546049545b6040805192835260208301919091520161043e565b3480156104ec57600080fd5b5060165461047f906001600160a01b031681565b34801561050c57600080fd5b50610515610f7d565b604080519687526020870195909552938501929092526060840152608083015260a082015260c00161043e565b34801561054e57600080fd5b50610467611006565b34801561056357600080fd5b506105a56105723660046144ca565b60136020526000908152604090208054600182015460028301546003909301549192909160ff8082169161010090041685565b60408051958652602086019490945292840191909152151560608301521515608082015260a00161043e565b3480156105dd57600080fd5b5061047f6105ec3660046144ca565b6014602052600090815260409020546001600160a01b031681565b34801561061357600080fd5b506104676106223660046144ee565b6112e5565b34801561063357600080fd5b5060475461047f906001600160a01b031681565b34801561065357600080fd5b5061043460095481565b34801561066957600080fd5b50610434601b5481565b34801561067f57600080fd5b5061043460495481565b34801561069557600080fd5b5061069e611418565b604080519586526020860194909452928401919091526060830152608082015260a00161043e565b3480156106d257600080fd5b506104676106e136600461451a565b611448565b3480156106f257600080fd5b506107166107013660046144ca565b60126020526000908152604090205460ff1681565b604051901515815260200161043e565b34801561073257600080fd5b50610467611562565b34801561074757600080fd5b50604a5461047f9061010090046001600160a01b031681565b34801561076c57600080fd5b50610434600b5481565b34801561078257600080fd5b5061043460035481565b34801561079857600080fd5b5061043460105481565b3480156107ae57600080fd5b50600b54600c54600d546040805193845260208401929092529082015260600161043e565b3480156107df57600080fd5b506104676107ee36600461454f565b6117bb565b3480156107ff57600080fd5b5061046761080e36600461454f565b611aa2565b34801561081f57600080fd5b5061069e61082e3660046144ca565b611b0e565b34801561083f57600080fd5b50610467611d47565b34801561085457600080fd5b50604a546107169060ff1681565b34801561086e57600080fd5b5061071661087d3660046144ca565b611e8c565b34801561088e57600080fd5b50610467611eaa565b3480156108a357600080fd5b5061043460485481565b3480156108b957600080fd5b5061043460055481565b3480156108cf57600080fd5b506104346108de3660046144ca565b60186020526000908152604090205481565b3480156108fc57600080fd5b5060025461047f906001600160a01b031681565b34801561091c57600080fd5b50610434604b81565b34801561093157600080fd5b50610434600d5481565b34801561094757600080fd5b506104346109563660046144ca565b611f1e565b34801561096757600080fd5b506001546001600160a01b031661047f565b34801561098557600080fd5b5061046761099436600461454f565b611f69565b3480156109a557600080fd5b50610434600a5481565b3480156109bb57600080fd5b506109ee6109ca36600461454f565b601a6020526000908152604090208054600182015460049092015490919060ff1683565b60408051938452602084019290925215159082015260600161043e565b348015610a1757600080fd5b50610467610a2636600461454f565b6120a7565b348015610a3757600080fd5b50610434600a81565b348015610a4c57600080fd5b50610a60610a5b366004614568565b61210c565b60405161043e94939291906145c5565b348015610a7c57600080fd5b50610434610a8b36600461454f565b6125b6565b348015610a9c57600080fd5b50610467610aab3660046144ca565b6125cd565b348015610abc57600080fd5b5060445461047f906001600160a01b031681565b348015610adc57600080fd5b50610434610aeb36600461454f565b61264c565b348015610afc57600080fd5b50610434600f5481565b348015610b1257600080fd5b50610b26610b213660046144ca565b61265c565b60408051948552602085019390935291830152606082015260800161043e565b348015610b5257600080fd5b50610434600c5481565b348015610b6857600080fd5b5061043460045481565b348015610b7e57600080fd5b5061043460085481565b348015610b9457600080fd5b5060465461047f906001600160a01b031681565b348015610bb457600080fd5b50610467610bc33660046145f6565b61272e565b348015610bd457600080fd5b5060455461047f906001600160a01b031681565b348015610bf457600080fd5b50610434606481565b348015610c0957600080fd5b5061043460075481565b348015610c1f57600080fd5b5061047f610c2e3660046144ca565b6019602052600090815260409020546001600160a01b031681565b348015610c5557600080fd5b50610467610c64366004614679565b6127d0565b348015610c7557600080fd5b5061043460065481565b348015610c8b57600080fd5b50610ce5610c9a3660046144ca565b601560205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff808216916101008104821691620100009091041688565b6040805198895260208901979097529587019490945260608601929092526080850152151560a0840152151560c0830152151560e08201526101000161043e565b348015610d3257600080fd5b5061043461285f565b348015610d4757600080fd5b50610434601881565b61047f610d5e3660046146b2565b612876565b610467610d7136600461454f565b612b2d565b348015610d8257600080fd5b50610467610d9136600461451a565b613077565b348015610da257600080fd5b50610467610db13660046144ca565b61316c565b348015610dc257600080fd5b5061043460115481565b348015610dd857600080fd5b5043426104cb565b600260005403610e0b5760405162461bcd60e51b8152600401610e0290614705565b60405180910390fd5b6002600055610e1933611e8c565b610e355760405162461bcd60e51b8152600401610e029061473c565b6000838152601a602052604090206004015460ff1615610e885760405162461bcd60e51b815260206004820152600e60248201526d1cd95c539bc81a185cc81d5cd95960921b6044820152606401610e02565b60005b8251811015610f72576000838281518110610ea857610ea8614760565b6020026020010151905060156000826001600160a01b03166001600160a01b0316815260200190815260200160002060050160019054906101000a900460ff16610f345760405162461bcd60e51b815260206004820152601960248201527f4e6f7420616c6c6f7720746f205374617274204c6971576172000000000000006044820152606401610e02565b610f3e85826131a2565b6000858152601a60205260409020610f5d90600290810190859061432e565b50508080610f6a9061478c565b915050610e8b565b505060016000555050565b601b5460008080808060308660148110610f9957610f99614760565b015494506014601b546001610fae91906147a5565b1015610fc657610fbf8660016147a5565b9350610fcb565b601393505b60308460148110610fde57610fde614760565b01549250601c8660148110610ff557610ff5614760565b015491506011549050909192939495565b6002600054036110285760405162461bcd60e51b8152600401610e0290614705565b60026000556049544211801561104d575060095460495461104991906147a5565b4211155b6110995760405162461bcd60e51b815260206004820152601760248201527f50726f7465637420526566756e64204475726174696f6e0000000000000000006044820152606401610e02565b336000818152601360205260409020546110e75760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a1bdd5d0811195c1bdcda5d608a1b6044820152606401610e02565b6001600160a01b03811660009081526013602052604090206003015460ff1615801561113457506001600160a01b038116600090815260136020526040902060030154610100900460ff16155b61116f5760405162461bcd60e51b815260206004820152600c60248201526b12185cc81499599d5b99195960a21b6044820152606401610e02565b6001600160a01b03811660009081526013602052604081205460649061119790604b906147be565b6111a191906147eb565b6001600160a01b038316600081815260136020526040808220600301805460ff19166001179055519293509183908381818185875af1925050503d8060008114611207576040519150601f19603f3d011682016040523d82523d6000602084013e61120c565b606091505b50509050806112545760405162461bcd60e51b81526020600482015260146024820152730aadcc2c4d8ca40e8de40e4cacceadcc8408aa8960631b6044820152606401610e02565b6001600160a01b0380841660009081526013602052604090206001015460025461128392169061dead9061342e565b6001600160a01b0383166000818152601360209081526040918290205482519384529083015281018390527f0a51d2fc760fc947eee0ddb113878c9774c389343c0b08aa0afe1caa731e7a179060600160405180910390a15050600160005550565b6001546001600160a01b0316331461130f5760405162461bcd60e51b8152600401610e02906147ff565b60095460495461131f91906147a5565b421161136d5760405162461bcd60e51b815260206004820152601760248201527f50726f74656374206c6f636b4c50204475726174696f6e0000000000000000006044820152606401610e02565b6001600160a01b038281166000908152601460205260408082205490516370a0823160e01b815230600482015292169182906370a0823190602401602060405180830381865afa1580156113c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e99190614834565b90508281111561141257604a54611412906001600160a01b03848116916101009004168561342e565b50505050565b600c54600d54600b546000908190819061143390859061484d565b915061143f82846147a5565b90509091929394565b60026000540361146a5760405162461bcd60e51b8152600401610e0290614705565b600260005561147833611e8c565b6114945760405162461bcd60e51b8152600401610e029061473c565b60005b81518110156115595760008282815181106114b4576114b4614760565b6020908102919091018101516001600160a01b0381166000908152601590925260409091206005015490915060ff166115225760405162461bcd60e51b815260206004820152601060248201526f2737ba102634b8abb0b9103a37b5b2b760811b6044820152606401610e02565b61154683838151811061153757611537614760565b60200260200101516001613491565b50806115518161478c565b915050611497565b50506001600055565b6002600054036115845760405162461bcd60e51b8152600401610e0290614705565b600260009081553380825260136020526040909120546115d85760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a1bdd5d0811195c1bdcda5d608a1b6044820152606401610e02565b604954421161161d5760405162461bcd60e51b8152602060048201526011602482015270135a5b9d08139bdd08119a5b9a5cda1959607a1b6044820152606401610e02565b6001600160a01b03811660009081526013602052604090206003015460ff16156116785760405162461bcd60e51b815260206004820152600c60248201526b12185cc81499599d5b99195960a21b6044820152606401610e02565b6001600160a01b03811660009081526013602052604090206002810154600190910154116116d75760405162461bcd60e51b815260206004820152600c60248201526b105b1b0814995b19585cd95960a21b6044820152606401610e02565b6001600160a01b03811660009081526013602052604081206002810154600190910154611704919061484d565b6001600160a01b0383166000908152601360205260408120600201805492935083929091906117349084906147a5565b9091555050600254611750906001600160a01b0316838361342e565b6001600160a01b03821660008181526013602052604090819020600301805461ff001916610100179055517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906117aa9084815260200190565b60405180910390a250506001600055565b6117c433611e8c565b6117e05760405162461bcd60e51b8152600401610e029061473c565b6000818152601a602052604090206004015460ff166118355760405162461bcd60e51b81526020600482015260116024820152702737ba103932b6b7bb32902634b8abb0b960791b6044820152606401610e02565b6000818152601a602052604090206001015460181161188a5760405162461bcd60e51b81526020600482015260116024820152702737ba103932b6b7bb32902634b8abb0b960791b6044820152606401610e02565b6000818152601a602052604081206001018054916118a78361478c565b90915550600090506118bb601860026147be565b6000838152601a60205260409020546118d491906147eb565b905060005b6002811015611a9d576000838152601a602052604081206002908101908390811061190657611906614760565b01546040805160028082526060820183526001600160a01b0390931693506000929091602083019080368337505060445482519293506001600160a01b03169183915060009061195857611958614760565b60200260200101906001600160a01b031690816001600160a01b031681525050818160018151811061198c5761198c614760565b6001600160a01b03928316602091820292909201015260465460405163b6f9de9560e01b815291169063b6f9de959086906119d290600090869030904290600401614860565b6000604051808303818588803b1580156119eb57600080fd5b505af11580156119ff573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600093506001600160a01b03861692506370a082319150602401602060405180830381865afa158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f9190614834565b9050611a876001600160a01b03841661dead8361342e565b5050508080611a959061478c565b9150506118d9565b505050565b6001546001600160a01b03163314611acc5760405162461bcd60e51b8152600401610e02906147ff565b600581905560408051338152602081018390527f81eb433ecff7578fea633a4eed84b25e60b72223d14b5296e94823b9e5571f5f91015b60405180910390a150565b6001600160a01b0380821660009081526014602090815260408083205481516318160ddd60e01b815291519394859485948594859490931692849284926318160ddd92600480820193918290030181865afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b959190614834565b9050600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc91906148e1565b5060445491935091506001600160a01b03808c16911611611c1d5781611c1f565b805b6001600160a01b038b16600090815260186020526040902054600554909a506001600160701b03919091169850606490611c59908261484d565b60646005548c611c6991906147be565b611c7391906147eb565b611c7d908c6147a5565b611c8791906147be565b611c9191906147eb565b9650878360646005548c611ca591906147be565b611caf91906147eb565b611cb9908c6147a5565b611cc391906147be565b611ccd91906147eb565b6040516370a0823160e01b81523060048201529096506001600160a01b038516906370a0823190602401602060405180830381865afa158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d389190614834565b94505050505091939590929450565b611d5033611e8c565b611d6c5760405162461bcd60e51b8152600401610e029061473c565b6049544211611dbd5760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420616c6c6f7720746f2064657374726f79204c656674546f6b656e00006044820152606401610e02565b600b54600d5410611e095760405162461bcd60e51b8152602060048201526016602482015275135a5b9d1959081b195cdcc81d1a185b88131a5b5a5d60521b6044820152606401610e02565b604a5460ff1615611e4e5760405162461bcd60e51b815260206004820152600f60248201526e416c72656164792044657374726f7960881b6044820152606401610e02565b6000600d54600b54611e60919061484d565b600254909150611e7c906001600160a01b031661dead8361342e565b50604a805460ff19166001179055565b6001600160a01b031660009081526012602052604090205460ff1690565b6001546001600160a01b03163314611ed45760405162461bcd60e51b8152600401610e02906147ff565b6001546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180546001600160a01b0319169055565b6001600160a01b03811660009081526013602052604081206003015460ff1615611f4a57506000919050565b506001600160a01b031660009081526013602052604090206001015490565b6001546001600160a01b03163314611f935760405162461bcd60e51b8152600401610e02906147ff565b600954604954611fa391906147a5565b4211611ff15760405162461bcd60e51b815260206004820152601860248201527f50726f74656374206c6f636b455448204475726174696f6e00000000000000006044820152606401610e02565b604a5460405160009161010090046001600160a01b03169083908381818185875af1925050503d8060008114612043576040519150601f19603f3d011682016040523d82523d6000602084013e612048565b606091505b50509050806120a35760405162461bcd60e51b815260206004820152602160248201527f6c6f636b4c504164647220556e61626c6520746f2057697468647261772045546044820152600960fb1b6064820152608401610e02565b5050565b6001546001600160a01b031633146120d15760405162461bcd60e51b8152600401610e02906147ff565b601081905560408051338152602081018390527fa70cec5ab93bb60a6face5d07b91f1ffc5bdfd14803d27b1f5f5f0e9d36241109101611b03565b6040805160148082526102a082019092526000918291606091829190602082016102808036833750506040805160148082526102a082019092529294509050602082016102808036833701905050601b549091506000905b60148110156125a757601c816014811061218057612180614760565b015488111580156121ae5750601c816014811061219f5761219f614760565b01546121ab888a6147a5565b11155b1561223957808483815181106121c6576121c6614760565b602002602001018181525050809450868383815181106121e8576121e8614760565b6020908102919091010152816121fd8161478c565b925050670de0b6b3a76400006030826014811061221c5761221c614760565b015461222890896147be565b61223291906147eb565b95506125a7565b601c816014811061224c5761224c614760565b0154881115801561227a5750601c816014811061226b5761226b614760565b0154612277888a6147a5565b10155b15612595578084838151811061229257612292614760565b60200260200101818152505080945087601c82601481106122b5576122b5614760565b01546122c1919061484d565b8383815181106122d3576122d3614760565b602002602001018181525050670de0b6b3a7640000603082601481106122fb576122fb614760565b015489601c846014811061231157612311614760565b015461231d919061484d565b61232791906147be565b61233191906147eb565b61233b90876147a5565b9550816123478161478c565b9250506000601c826014811061235f5761235f614760565b0154905060006123708360016147a5565b90505b601481101561258e57601c816014811061238f5761238f614760565b015461239b8a8c6147a5565b1061248757808685815181106123b3576123b3614760565b60200260200101818152505080965081601c82601481106123d6576123d6614760565b01546123e2919061484d565b8585815181106123f4576123f4614760565b602002602001018181525050670de0b6b3a76400006030826014811061241c5761241c614760565b015483601c846014811061243257612432614760565b015461243e919061484d565b61244891906147be565b61245291906147eb565b61245c90896147a5565b9750601c816014811061247157612471614760565b015491508361247f8161478c565b94505061257c565b8086858151811061249a5761249a614760565b6020908102919091010152955085601c6124b560018361484d565b601481106124c5576124c5614760565b01546124d18a8c6147a5565b6124db919061484d565b8585815181106124ed576124ed614760565b602002602001018181525050670de0b6b3a76400006030826014811061251557612515614760565b0154601c61252460018561484d565b6014811061253457612534614760565b01546125408c8e6147a5565b61254a919061484d565b61255491906147be565b61255e91906147eb565b61256890896147a5565b9750836125748161478c565b94505061258e565b806125868161478c565b915050612373565b50506125a7565b8061259f8161478c565b915050612164565b50808352815292959194509250565b603081601481106125c657600080fd5b0154905081565b6001546001600160a01b031633146125f75760405162461bcd60e51b8152600401610e02906147ff565b604780546001600160a01b0319166001600160a01b0383169081179091556040805133815260208101929092527f6c8aa1451bb27118767004fb0f2f6ac5866736a3dc12d751a239043469e4cf319101611b03565b601c81601481106125c657600080fd5b6001600160a01b038116600090815260136020526040812060018101546002909101546049549192918290421161269b57506000915081905082612727565b6001600160a01b03851660009081526013602052604090206003015460ff16156126d057506000925082915081905080612727565b604954426fffffffffffffffffffffffffffffffff16106126f8576126f5828561484d565b92505b61270282846147a5565b841161270f576000612724565b8161271a848661484d565b612724919061484d565b90505b9193509193565b6002600054036127505760405162461bcd60e51b8152600401610e0290614705565b600260005561275e33611e8c565b61277a5760405162461bcd60e51b8152600401610e029061473c565b60005b818110156127c6576127b483838381811061279a5761279a614760565b90506020020160208101906127af91906144ca565b613a17565b806127be8161478c565b91505061277d565b5050600160005550565b6001546001600160a01b031633146127fa5760405162461bcd60e51b8152600401610e02906147ff565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915582519384529083015233917f8ff482920e9c46f3eaae463cb945cee6bf6ede646ff885e22885efa7c61cd1d3910160405180910390a25050565b6000600c54600d5461287191906147a5565b905090565b600061288133611e8c565b61289d5760405162461bcd60e51b8152600401610e029061473c565b824710156128ed5760405162461bcd60e51b815260206004820152601d60248201527f42616c616e6365206c657373207468616e206465626974206c6576656c0000006044820152606401610e02565b60105483600f546128fe91906147a5565b1115801561290e57506000601054115b61294e5760405162461bcd60e51b8152602060048201526011602482015270115e18d95959081919589a5d131a5b5a5d607a1b6044820152606401610e02565b6001600160a01b0385811660009081526018602090815260408083208790556019825280832080546001600160a01b031916948916949094179093556015905220600501805460ff19168315151790556129a785613be1565b60408051600280825260608201835234926000929190602083019080368337505060445482519293506001600160a01b0316918391506000906129ec576129ec614760565b60200260200101906001600160a01b031690816001600160a01b0316815250508681600181518110612a2057612a20614760565b6001600160a01b03928316602091820292909201015260465460405163b6f9de9560e01b815291169063b6f9de95908490612a669060009086908c904290600401614860565b6000604051808303818588803b158015612a7f57600080fd5b505af1158015612a93573d6000803e3d6000fd5b505050505084600f6000828254612aaa91906147a5565b90915550506001600160a01b038781166000818152601460209081526040918290205482518b86168152918201939093529190921691810182905260608101879052608081018490529093507ff1a35f5b0475d58d3efa229f8d7a18c81aa5b916585ab625274bacb363de7d249060a00160405180910390a15050949350505050565b600260005403612b4f5760405162461bcd60e51b8152600401610e0290614705565b60026000556049543490421115612b965760405162461bcd60e51b815260206004820152600b60248201526a11195c1bdcda5d08195b9960aa1b6044820152606401610e02565b600a54811015612bdd5760405162461bcd60e51b815260206004820152601260248201527113195cdcc81b5a5b94195c91195c1bdcda5d60721b6044820152606401610e02565b80600a5483612bec91906147be565b14612c395760405162461bcd60e51b815260206004820181905260248201527f446f6e61746520616d6f756e74206e6f7420657175616c20746f2076616c75656044820152606401610e02565b600a54612c469082614931565b15612c825760405162461bcd60e51b815260206004820152600c60248201526b416d6f756e742077726f6e6760a01b6044820152606401610e02565b600e5481601154612c9391906147a5565b1115612cd45760405162461bcd60e51b815260206004820152601060248201526f115e18d959590811551208131a5b5a5d60821b6044820152606401610e02565b600080612ce36011548461210c565b50509150915080601b8190555060003390508360116000828254612d0791906147a5565b90915550506001600160a01b03811660009081526013602052604081208054869290612d349084906147a5565b90915550506001600160a01b03811660009081526013602052604081206001018054859290612d649084906147a5565b9250508190555082600d6000828254612d7d91906147a5565b9091555050600354600090606490612d9590876147be565b612d9f91906147eb565b604754601154604051632b3773d760e11b815233600482015260248101919091529192506001600160a01b03169063566ee7ae9083906044016000604051808303818588803b158015612df157600080fd5b505af1158015612e05573d6000803e3d6000fd5b5050604754604080516326beb82160e01b815290516001600160a01b0390921694506326beb821935060048082019350602092918290030181865afa158015612e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e769190614834565b604955600654600454600091606491612e8f91906147a5565b612e9990886147be565b612ea391906147eb565b6016546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612ef5576040519150601f19603f3d011682016040523d82523d6000602084013e612efa565b606091505b5050905080612f4b5760405162461bcd60e51b815260206004820152601e60248201527f6d61726b65744d616b6572204661696c20746f20726566756e642045544800006044820152606401610e02565b6000606460075489612f5d91906147be565b612f6791906147eb565b6017546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612fb9576040519150601f19603f3d011682016040523d82523d6000602084013e612fbe565b606091505b505090508061300f5760405162461bcd60e51b815260206004820152601960248201527f696e76697465204661696c20746f20726566756e6420455448000000000000006044820152606401610e02565b600e546011540361301f57426049555b601b54601154604080518c8152602081019390935282015233907f94dfa012dbd3d53b6c092bf771f1f8891ba0605b776a2a861b84099e1b61d3e99060600160405180910390a2505060016000555050505050505050565b6002600054036130995760405162461bcd60e51b8152600401610e0290614705565b60026000556130a733611e8c565b6130c35760405162461bcd60e51b8152600401610e029061473c565b60005b81518110156115595760008282815181106130e3576130e3614760565b6020908102919091018101516001600160a01b0381166000908152601590925260409091206005015490915060ff161561314e5760405162461bcd60e51b815260206004820152600c60248201526b2634b8abb0b9103a37b5b2b760a11b6044820152606401610e02565b613159816000613491565b50806131648161478c565b9150506130c6565b6001546001600160a01b031633146131965760405162461bcd60e51b8152600401610e02906147ff565b61319f81613ef6565b50565b6001600160a01b038181166000908152601460205260408082205490516370a0823160e01b815230600482015292169182906370a0823190602401602060405180830381865afa1580156131fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061321e9190614834565b90506000606461322f600a846147be565b61323991906147eb565b604654909150613256906001600160a01b03858116911683613fb7565b604654604051629d473b60e21b81526000916001600160a01b0316906302751cec9061329090889086908690819030904290600401614945565b60408051808303816000875af11580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d29190614980565b6001600160a01b03871660009081526015602052604081206004018054929450859350916133019084906147a5565b90915550506040516370a0823160e01b81523060048201526000906001600160a01b038716906370a0823190602401602060405180830381865afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133719190614834565b90506133896001600160a01b03871661dead8361342e565b6000878152601a6020526040812080548492906133a79084906147a5565b90915550506000878152601a6020908152604091829020600401805460ff1916600117905581518981526001600160a01b038981169282019290925290871681830152606081018590526080810184905290517fa7b5a7547555e504fc5f79823a1a5f40bc542e88fbdd247c75d5aa16c354e1149160a0908290030190a150505050505050565b6040516001600160a01b038316602482015260448101829052611a9d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526140cc565b6001600160a01b038281166000908152601460205260408082205490516370a0823160e01b815230600482015292169182906370a0823190602401602060405180830381865afa1580156134e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350d9190614834565b6001600160a01b038516600090815260156020526040902060050154909150610100900460ff16156135705760405162461bcd60e51b815260206004820152600c60248201526b29ba30b93a102634b8abb0b960a11b6044820152606401610e02565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d49190614834565b9050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b91906148e1565b5060445491935091506000906001600160a01b03808a1691161161365f5782613661565b815b6001600160a01b0389166000908152601860205260408120546005546001600160701b0393909316935091606490613699908261484d565b6064600554856136a991906147be565b6136b391906147eb565b6136bd90856147a5565b6136c791906147be565b6136d191906147eb565b6008546001600160a01b038c166000908152601560205260409020600301549192506136fc916147a5565b42101561374b5760405162461bcd60e51b815260206004820152601e60248201527f52656d6f76654c697175696469747920636f6e646974696f6e206661696c00006044820152606401610e02565b6000838760646005548661375f91906147be565b61376991906147eb565b61377390866147a5565b61377d91906147be565b61378791906147eb565b905087811115613798575060009050865b6046546137b2906001600160a01b038b8116911683613fb7565b604654604051629d473b60e21b81526000916001600160a01b0316906302751cec906137ec908f9086908690899030904290600401614945565b60408051808303816000875af115801561380a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382e9190614980565b6001600160a01b038e16600090815260156020526040812060040180549294508593509161385d9084906147a5565b90915550506001600160a01b038c1660008181526015602052604090819020600501805461ff001916610100179055516370a0823160e01b81523060048201526139009161dead916370a0823190602401602060405180830381865afa1580156138cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ef9190614834565b6001600160a01b038f16919061342e565b8a6139af576001600160a01b038c811660009081526015602052604090819020600501805462ff0000191662010000179055516370a0823160e01b8152306004820152908b16906370a0823190602401602060405180830381865afa15801561396d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139919190614834565b985088156139af576139af6001600160a01b038b1661dead8b61342e565b604080516001600160a01b03808f1682528c166020820152908101839052606081018290528b151560808201527f7632fadb27e92c768fc7195eb0a1ee6337acb0446dcc2c1a1f3ba57d71ef8ac69060a00160405180910390a1505050505050505050505050565b6001600160a01b038116600090815260156020526040902060050154610100900460ff16613a875760405162461bcd60e51b815260206004820152601860248201527f72656d6f7665204c697157617220466c61672077726f6e6700000000000000006044820152606401610e02565b6001600160a01b03811660009081526015602052604090206005015460ff16613ae55760405162461bcd60e51b815260206004820152601060248201526f2737ba102634b8abb0b9103a37b5b2b760811b6044820152606401610e02565b6001600160a01b038181166000908152601560209081526040808320600501805462ffff0019166201000017905560149091528082205490516370a0823160e01b815230600482015292169182906370a0823190602401602060405180830381865afa158015613b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7d9190614834565b90508015613b9b57613b9b6001600160a01b03831661dead8361342e565b604080513381526001600160a01b03851660208201527f9186d1756a49f3b7102ee7c9a0d0be004d229e2eec7d1e789b41d4f935a8f3cf910160405180910390a1505050565b6001600160a01b038181166000908152601460205260409020541615613c345760405162461bcd60e51b8152602060048201526008602482015267131448185919195960c21b6044820152606401610e02565b6040516370a0823160e01b815230600482015247906000906001600160a01b038416906370a0823190602401602060405180830381865afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190614834565b6001600160a01b03841660009081526018602052604090205490915080831015613d0d5760405162461bcd60e51b815260206004820152601960248201527f416d6f756e74206578636565642063757272656e7420455448000000000000006044820152606401610e02565b6046544790613d29906001600160a01b03878116911685613fb7565b60465460405163f305d71960e01b81526000916001600160a01b03169063f305d719908590613d66908a9089908790819030904290600401614945565b60606040518083038185885af1158015613d84573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613da991906149a4565b6045546044805460405163e6a4390560e01b81526001600160a01b038d81166004830152918216602482015293965060009550909116925063e6a439059101602060405180830381865afa158015613e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2991906149d2565b6001600160a01b03888116600090815260146020908152604080832080546001600160a01b031916948616949094179093556015905220600201839055905047613e73818561484d565b6001600160a01b03898116600081815260156020908152604091829020948555600185018b9055426003909501949094558051918252918516928101929092528101879052606081018690527fd2491a9b4fe81a7cd4511e8b7b7743951b061dad5bed7da8a7795b080ee08c7e9060800160405180910390a15050505050505050565b6001600160a01b038116613f5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e02565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b8015806140315750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561400b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402f9190614834565b155b61409c5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610e02565b6040516001600160a01b038316602482015260448101829052611a9d90849063095ea7b360e01b9060640161345a565b6000614121826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661419e9092919063ffffffff16565b805190915015611a9d578080602001905181019061413f91906149ef565b611a9d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e02565b60606141ad84846000856141b5565b949350505050565b6060824710156142165760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e02565b600080866001600160a01b031685876040516142329190614a30565b60006040518083038185875af1925050503d806000811461426f576040519150601f19603f3d011682016040523d82523d6000602084013e614274565b606091505b509150915061428587838387614290565b979650505050505050565b606083156142ff5782516000036142f8576001600160a01b0385163b6142f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e02565b50816141ad565b6141ad83838151156143145781518083602001fd5b8060405162461bcd60e51b8152600401610e029190614a4c565b8260028101928215614374579160200282015b828111156143745781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614341565b50614380929150614384565b5090565b5b808211156143805760008155600101614385565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461319f57600080fd5b80356143cf816143af565b919050565b600082601f8301126143e557600080fd5b8135602067ffffffffffffffff8083111561440257614402614399565b8260051b604051601f19603f8301168101818110848211171561442757614427614399565b60405293845285810183019383810192508785111561444557600080fd5b83870191505b848210156142855761445c826143c4565b8352918301919083019061444b565b60008060006080848603121561448057600080fd5b83359250602084013567ffffffffffffffff81111561449e57600080fd5b6144aa868287016143d4565b925050846080850111156144bd57600080fd5b6040840190509250925092565b6000602082840312156144dc57600080fd5b81356144e7816143af565b9392505050565b6000806040838503121561450157600080fd5b823561450c816143af565b946020939093013593505050565b60006020828403121561452c57600080fd5b813567ffffffffffffffff81111561454357600080fd5b6141ad848285016143d4565b60006020828403121561456157600080fd5b5035919050565b6000806040838503121561457b57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156145ba5781518752958201959082019060010161459e565b509495945050505050565b8481528360208201526080604082015260006145e4608083018561458a565b8281036060840152614285818561458a565b6000806020838503121561460957600080fd5b823567ffffffffffffffff8082111561462157600080fd5b818501915085601f83011261463557600080fd5b81358181111561464457600080fd5b8660208260051b850101111561465957600080fd5b60209290920196919550909350505050565b801515811461319f57600080fd5b6000806040838503121561468c57600080fd5b8235614697816143af565b915060208301356146a78161466b565b809150509250929050565b600080600080608085870312156146c857600080fd5b84356146d3816143af565b935060208501356146e3816143af565b92506040850135915060608501356146fa8161466b565b939692955090935050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252600a90820152692737ba1035b2b2b832b960b11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161479e5761479e614776565b5060010190565b808201808211156147b8576147b8614776565b92915050565b80820281158282048414176147b8576147b8614776565b634e487b7160e01b600052601260045260246000fd5b6000826147fa576147fa6147d5565b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561484657600080fd5b5051919050565b818103818111156147b8576147b8614776565b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156148aa5784516001600160a01b031683529383019391830191600101614885565b50506001600160a01b039690961660408501525050506060015292915050565b80516001600160701b03811681146143cf57600080fd5b6000806000606084860312156148f657600080fd5b6148ff846148ca565b925061490d602085016148ca565b9150604084015163ffffffff8116811461492657600080fd5b809150509250925092565b600082614940576149406147d5565b500690565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806040838503121561499357600080fd5b505080516020909101519092909150565b6000806000606084860312156149b957600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156149e457600080fd5b81516144e7816143af565b600060208284031215614a0157600080fd5b81516144e78161466b565b60005b83811015614a27578181015183820152602001614a0f565b50506000910152565b60008251614a42818460208701614a0c565b9190910192915050565b6020815260008251806020840152614a6b816040850160208701614a0c565b601f01601f1916919091016040019291505056fea2646970667358221220bbdec15596cf3b219624098df4059c58ad3dbf0ed2d25f35a4e0c094f0a06fe564736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000008f8eb567a9f875180eed690dd231fd9619bb09a7000000000000000000000000edffbd7b6f6060e29b262681e9ff52d8772258c90000000000000000000000005843988dfa70805ea740c4af464468c05d73a869
-----Decoded View---------------
Arg [0] : _v2Factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [1] : _v2Router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : _bonusPool (address): 0x8f8eb567a9f875180eED690Dd231fd9619bb09A7
Arg [3] : _rewardAddr (address): 0xedFfBd7B6F6060E29b262681E9ff52d8772258C9
Arg [4] : _JUMPToken (address): 0x5843988DFa70805Ea740c4af464468C05d73a869
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 0000000000000000000000008f8eb567a9f875180eed690dd231fd9619bb09a7
Arg [3] : 000000000000000000000000edffbd7b6f6060e29b262681e9ff52d8772258c9
Arg [4] : 0000000000000000000000005843988dfa70805ea740c4af464468c05d73a869
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,423.22 | 309.7595 | $1,060,375.57 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.