Overview
ETH Balance
0.096 ETH
Eth Value
$255.53 (@ $2,661.81/ETH)More Info
Private Name Tags
ContractCreator
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Presale | 17380295 | 506 days ago | IN | 0 ETH | 0.19581622 | ||||
Create Presale | 17374083 | 506 days ago | IN | 0 ETH | 0.15866462 | ||||
Withdraw BN Bs | 17281061 | 520 days ago | IN | 0 ETH | 0.00397235 | ||||
Update Fees | 17281057 | 520 days ago | IN | 0 ETH | 0.00152168 | ||||
Create Presale | 17280735 | 520 days ago | IN | 0.2 ETH | 0.18311417 | ||||
Create Presale | 17268533 | 521 days ago | IN | 0.2 ETH | 0.1567679 | ||||
Update Fees | 17243433 | 525 days ago | IN | 0 ETH | 0.00159876 | ||||
Transfer Ownersh... | 15201216 | 817 days ago | IN | 0 ETH | 0.00084729 | ||||
0x60806040 | 15201156 | 817 days ago | IN | 0 ETH | 0.12437572 |
Latest 15 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17380295 | 506 days ago | Contract Creation | 0 ETH | |||
17374083 | 506 days ago | Contract Creation | 0 ETH | |||
17330105 | 513 days ago | 0.0125 ETH | ||||
17330103 | 513 days ago | 0.0125 ETH | ||||
17327007 | 513 days ago | 0.0125 ETH | ||||
17326900 | 513 days ago | 0.0035 ETH | ||||
17326692 | 513 days ago | 0.005 ETH | ||||
17322596 | 514 days ago | 0.0125 ETH | ||||
17321647 | 514 days ago | 0.0125 ETH | ||||
17321106 | 514 days ago | 0.0125 ETH | ||||
17320885 | 514 days ago | 0.0125 ETH | ||||
17281061 | 520 days ago | 0.04 ETH | ||||
17281061 | 520 days ago | 0.36 ETH | ||||
17280735 | 520 days ago | Contract Creation | 0 ETH | |||
17268533 | 521 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
LaunchpadV2
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 1 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.7; import "./Presale.sol"; import "./LaunchPadLib.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; // import "hardhat/console.sol"; contract LaunchpadV2 is Ownable { using LaunchPadLib for *; uint public presaleCount = 0; uint public upfrontfee = 2 ether; uint8 public salesFeeInPercent = 2; address public uniswapV2Router02 = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Mainnet router // address public uniswapV2Router02 = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Testnet router address public teamAddr = 0xaEEE930D7Dc148862051CC0F43114FedAbAF34BC; address public devAddr = 0x2a1706e0B87373445c500621a47cb26484D1DdfF; ////////////////////////////// MAPPINGS /////////////////////////////////// mapping(uint => address) public presaleRecordByID; mapping(address => address[]) private presaleRecordByToken; event PresaleCreated(uint id, address presaleAddress); ////////////////////////////// FUNCTIONS /////////////////////////////////// constructor(address _uniswapV2Router02, address _teamAddr, address _devAddr){ uniswapV2Router02 = _uniswapV2Router02; teamAddr = _teamAddr; devAddr = _devAddr; } function createPresale( LaunchPadLib.TokenInfo memory _tokenInfo, LaunchPadLib.ParticipationCriteria memory _participationCriteria, LaunchPadLib.PresaleTimes memory _presaleTimes, LaunchPadLib.ContributorsVesting memory _contributorsVesting, LaunchPadLib.TeamVesting memory _teamVesting, LaunchPadLib.GeneralInfo memory _generalInfo ) public payable { if(_teamVesting.isEnabled){ require(_teamVesting.vestingTokens > 0, "Vesting tokens should be more than zero"); } require( _participationCriteria.liquidity >= 20 && _participationCriteria.liquidity <= 95 && _presaleTimes.startedAt > block.timestamp && _presaleTimes.expiredAt > _presaleTimes.startedAt, "Liquidity or Times are invalid" ); require( _participationCriteria.softCap > 0 && _participationCriteria.softCap < _participationCriteria.hardCap && _participationCriteria.softCap >= _participationCriteria.hardCap/2 && _participationCriteria.minContribution > 0 && _participationCriteria.minContribution < _participationCriteria.maxContribution, "Invalid hardcap/softcap or minContribution/maxContribution" ); if(msg.sender != owner()) { require( msg.value >= upfrontfee, "Insufficient funds to start"); } presaleCount++; LaunchPadLib.PresaleInfo memory _presaleInfo = LaunchPadLib.PresaleInfo(presaleCount, msg.sender, LaunchPadLib.PreSaleStatus.PENDING); Presale _presale = new Presale ( _tokenInfo, _presaleInfo, _participationCriteria, _presaleTimes, _contributorsVesting, _teamVesting, _generalInfo, salesFeeInPercent, uniswapV2Router02 ); uint tokensForSale = (_participationCriteria.hardCap * _participationCriteria.presaleRate * 10**_tokenInfo.decimals) / 1 ether ; uint tokensForLP = (tokensForSale * _participationCriteria.liquidity) / 100; uint tokensForVesting = _teamVesting.vestingTokens * 10**_tokenInfo.decimals; uint totalTokens = tokensForSale + tokensForLP + tokensForVesting; IERC20(_tokenInfo.tokenAddress).transferFrom(msg.sender, address(_presale), totalTokens); presaleRecordByToken[_tokenInfo.tokenAddress].push(address(_presale)); presaleRecordByID[presaleCount] = address(_presale); emit PresaleCreated(presaleCount, address(_presale)); } function getPresaleRecordsByToken(address _address) public view returns(address[] memory) { return presaleRecordByToken[_address]; } function updateFees(uint _upfrontFee, uint8 _salesFeeInPercent) public onlyOwner { upfrontfee = _upfrontFee; salesFeeInPercent = _salesFeeInPercent; } function withdrawBNBs() public onlyOwner { uint balance = address(this).balance; require(balance > 0 , "nothing to withdraw"); uint teamShare = (balance * 90) / 100; (bool res1,) = payable(teamAddr).call{value: teamShare}(""); require(res1, "cannot send team Share"); (bool res2,) = payable(devAddr).call{value: balance - teamShare}(""); require(res2, "cannot send devTeamShare"); } function updateTeamAddress(address _address) public onlyOwner { teamAddr = _address; } function updateDevAddress(address _address) public { require(devAddr == address(msg.sender), "Only dev is allowed"); devAddr = _address; } receive() external payable {} }
// // SPDX-License-Identifier: MIT pragma solidity 0.8.7; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; // import "hardhat/console.sol"; import "./LaunchPadLib.sol"; contract Presale { using EnumerableSet for EnumerableSet.AddressSet; EnumerableSet.AddressSet private whiteListedUsers; address immutable public master; uint8 public salesFeeInPercent; IUniswapV2Router02 public uniswapV2Router02; LaunchPadLib.TokenInfo public tokenInfo; LaunchPadLib.PresaleInfo public presaleInfo; LaunchPadLib.ParticipationCriteria public participationCriteria; LaunchPadLib.PresaleTimes public presaleTimes; LaunchPadLib.PresalectCounts public presaleCounts; LaunchPadLib.GeneralInfo public generalInfo; LaunchPadLib.ContributorsVesting public contributorsVesting; LaunchPadLib.TeamVesting public teamVesting; mapping(address => Participant) public participant; struct Participant { uint256 value; uint256 tokens; uint256 unclaimed; } mapping (uint => ContributorsVestingRecord) public contributorVestingRecord; uint public contributorCycles = 0; uint public finalizingTime; enum ReleaseStatus {UNRELEASED,RELEASED} mapping(uint => mapping(address => ReleaseStatus)) internal releaseStatus; struct ContributorsVestingRecord { uint cycle; uint releaseTime; uint tokensPC; uint percentageToRelease; } mapping (uint => TeamVestingRecord) public teamVestingRecord; uint public temaVestingCycles = 0; struct TeamVestingRecord { uint cycle; uint releaseTime; uint tokensPC; uint percentageToRelease; ReleaseStatus releaseStatus; } event ContributionsAdded(address contributor, uint amount, uint requestedTokens); event ContributionsRemoved(address contributor, uint amount); event Claimed(address contributor, uint value, uint tokens); event Finalized(uint8 status, uint finalizedTime); event SaleTypeChanged(uint8 _type, address _address, uint minimumTokens); modifier isPresaleActive() { require (block.timestamp >= presaleTimes.startedAt && block.timestamp < presaleTimes.expiredAt, "Presale is not active"); if(presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.PENDING){ presaleInfo.preSaleStatus = LaunchPadLib.PreSaleStatus.INPROGRESS; emit Finalized(uint8(LaunchPadLib.PreSaleStatus.INPROGRESS), 0); } require(presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.INPROGRESS, "Presale is not in progress"); _; } modifier onlyPresaleOwner() { require(presaleInfo.presaleOwner == msg.sender, "Ownable: caller is not the owner of this presale"); _; } modifier isPresaleEnded(){ require ( presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.SUCCEED || presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.FAILED || presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.CANCELED, "Presale is not concluded yet" ); _; } modifier isPresaleNotEnded() { require( presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.INPROGRESS || presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.PENDING, "Presale is not in progress" ); _; } constructor ( LaunchPadLib.TokenInfo memory _tokenInfo, LaunchPadLib.PresaleInfo memory _presaleInfo, LaunchPadLib.ParticipationCriteria memory _participationCriteria, LaunchPadLib.PresaleTimes memory _presaleTimes, LaunchPadLib.ContributorsVesting memory _contributorsVesting, LaunchPadLib.TeamVesting memory _teamVesting, LaunchPadLib.GeneralInfo memory _generalInfo, uint8 _salesFeeInPercent, address _uniswapV2Router02 ){ master = msg.sender; tokenInfo = _tokenInfo; presaleInfo = _presaleInfo; participationCriteria = _participationCriteria; presaleTimes = _presaleTimes; contributorsVesting = _contributorsVesting; teamVesting = _teamVesting; generalInfo = _generalInfo; salesFeeInPercent = _salesFeeInPercent; uniswapV2Router02 = IUniswapV2Router02(_uniswapV2Router02); if(_contributorsVesting.isEnabled){ findContributorsVesting(_contributorsVesting); } if(_teamVesting.isEnabled){ findTeamVesting(_teamVesting); } } function findContributorsVesting(LaunchPadLib.ContributorsVesting memory _contributorsVesting) internal { uint totalTokensPC = 100; uint initialReleasePC = _contributorsVesting.firstReleasePC; contributorVestingRecord[0] = ContributorsVestingRecord( 0, 0, totalTokensPC, initialReleasePC ); if(initialReleasePC < totalTokensPC){ uint remaingTokenPC = totalTokensPC - initialReleasePC; contributorCycles = totalTokensPC / _contributorsVesting.eachCyclePC; uint assignedTokensPC; for(uint i = 1; i <= contributorCycles; i++ ){ uint cycleReleaseTime = _contributorsVesting.eachCycleDuration * ( i * 1 minutes ); contributorVestingRecord[i] = ContributorsVestingRecord( i, cycleReleaseTime, remaingTokenPC, _contributorsVesting.eachCyclePC ); assignedTokensPC += _contributorsVesting.eachCyclePC; } // uint difference = totalTokensPC - assignedTokensPC; contributorVestingRecord[contributorCycles].percentageToRelease += totalTokensPC - assignedTokensPC; } } function findTeamVesting(LaunchPadLib.TeamVesting memory _teamVesting) internal { uint totalLockedTokensPC = 100; uint initialReleasePC = _teamVesting.firstReleasePC; uint initialReleaseTime = _teamVesting.firstReleaseDelay * 1 minutes; teamVestingRecord[0] = TeamVestingRecord( 0, initialReleaseTime, totalLockedTokensPC, initialReleasePC, ReleaseStatus.UNRELEASED ); if(initialReleasePC < totalLockedTokensPC){ uint remaingTokenPC = totalLockedTokensPC - initialReleasePC; temaVestingCycles = totalLockedTokensPC / _teamVesting.eachCyclePC; uint assignedTokensPC; for(uint i = 1; i <= temaVestingCycles; i++ ){ uint cycleReleaseTime = initialReleaseTime + _teamVesting.eachCycleDuration * ( i * 1 minutes ); teamVestingRecord[i] = TeamVestingRecord( i, cycleReleaseTime, remaingTokenPC, _teamVesting.eachCyclePC, ReleaseStatus.UNRELEASED ); assignedTokensPC += _teamVesting.eachCyclePC; } // uint difference = totalLockedTokensPC - assignedTokensPC; teamVestingRecord[temaVestingCycles].percentageToRelease += totalLockedTokensPC - assignedTokensPC; } } function contributeToSale() public payable isPresaleActive { uint allowed = participationCriteria.hardCap - presaleCounts.accumulatedBalance; Participant memory currentParticipant = participant[msg.sender]; uint preveousContribution = currentParticipant.value; uint contribution = msg.value; require(contribution <= allowed && contribution + preveousContribution <= participationCriteria.maxContribution , "contribution is not valid"); if(currentParticipant.tokens == 0) { require(contribution >= (participationCriteria.minContribution), "too low contribution"); presaleCounts.contributors++; } if(participationCriteria.presaleType == LaunchPadLib.PresaleType.WHITELISTED){ require( isWhiteListed(msg.sender), "Only whitelisted users are allowed to participate"); } if(participationCriteria.presaleType == LaunchPadLib.PresaleType.TOKENHOLDERS){ require(IERC20(participationCriteria.criteriaToken).balanceOf(msg.sender) >= participationCriteria.minCriteriaTokens, "You don't hold enough criteria tokens"); } uint requestedTokens = (contribution * participationCriteria.presaleRate * 10**tokenInfo.decimals) / 1 ether; participant[msg.sender].tokens += requestedTokens; participant[msg.sender].unclaimed += requestedTokens; participant[msg.sender].value += contribution; presaleCounts.accumulatedBalance += contribution; emit ContributionsAdded(msg.sender, contribution, requestedTokens); } function emergencyWithdraw() public { require(presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.INPROGRESS, "Presale is not in progress"); Participant memory currentParticipant = participant[msg.sender]; require(currentParticipant.value > 0, "Nothing to withdraw"); uint valueToReturn = (currentParticipant.value * 95) / 100; participant[msg.sender].value = 0; participant[msg.sender].tokens = 0; participant[msg.sender].unclaimed = 0; presaleCounts.accumulatedBalance -= currentParticipant.value; // presaleCounts.remainingTokensForSale = presaleCounts.remainingTokensForSale + currentParticipant.tokens; presaleCounts.contributors--; (bool res1,) = payable(msg.sender).call{value: valueToReturn}(""); require(res1, "cannot refund to contributors"); (bool res2,) = payable(master).call{value: currentParticipant.value - valueToReturn}(""); require(res2, "cannot send devTeamShare"); emit ContributionsRemoved(msg.sender, currentParticipant.value); } function finalizePresale() public onlyPresaleOwner isPresaleNotEnded { require ( block.timestamp > presaleTimes.expiredAt || presaleCounts.accumulatedBalance >= participationCriteria.hardCap, "Presale is not over yet" ); if( presaleCounts.accumulatedBalance >= participationCriteria.softCap ){ uint256 totalTokensSold = (presaleCounts.accumulatedBalance * participationCriteria.presaleRate * 10**tokenInfo.decimals) / 1 ether ; uint256 tokensToAddLiquidity = (totalTokensSold * participationCriteria.liquidity) / 100; uint256 revenueFromPresale = presaleCounts.accumulatedBalance; uint256 poolShareBNB = (revenueFromPresale * participationCriteria.liquidity) / 100; uint256 devTeamShareBNB = (revenueFromPresale * salesFeeInPercent) / 100; uint256 ownersShareBNB = revenueFromPresale - (poolShareBNB + devTeamShareBNB); (bool res1,) = payable(presaleInfo.presaleOwner).call{value: ownersShareBNB}(""); require(res1, "cannot send devTeamShare"); (bool res2,) = payable(master).call{value: devTeamShareBNB}(""); require(res2, "cannot send devTeamShare"); IERC20(tokenInfo.tokenAddress).approve(address(uniswapV2Router02), tokensToAddLiquidity); uniswapV2Router02.addLiquidityETH{value : poolShareBNB}( tokenInfo.tokenAddress, tokensToAddLiquidity, 0, 0, address(this), block.timestamp + 60 ); presaleInfo.preSaleStatus = LaunchPadLib.PreSaleStatus.SUCCEED; uint extraTokens = IERC20(tokenInfo.tokenAddress).balanceOf(address(this)) - totalTokensSold - teamVesting.vestingTokens*10**tokenInfo.decimals; withdrawExtraTokens(extraTokens); finalizingTime = block.timestamp; emit Finalized(uint8(LaunchPadLib.PreSaleStatus.SUCCEED), finalizingTime); } else { presaleInfo.preSaleStatus = LaunchPadLib.PreSaleStatus.FAILED; uint extraTokens = IERC20(tokenInfo.tokenAddress).balanceOf(address(this)); withdrawExtraTokens(extraTokens); emit Finalized(uint8(LaunchPadLib.PreSaleStatus.FAILED), 0); } } function withdrawExtraTokens(uint tokensToReturn) internal { if(tokensToReturn > 0){ if(presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.FAILED || presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.CANCELED){ bool tokenDistribution = IERC20(tokenInfo.tokenAddress).transfer(presaleInfo.presaleOwner, tokensToReturn); assert( tokenDistribution); } else if(participationCriteria.refundType == LaunchPadLib.RefundType.WITHDRAW ){ bool tokenDistribution = IERC20(tokenInfo.tokenAddress).transfer(presaleInfo.presaleOwner, tokensToReturn); assert( tokenDistribution); } else{ bool tokenDistribution = IERC20(tokenInfo.tokenAddress).transfer(0x000000000000000000000000000000000000dEaD , tokensToReturn); assert( tokenDistribution ); } } } function claimTokensOrARefund() public isPresaleEnded { Participant memory _participant = participant[msg.sender]; require(_participant.unclaimed > 0, "Nothing to claim"); if (presaleInfo.preSaleStatus == LaunchPadLib.PreSaleStatus.SUCCEED) { if(!contributorsVesting.isEnabled){ // participant[msg.sender].tokens = 0; // participant[msg.sender].value = 0; participant[msg.sender].unclaimed = 0; presaleCounts.claimsCount++; require(_participant.tokens > 0, "No tokens to claim"); bool tokenDistribution = IERC20(tokenInfo.tokenAddress).transfer(msg.sender, _participant.tokens); require(tokenDistribution, "Unable to transfer tokens to the participant"); emit Claimed(msg.sender, 0, _participant.tokens); } else { uint tokensLocked = _participant.tokens; uint tokensToRelease; for(uint i = 0; i<= contributorCycles; i++){ if( block.timestamp >= (finalizingTime + contributorVestingRecord[i].releaseTime) && releaseStatus[finalizingTime + contributorVestingRecord[i].releaseTime][msg.sender] == ReleaseStatus.UNRELEASED ){ tokensToRelease += (tokensLocked * contributorVestingRecord[i].tokensPC * contributorVestingRecord[i].percentageToRelease) / 10000; releaseStatus[finalizingTime + contributorVestingRecord[i].releaseTime][msg.sender] = ReleaseStatus.RELEASED; if(i == contributorCycles) { // participant[msg.sender].value = 0; // participant[msg.sender].tokens = 0; presaleCounts.claimsCount++; } } } require(tokensToRelease > 0, "Nothing to unlock"); participant[msg.sender].unclaimed -= tokensToRelease; require( IERC20(tokenInfo.tokenAddress).transfer(msg.sender, tokensToRelease), "Unable to transfer presale tokens to the presale owner" ); emit Claimed(msg.sender, 0, tokensToRelease); } } else { participant[msg.sender].tokens = 0; participant[msg.sender].value = 0; participant[msg.sender].unclaimed = 0; presaleCounts.claimsCount++; require(_participant.value > 0, "No amount to refund"); bool refund = payable(msg.sender).send(_participant.value); require(refund, "Unable to refund amount to the participant"); emit Claimed(msg.sender, _participant.value, 0); } } function chageSaleType(LaunchPadLib.PresaleType _type, address _address, uint minimumTokens) public onlyPresaleOwner { if(_type == LaunchPadLib.PresaleType.TOKENHOLDERS) { participationCriteria.presaleType = _type; participationCriteria.criteriaToken = _address; participationCriteria.minCriteriaTokens = minimumTokens; } else { participationCriteria.presaleType = _type; } emit SaleTypeChanged(uint8(_type), _address, minimumTokens); } function unlockTokens() public onlyPresaleOwner isPresaleEnded { // require(teamVesting.isEnabled, "No tokens were locked"); uint tokensLocked = teamVesting.vestingTokens * 10**tokenInfo.decimals; uint tokensToRelease; for(uint i = 0; i<= temaVestingCycles; i++){ if(block.timestamp >= finalizingTime + teamVestingRecord[i].releaseTime && teamVestingRecord[i].releaseStatus == ReleaseStatus.UNRELEASED){ tokensToRelease += (tokensLocked * teamVestingRecord[i].tokensPC * teamVestingRecord[i].percentageToRelease) / 10000; teamVestingRecord[i].releaseStatus = ReleaseStatus.RELEASED; } } require(tokensToRelease > 0, "Nothing to unlock"); IERC20(tokenInfo.tokenAddress).transfer(msg.sender, tokensToRelease); // require( // IERC20(tokenInfo.tokenAddress).transfer(msg.sender, tokensToRelease), // "Unable to transfer presale tokens to the presale owner" // ); // emit TokensUnLocked(tokensToRelease); } function unlockLPTokens() public onlyPresaleOwner isPresaleEnded { address factory = IUniswapV2Router02(uniswapV2Router02).factory(); address WBNBAddr = IUniswapV2Router02(uniswapV2Router02).WETH(); address pairAddress = IUniswapV2Factory(factory).getPair(tokenInfo.tokenAddress, WBNBAddr); uint availableLP = IERC20(pairAddress).balanceOf(address(this)); require(availableLP > 0, "Nothing to claim"); require(block.timestamp >= finalizingTime + presaleTimes.lpLockupDuration, "Not unlocked yet"); IERC20(pairAddress).transfer(presaleInfo.presaleOwner, availableLP); // bool res = IERC20(pairAddress).transfer(presaleInfo.presaleOwner, availableLP); // require(res, "Unable to transfer presale tokens to the presale owner"); // emit LPTokensUnLocked(availableLP); } function isWhiteListed(address user) view public returns (bool){ return EnumerableSet.contains(whiteListedUsers, user); } function whiteListUsers(address[] memory _addresses) public onlyPresaleOwner { for(uint i=0; i < _addresses.length; i++){ EnumerableSet.add(whiteListedUsers, _addresses[i]); } } function removeWhiteListUsers(address[] memory _addresses) public onlyPresaleOwner { for(uint i=0; i < _addresses.length; i++){ EnumerableSet.remove(whiteListedUsers, _addresses[i]); } } function getWhiteListUsers() public view returns (address[] memory) { return EnumerableSet.values(whiteListedUsers); } function cancelSale() public onlyPresaleOwner isPresaleNotEnded { presaleInfo.preSaleStatus = LaunchPadLib.PreSaleStatus.CANCELED; uint extraTokens = IERC20(tokenInfo.tokenAddress).balanceOf(address(this)); withdrawExtraTokens(extraTokens); emit Finalized(uint8(LaunchPadLib.PreSaleStatus.CANCELED), 0); } function getContributorReleaseStatus(uint _time, address _address) public view returns(ReleaseStatus){ return releaseStatus[_time][_address]; } function updateGeneralInfo(LaunchPadLib.GeneralInfo memory _generalInfo) public onlyPresaleOwner { generalInfo = _generalInfo; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.7; library LaunchPadLib { enum PresaleType {PUBLIC, WHITELISTED, TOKENHOLDERS} enum PreSaleStatus {PENDING, INPROGRESS, SUCCEED, FAILED, CANCELED} enum RefundType {BURN, WITHDRAW} struct PresaleInfo { uint id; address presaleOwner; PreSaleStatus preSaleStatus; } struct TokenInfo { address tokenAddress; uint8 decimals; } struct ParticipationCriteria { PresaleType presaleType; address criteriaToken; uint256 minCriteriaTokens; uint256 presaleRate; uint8 liquidity; uint256 hardCap; uint256 softCap; uint256 minContribution; uint256 maxContribution; RefundType refundType; } struct PresaleTimes { uint256 startedAt; uint256 expiredAt; uint256 lpLockupDuration; } struct PresalectCounts { uint256 accumulatedBalance; uint256 contributors; uint256 claimsCount; } struct ContributorsVesting { bool isEnabled; uint firstReleasePC; uint eachCycleDuration; uint8 eachCyclePC; } struct TeamVesting { bool isEnabled; uint vestingTokens; uint firstReleaseDelay; uint firstReleasePC; uint eachCycleDuration; uint8 eachCyclePC; } struct GeneralInfo { string logoURL; string websiteURL; string twitterURL; string telegramURL; string discordURL; string description; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 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; }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } }
pragma solidity >=0.6.2; 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 swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 1 }, "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":"_uniswapV2Router02","type":"address"},{"internalType":"address","name":"_teamAddr","type":"address"},{"internalType":"address","name":"_devAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"presaleAddress","type":"address"}],"name":"PresaleCreated","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"internalType":"struct LaunchPadLib.TokenInfo","name":"_tokenInfo","type":"tuple"},{"components":[{"internalType":"enum LaunchPadLib.PresaleType","name":"presaleType","type":"uint8"},{"internalType":"address","name":"criteriaToken","type":"address"},{"internalType":"uint256","name":"minCriteriaTokens","type":"uint256"},{"internalType":"uint256","name":"presaleRate","type":"uint256"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint256","name":"hardCap","type":"uint256"},{"internalType":"uint256","name":"softCap","type":"uint256"},{"internalType":"uint256","name":"minContribution","type":"uint256"},{"internalType":"uint256","name":"maxContribution","type":"uint256"},{"internalType":"enum LaunchPadLib.RefundType","name":"refundType","type":"uint8"}],"internalType":"struct LaunchPadLib.ParticipationCriteria","name":"_participationCriteria","type":"tuple"},{"components":[{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"expiredAt","type":"uint256"},{"internalType":"uint256","name":"lpLockupDuration","type":"uint256"}],"internalType":"struct LaunchPadLib.PresaleTimes","name":"_presaleTimes","type":"tuple"},{"components":[{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"uint256","name":"firstReleasePC","type":"uint256"},{"internalType":"uint256","name":"eachCycleDuration","type":"uint256"},{"internalType":"uint8","name":"eachCyclePC","type":"uint8"}],"internalType":"struct LaunchPadLib.ContributorsVesting","name":"_contributorsVesting","type":"tuple"},{"components":[{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"uint256","name":"vestingTokens","type":"uint256"},{"internalType":"uint256","name":"firstReleaseDelay","type":"uint256"},{"internalType":"uint256","name":"firstReleasePC","type":"uint256"},{"internalType":"uint256","name":"eachCycleDuration","type":"uint256"},{"internalType":"uint8","name":"eachCyclePC","type":"uint8"}],"internalType":"struct LaunchPadLib.TeamVesting","name":"_teamVesting","type":"tuple"},{"components":[{"internalType":"string","name":"logoURL","type":"string"},{"internalType":"string","name":"websiteURL","type":"string"},{"internalType":"string","name":"twitterURL","type":"string"},{"internalType":"string","name":"telegramURL","type":"string"},{"internalType":"string","name":"discordURL","type":"string"},{"internalType":"string","name":"description","type":"string"}],"internalType":"struct LaunchPadLib.GeneralInfo","name":"_generalInfo","type":"tuple"}],"name":"createPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"devAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getPresaleRecordsByToken","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"presaleRecordByID","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salesFeeInPercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAddr","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":"uniswapV2Router02","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_upfrontFee","type":"uint256"},{"internalType":"uint8","name":"_salesFeeInPercent","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upfrontfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawBNBs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600155671bc16d674ec80000600255600380547410ed43c718714eb63d5aa57b78b54704e256024e026001600160a81b0319909116179055600480546001600160a01b031990811673aeee930d7dc148862051cc0f43114fedabaf34bc1790915560058054909116732a1706e0b87373445c500621a47cb26484d1ddff1790553480156200009357600080fd5b506040516200618338038062006183833981016040819052620000b6916200017a565b620000c1336200010d565b600380546001600160a01b0394851661010002610100600160a81b0319909116179055600480549284166001600160a01b031993841617905560058054919093169116179055620001c4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200017557600080fd5b919050565b6000806000606084860312156200019057600080fd5b6200019b846200015d565b9250620001ab602085016200015d565b9150620001bb604085016200015d565b90509250925092565b615faf80620001d46000396000f3fe608060405260043610620000d85760003560e01c806314eb76ac14620000e557806332661af7146200010c5780634a5ff7491462000124578063715018a6146200016357806376130324146200017b5780637a57480f14620001b55780638503376214620001cc5780638da5cb5b14620001f1578063a7c6402c1462000209578063acc3ba881462000230578063cde27a351462000264578063da09c72c146200028b578063da3606be14620002ad578063dc5744ad14620002d2578063eec5dab71462000301578063f2fde38b146200031957600080fd5b36620000e057005b600080fd5b348015620000f257600080fd5b506200010a620001043660046200103e565b6200033e565b005b3480156200011957600080fd5b506200010a6200039d565b3480156200013157600080fd5b5060045462000146906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156200017057600080fd5b506200010a6200058b565b3480156200018857600080fd5b50620001466200019a366004620011f4565b6006602052600090815260409020546001600160a01b031681565b6200010a620001c636600462001083565b620005cd565b348015620001d957600080fd5b506200010a620001eb3660046200103e565b62000aa6565b348015620001fe57600080fd5b506200014662000b1a565b3480156200021657600080fd5b50600354620001469061010090046001600160a01b031681565b3480156200023d57600080fd5b50620002556200024f3660046200103e565b62000b29565b6040516200015a9190620013fa565b3480156200027157600080fd5b506200027c60015481565b6040519081526020016200015a565b3480156200029857600080fd5b5060055462000146906001600160a01b031681565b348015620002ba57600080fd5b506200010a620002cc3660046200120e565b62000ba1565b348015620002df57600080fd5b50600354620002ee9060ff1681565b60405160ff90911681526020016200015a565b3480156200030e57600080fd5b506200027c60025481565b3480156200032657600080fd5b506200010a620003383660046200103e565b62000bf0565b336200034962000b1a565b6001600160a01b0316146200037b5760405162461bcd60e51b8152600401620003729062001449565b60405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b33620003a862000b1a565b6001600160a01b031614620003d15760405162461bcd60e51b8152600401620003729062001449565b4780620004175760405162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20776974686472617760681b604482015260640162000372565b600060646200042883605a62001772565b62000434919062001645565b6004546040519192506000916001600160a01b039091169083908381818185875af1925050503d806000811462000488576040519150601f19603f3d011682016040523d82523d6000602084013e6200048d565b606091505b5050905080620004d95760405162461bcd60e51b815260206004820152601660248201527563616e6e6f742073656e64207465616d20536861726560501b604482015260640162000372565b6005546000906001600160a01b0316620004f4848662001794565b604051600081818185875af1925050503d806000811462000532576040519150601f19603f3d011682016040523d82523d6000602084013e62000537565b606091505b5050905080620005855760405162461bcd60e51b815260206004820152601860248201527763616e6e6f742073656e64206465765465616d536861726560401b604482015260640162000372565b50505050565b336200059662000b1a565b6001600160a01b031614620005bf5760405162461bcd60e51b8152600401620003729062001449565b620005cb600062000c99565b565b8151156200063b5760008260200151116200063b5760405162461bcd60e51b815260206004820152602760248201527f56657374696e6720746f6b656e732073686f756c64206265206d6f7265207468604482015266616e207a65726f60c81b606482015260840162000372565b6014856080015160ff16101580156200065c5750605f856080015160ff1611155b8015620006695750835142105b80156200067a575083516020850151115b620006c85760405162461bcd60e51b815260206004820152601e60248201527f4c6971756964697479206f722054696d65732061726520696e76616c69640000604482015260640162000372565b60008560c00151118015620006e457508460a001518560c00151105b801562000707575060028560a00151620006ff919062001645565b8560c0015110155b801562000718575060008560e00151115b80156200072d57508461010001518560e00151105b6200079e5760405162461bcd60e51b815260206004820152603a60248201527f496e76616c696420686172646361702f736f6674636170206f72206d696e436f604482015279373a3934b13aba34b7b717b6b0bc21b7b73a3934b13aba34b7b760311b606482015260840162000372565b620007a862000b1a565b6001600160a01b0316336001600160a01b0316146200081357600254341015620008135760405162461bcd60e51b815260206004820152601b60248201527a125b9cdd59999a58da595b9d08199d5b991cc81d1bc81cdd185c9d602a1b604482015260640162000372565b600180549060006200082583620017ae565b90915550506040805160608101825260015481523360208201526000918101828152509050600087828888888888600360009054906101000a900460ff16600360019054906101000a90046001600160a01b0316604051620008879062000ce9565b6200089b999897969594939291906200147e565b604051809103906000f080158015620008b8573d6000803e3d6000fd5b5090506000670de0b6b3a76400008960200151600a620008d99190620016b1565b89606001518a60a00151620008ef919062001772565b620008fb919062001772565b62000907919062001645565b905060006064896080015160ff168362000922919062001772565b6200092e919062001645565b905060008a60200151600a620009459190620016b1565b876020015162000956919062001772565b90506000816200096784866200162a565b6200097391906200162a565b8c516040516323b872dd60e01b81523360048201526001600160a01b038881166024830152604482018490529293509116906323b872dd90606401602060405180830381600087803b158015620009c957600080fd5b505af1158015620009de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a04919062001063565b508b516001600160a01b039081166000908152600760209081526040808320805460018082018355918552838520018054958b166001600160a01b031996871681179091558154855260068452938290208054909516841790945592548351908152908101919091527fa63e1b89b8708e2f6d5297fc6c5135793e89946161d4a652acac23119697bfb1910160405180910390a1505050505050505050505050565b6005546001600160a01b0316331462000af85760405162461bcd60e51b815260206004820152601360248201527213db9b1e4819195d881a5cc8185b1b1bddd959606a1b604482015260640162000372565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801562000b9557602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000b76575b50505050509050919050565b3362000bac62000b1a565b6001600160a01b03161462000bd55760405162461bcd60e51b8152600401620003729062001449565b6002919091556003805460ff191660ff909216919091179055565b3362000bfb62000b1a565b6001600160a01b03161462000c245760405162461bcd60e51b8152600401620003729062001449565b6001600160a01b03811662000c8b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000372565b62000c968162000c99565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61475c806200181e83390190565b80356001600160a01b038116811462000d0f57600080fd5b919050565b80356003811062000d0f57600080fd5b80356002811062000d0f57600080fd5b600082601f83011262000d4657600080fd5b81356001600160401b038082111562000d635762000d63620017f8565b604051601f8301601f19908116603f0116810190828211818310171562000d8e5762000d8e620017f8565b8160405283815286602085880101111562000da857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006080828403121562000ddb57600080fd5b604051608081016001600160401b038111828210171562000e005762000e00620017f8565b604052905080823562000e13816200180e565b80825250602083013560208201526040830135604082015262000e39606084016200102c565b60608201525092915050565b600060c0828403121562000e5857600080fd5b62000e62620015b4565b905081356001600160401b038082111562000e7c57600080fd5b62000e8a8583860162000d34565b8352602084013591508082111562000ea157600080fd5b62000eaf8583860162000d34565b6020840152604084013591508082111562000ec957600080fd5b62000ed78583860162000d34565b6040840152606084013591508082111562000ef157600080fd5b62000eff8583860162000d34565b6060840152608084013591508082111562000f1957600080fd5b62000f278583860162000d34565b608084015260a084013591508082111562000f4157600080fd5b5062000f508482850162000d34565b60a08301525092915050565b60006060828403121562000f6f57600080fd5b604051606081016001600160401b038111828210171562000f945762000f94620017f8565b80604052508091508235815260208301356020820152604083013560408201525092915050565b600060c0828403121562000fce57600080fd5b62000fd8620015b4565b9050813562000fe7816200180e565b80825250602082013560208201526040820135604082015260608201356060820152608082013560808201526200102160a083016200102c565b60a082015292915050565b803560ff8116811462000d0f57600080fd5b6000602082840312156200105157600080fd5b6200105c8262000cf7565b9392505050565b6000602082840312156200107657600080fd5b81516200105c816200180e565b6000806000806000808688036103408112156200109f57600080fd5b6040811215620010ae57600080fd5b620010b8620015df565b620010c38962000cf7565b8152620010d360208a016200102c565b60208201529650610140603f198201811315620010ef57600080fd5b620010f962001604565b91506200110960408a0162000d14565b82526200111960608a0162000cf7565b60208301526080890135604083015260a089013560608301526200114060c08a016200102c565b608083015260e089013560a0830152610100808a013560c0840152610120808b013560e0850152828b0135828501526200117e6101608c0162000d24565b908401525090955062001198905088610180890162000f5c565b9350620011aa886101e0890162000dc8565b9250620011bc88610260890162000fbb565b91506103208701356001600160401b03811115620011d957600080fd5b620011e789828a0162000e45565b9150509295509295509295565b6000602082840312156200120757600080fd5b5035919050565b600080604083850312156200122257600080fd5b8235915062001234602084016200102c565b90509250929050565b6001600160a01b03169052565b600381106200125d576200125d620017e2565b9052565b600281106200125d576200125d620017e2565b6000815180845260005b818110156200129c576020818501810151868301820152016200127e565b81811115620012af576000602083870101525b50601f01601f19169290920160200192915050565b6000815160c08452620012db60c085018262001274565b905060208301518482036020860152620012f6828262001274565b9150506040830151848203604086015262001312828262001274565b915050606083015184820360608601526200132e828262001274565b915050608083015184820360808601526200134a828262001274565b91505060a083015184820360a086015262001366828262001274565b95945050505050565b6200137c8282516200124a565b60208101516200139060208401826200123d565b5060408101516040830152606081015160608301526080810151620013ba608084018260ff169052565b5060a081015160a083015260c081015160c083015260e081015160e083015261010080820151818401525061012080820151620005858285018262001261565b6020808252825182820181905260009190848201906040850190845b818110156200143d5783516001600160a01b03168352928401929184019160010162001416565b50909695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006103e060018060a01b03808d5116845260ff60208e01511660208501528b5160408501528060208d01511660608501525060408b015160058110620014c957620014c9620017e2565b6080840152620014dd60a084018b6200136f565b88516101e0840152602089015161020084015260408901516102208401528751151561024084015260208801516102608401526040880151610280840152606088015160ff166102a0840152865115156102c084015260208701516102e084015260408701516103008401526060870151610320840152608087015161034084015260a087015160ff16610360840152806103808401526200158281840187620012c4565b915050620015966103a083018560ff169052565b620015a66103c08301846200123d565b9a9950505050505050505050565b60405160c081016001600160401b0381118282101715620015d957620015d9620017f8565b60405290565b604080519081016001600160401b0381118282101715620015d957620015d9620017f8565b60405161014081016001600160401b0381118282101715620015d957620015d9620017f8565b60008219821115620016405762001640620017cc565b500190565b6000826200166357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620016a95781600019048211156200168d576200168d620017cc565b808516156200169b57918102915b93841c93908002906200166d565b509250929050565b60006200105c60ff841683600082620016cd575060016200176c565b81620016dc575060006200176c565b8160018114620016f55760028114620017005762001720565b60019150506200176c565b60ff841115620017145762001714620017cc565b50506001821b6200176c565b5060208310610133831016604e8410600b841016171562001745575081810a6200176c565b62001751838362001668565b8060001904821115620017685762001768620017cc565b0290505b92915050565b60008160001904831182151516156200178f576200178f620017cc565b500290565b600082821015620017a957620017a9620017cc565b500390565b6000600019821415620017c557620017c5620017cc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811462000c9657600080fdfe60a060405260006027556000602b553480156200001b57600080fd5b506040516200475c3803806200475c8339810160408190526200003e9162000cc7565b3360601b6080528851600380546020808d015160ff16600160a01b9081026001600160a81b03199384166001600160a01b0396871617179093558b516004908155908c015160058054919095166001600160a01b031982168117865560408e01518e96939590949290921617908385811115620000bf57620000bf62000f91565b0217905550508751600680548a9350909190829060ff19166001836002811115620000ee57620000ee62000f91565b021790555060208201518154610100600160a81b0319166101006001600160a01b039092168202178255604083015160018084019190915560608401516002840155608084015160038401805460ff1990811660ff90931692909217905560a0850151600485015560c0850151600585015560e085015160068501559184015160078401556101208401516008840180549193909291169083818111156200019a576200019a62000f91565b0217905550508651600f55506020808701516010556040808801516011558651601b805491151560ff1992831617905587830151601c5587820151601d55606080890151601e805460ff9283169085161790558851601f805491151591851691909117905588850151855592880151602155870151602255608087015160235560a087015160248054919093169116179055835180518592601592620002479284929190910190620007f2565b506020828101518051620002629260018501920190620007f2565b506040820151805162000280916002840191602090910190620007f2565b50606082015180516200029e916003840191602090910190620007f2565b5060808201518051620002bc916004840191602090910190620007f2565b5060a08201518051620002da916005840191602090910190620007f2565b5050600280546001600160a01b038416610100026001600160a81b031990911660ff861617179055508451156200031657620003168562000338565b835115620003295762000329846200051a565b50505050505050505062000fbd565b602080820151604080516080810182526000808252818501818152606493830184815260608401868152928052602690965291517f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ac5590517f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ad5592517f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ae5591517f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3af55818110156200051557600062000411828462000f06565b9050836060015160ff168362000428919062000ec1565b602755600060015b6027548111620004da5760006200044982603c62000ee4565b87604001516200045a919062000ee4565b60408051608081018252848152602080820184815282840189815260608d8101805160ff90811692870192835260008b815260269096529690942094518555915160018501555160028401555160039092019190915551919250620004c191168462000ea6565b9250508080620004d19062000f5d565b91505062000430565b50620004e7818562000f06565b602754600090815260266020526040812060030180549091906200050d90849062000ea6565b909155505050505b505050565b60608101516040820151606491906000906200053890603c62000ee4565b90506040518060a00160405280600081526020018281526020018481526020018381526020016000600181111562000574576200057462000f91565b905260008052602a602090815281517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9c908155908201517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9d5560408201517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9e5560608201517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9f5560808201517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424aa0805460ff1916600183818111156200065d576200065d62000f91565b0217905550505082821015620007ec5760006200067b838562000f06565b90508460a0015160ff168462000692919062000ec1565b602b55600060015b602b548111620007b1576000620006b382603c62000ee4565b8860800151620006c4919062000ee4565b620006d0908662000ea6565b90506040518060a001604052808381526020018281526020018581526020018960a0015160ff1681526020016000600181111562000712576200071262000f91565b815250602a60008481526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff021916908360018111156200077d576200077d62000f91565b0217905550505060a0880151620007989060ff168462000ea6565b9250508080620007a89062000f5d565b9150506200069a565b50620007be818662000f06565b602b546000908152602a602052604081206003018054909190620007e490849062000ea6565b909155505050505b50505050565b828054620008009062000f20565b90600052602060002090601f0160209004810192826200082457600085556200086f565b82601f106200083f57805160ff19168380011785556200086f565b828001600101855582156200086f579182015b828111156200086f57825182559160200191906001019062000852565b506200087d92915062000881565b5090565b5b808211156200087d576000815560010162000882565b80516001600160a01b0381168114620008b057600080fd5b919050565b80518015158114620008b057600080fd5b805160038110620008b057600080fd5b805160028110620008b057600080fd5b600082601f830112620008f857600080fd5b81516001600160401b0381111562000914576200091462000fa7565b60206200092a601f8301601f1916820162000e73565b82815285828487010111156200093f57600080fd5b60005b838110156200095f57858101830151828201840152820162000942565b83811115620009715760008385840101525b5095945050505050565b6000608082840312156200098e57600080fd5b604051608081016001600160401b0381118282101715620009b357620009b362000fa7565b604052905080620009c483620008b5565b81526020830151602082015260408301516040820152620009e86060840162000cb5565b60608201525092915050565b600060c0828403121562000a0757600080fd5b62000a1162000dd8565b82519091506001600160401b038082111562000a2c57600080fd5b62000a3a85838601620008e6565b8352602084015191508082111562000a5157600080fd5b62000a5f85838601620008e6565b6020840152604084015191508082111562000a7957600080fd5b62000a8785838601620008e6565b6040840152606084015191508082111562000aa157600080fd5b62000aaf85838601620008e6565b6060840152608084015191508082111562000ac957600080fd5b62000ad785838601620008e6565b608084015260a084015191508082111562000af157600080fd5b5062000b0084828501620008e6565b60a08301525092915050565b6000610140828403121562000b2057600080fd5b62000b2a62000e03565b905062000b3782620008c6565b815262000b476020830162000898565b6020820152604082015160408201526060820151606082015262000b6e6080830162000cb5565b608082015260a082015160a082015260c082015160c082015260e082015160e082015261010080830151818301525061012062000bad818401620008d6565b9082015292915050565b60006060828403121562000bca57600080fd5b62000bd462000e29565b90508151815262000be86020830162000898565b602082015260408201516005811062000c0057600080fd5b604082015292915050565b60006060828403121562000c1e57600080fd5b62000c2862000e29565b905081518152602082015160208201526040820151604082015292915050565b600060c0828403121562000c5b57600080fd5b62000c6562000dd8565b905062000c7282620008b5565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015262000caa60a0830162000cb5565b60a082015292915050565b805160ff81168114620008b057600080fd5b6000806000806000806000806000898b036103e081121562000ce857600080fd5b604081121562000cf757600080fd5b5062000d0262000e4e565b62000d0d8b62000898565b815262000d1d60208c0162000cb5565b6020820152985062000d338b60408c0162000bb7565b975062000d448b60a08c0162000b0c565b965062000d568b6101e08c0162000c0b565b955062000d688b6102408c016200097b565b945062000d7a8b6102c08c0162000c48565b6103808b01519094506001600160401b0381111562000d9857600080fd5b62000da68c828d01620009f4565b93505062000db86103a08b0162000cb5565b915062000dc96103c08b0162000898565b90509295985092959850929598565b60405160c081016001600160401b038111828210171562000dfd5762000dfd62000fa7565b60405290565b60405161014081016001600160401b038111828210171562000dfd5762000dfd62000fa7565b604051606081016001600160401b038111828210171562000dfd5762000dfd62000fa7565b604080519081016001600160401b038111828210171562000dfd5762000dfd62000fa7565b604051601f8201601f191681016001600160401b038111828210171562000e9e5762000e9e62000fa7565b604052919050565b6000821982111562000ebc5762000ebc62000f7b565b500190565b60008262000edf57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562000f015762000f0162000f7b565b500290565b60008282101562000f1b5762000f1b62000f7b565b500390565b600181811c9082168062000f3557607f821691505b6020821081141562000f5757634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000f745762000f7462000f7b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c61377262000fea600039600081816106bb0152818161189c015261235b01526137726000f3fe6080604052600436106101685760003560e01c806309cba0f71461016d578063173434fa14610184578063243bae521461019957806325a6c545146101c45780632605b3c7146101eb5780632edf0869146102425780632fff7af514610281578063475fda0e146102a55780634d7459e0146102c5578063564e1cc41461032f578063619f3d6c1461038d5780636addb663146103f05780636f9170f61461043d5780637781c35e1461046d57806378caf7541461048357806382cde82c146104d15780639e8f4d65146104f15780639fa6f2f914610553578063a0a6e94014610572578063a663ea8c14610587578063a7c6402c146105da578063b96f21201461060c578063bf9e30631461062c578063d57880471461064b578063db2e21bc14610653578063dc5744ad14610668578063e7e1049014610694578063ee97f7f3146106a9578063f968f493146106dd578063fdc6acf8146106f2578063ff3a314114610712575b600080fd5b34801561017957600080fd5b50610182610728565b005b34801561019057600080fd5b50610182610b06565b3480156101a557600080fd5b506101ae61119e565b6040516101bb919061311d565b60405180910390f35b3480156101d057600080fd5b506101d96111af565b6040516101bb969594939291906131f0565b3480156101f757600080fd5b50610227610206366004612d79565b60256020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101bb565b34801561024e57600080fd5b5060045460055461027291906001600160a01b03811690600160a01b900460ff1683565b6040516101bb939291906133b3565b34801561028d57600080fd5b50610297602b5481565b6040519081526020016101bb565b3480156102b157600080fd5b506101826102c0366004612db3565b611507565b3480156102d157600080fd5b50600654600754600854600954600a54600b54600c54600d54600e546103199860ff808216996101009092046001600160a01b0316989197919691811695919491939192168a565b6040516101bb9a9998979695949392919061316a565b34801561033b57600080fd5b5061037c61034a366004612ff2565b602a60205260009081526040902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040516101bb9594939291906133e7565b34801561039957600080fd5b50601f546020546021546022546023546024546103be9560ff90811695949392911686565b6040805196151587526020870195909552938501929092526060840152608083015260ff1660a082015260c0016101bb565b3480156103fc57600080fd5b5060035461041c906001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835260ff9091166020830152016101bb565b34801561044957600080fd5b5061045d610458366004612d79565b611578565b60405190151581526020016101bb565b34801561047957600080fd5b5061029760285481565b34801561048f57600080fd5b50601b54601c54601d54601e546104ac9360ff9081169392911684565b60408051941515855260208501939093529183015260ff1660608201526080016101bb565b3480156104dd57600080fd5b506101826104ec366004612ed2565b61158b565b3480156104fd57600080fd5b5061053361050c366004612ff2565b60266020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016101bb565b34801561055f57600080fd5b5060125460135460145461022792919083565b34801561057e57600080fd5b5061018261165e565b34801561059357600080fd5b506105cd6105a2366004613024565b60009182526029602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040516101bb91906131dd565b3480156105e657600080fd5b506002546105ff9061010090046001600160a01b031681565b6040516101bb91906130cf565b34801561061857600080fd5b50610182610627366004612db3565b611c6e565b34801561063857600080fd5b50600f5460105460115461022792919083565b610182611cdb565b34801561065f57600080fd5b50610182612198565b34801561067457600080fd5b506002546106829060ff1681565b60405160ff90911681526020016101bb565b3480156106a057600080fd5b50610182612436565b3480156106b557600080fd5b506105ff7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106e957600080fd5b5061018261257a565b3480156106fe57600080fd5b5061018261070d366004612e8d565b6127df565b34801561071e57600080fd5b5061029760275481565b6005546001600160a01b0316331461075b5760405162461bcd60e51b815260040161075290613306565b60405180910390fd5b6002600554600160a01b900460ff16600481111561077b5761077b61367f565b14806107a457506003600554600160a01b900460ff1660048111156107a2576107a261367f565b145b806107cc57506004600554600160a01b900460ff1660048111156107ca576107ca61367f565b145b6107e85760405162461bcd60e51b8152600401610752906132d0565b6000600260019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561083857600080fd5b505afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190612d96565b90506000600260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156108c257600080fd5b505afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190612d96565b60035460405163e6a4390560e01b81526001600160a01b03918216600482015281831660248201529192506000919084169063e6a439059060440160206040518083038186803b15801561094d57600080fd5b505afa158015610961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109859190612d96565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016109b591906130cf565b60206040518083038186803b1580156109cd57600080fd5b505afa1580156109e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a05919061300b565b905060008111610a275760405162461bcd60e51b815260040161075290613272565b601154602854610a379190613488565b421015610a795760405162461bcd60e51b815260206004820152601060248201526f139bdd081d5b9b1bd8dad959081e595d60821b6044820152606401610752565b60055460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb92610aad92909116908590600401613104565b602060405180830381600087803b158015610ac757600080fd5b505af1158015610adb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff9190612e6b565b5050505050565b6002600554600160a01b900460ff166004811115610b2657610b2661367f565b1480610b4f57506003600554600160a01b900460ff166004811115610b4d57610b4d61367f565b145b80610b7757506004600554600160a01b900460ff166004811115610b7557610b7561367f565b145b610b935760405162461bcd60e51b8152600401610752906132d0565b336000908152602560209081526040918290208251606081018452815481526001820154928101929092526002015491810182905290610be55760405162461bcd60e51b815260040161075290613272565b6002600554600160a01b900460ff166004811115610c0557610c0561367f565b141561108057601b5460ff16610da4573360009081526025602052604081206002018190556014805491610c3883613638565b91905055506000816020015111610c865760405162461bcd60e51b81526020600482015260126024820152714e6f20746f6b656e7320746f20636c61696d60701b6044820152606401610752565b600354602082015160405163a9059cbb60e01b81526000926001600160a01b03169163a9059cbb91610cbc913391600401613104565b602060405180830381600087803b158015610cd657600080fd5b505af1158015610cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0e9190612e6b565b905080610d725760405162461bcd60e51b815260206004820152602c60248201527f556e61626c6520746f207472616e7366657220746f6b656e7320746f2074686560448201526b081c185c9d1a58da5c185b9d60a21b6064820152608401610752565b6000805160206136fd8339815191523360008460200151604051610d98939291906130e3565b60405180910390a15050565b60208101516000805b6027548111610f1a57600081815260266020526040902060010154602854610dd59190613488565b4210158015610e3657506000808281526026602052604081206001015460285460299291610e0291613488565b81526020808201929092526040908101600090812033825290925290205460ff166001811115610e3457610e3461367f565b145b15610f0857600081815260266020526040902060038101546002909101546127109190610e6390866135b0565b610e6d91906135b0565b610e7791906134a0565b610e819083613488565b91506001602960006026600085815260200190815260200160002060010154602854610ead9190613488565b8152602080820192909252604090810160009081203382529092529020805460ff191660018381811115610ee357610ee361367f565b0217905550602754811415610f085760148054906000610f0283613638565b91905055505b80610f1281613638565b915050610dad565b5060008111610f3b5760405162461bcd60e51b815260040161075290613388565b3360009081526025602052604081206002018054839290610f5d9084906135cf565b909155505060035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610f949033908590600401613104565b602060405180830381600087803b158015610fae57600080fd5b505af1158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe69190612e6b565b6110515760405162461bcd60e51b815260206004820152603660248201527f556e61626c6520746f207472616e736665722070726573616c6520746f6b656e60448201527539903a37903a343290383932b9b0b6329037bbb732b960511b6064820152608401610752565b6000805160206136fd83398151915233600083604051611073939291906130e3565b60405180910390a1505050565b3360009081526025602052604081206001810182905581815560020181905560148054916110ad83613638565b909155505080516110f65760405162461bcd60e51b8152602060048201526013602482015272139bc8185b5bdd5b9d081d1bc81c99599d5b99606a1b6044820152606401610752565b8051604051600091339181156108fc02919084818181858888f193505050509050806111775760405162461bcd60e51b815260206004820152602a60248201527f556e61626c6520746f20726566756e6420616d6f756e7420746f207468652070604482015269185c9d1a58da5c185b9d60b21b6064820152608401610752565b81516040516000805160206136fd83398151915291610d98913391906000906130e3565b50565b60606111aa60006128f0565b905090565b6015805481906111be906135fd565b80601f01602080910402602001604051908101604052809291908181526020018280546111ea906135fd565b80156112375780601f1061120c57610100808354040283529160200191611237565b820191906000526020600020905b81548152906001019060200180831161121a57829003601f168201915b50505050509080600101805461124c906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611278906135fd565b80156112c55780601f1061129a576101008083540402835291602001916112c5565b820191906000526020600020905b8154815290600101906020018083116112a857829003601f168201915b5050505050908060020180546112da906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611306906135fd565b80156113535780601f1061132857610100808354040283529160200191611353565b820191906000526020600020905b81548152906001019060200180831161133657829003601f168201915b505050505090806003018054611368906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611394906135fd565b80156113e15780601f106113b6576101008083540402835291602001916113e1565b820191906000526020600020905b8154815290600101906020018083116113c457829003601f168201915b5050505050908060040180546113f6906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611422906135fd565b801561146f5780601f106114445761010080835404028352916020019161146f565b820191906000526020600020905b81548152906001019060200180831161145257829003601f168201915b505050505090806005018054611484906135fd565b80601f01602080910402602001604051908101604052809291908181526020018280546114b0906135fd565b80156114fd5780601f106114d2576101008083540402835291602001916114fd565b820191906000526020600020905b8154815290600101906020018083116114e057829003601f168201915b5050505050905086565b6005546001600160a01b031633146115315760405162461bcd60e51b815260040161075290613306565b60005b8151811015611574576115616000838381518110611554576115546136ab565b6020026020010151612904565b508061156c81613638565b915050611534565b5050565b6000611585600083612919565b92915050565b6005546001600160a01b031633146115b55760405162461bcd60e51b815260040161075290613306565b8051805182916015916115cf918391602090910190612c71565b5060208281015180516115e89260018501920190612c71565b5060408201518051611604916002840191602090910190612c71565b5060608201518051611620916003840191602090910190612c71565b506080820151805161163c916004840191602090910190612c71565b5060a08201518051611658916005840191602090910190612c71565b50505050565b6005546001600160a01b031633146116885760405162461bcd60e51b815260040161075290613306565b6001600554600160a01b900460ff1660048111156116a8576116a861367f565b14806116d157506000600554600160a01b900460ff1660048111156116cf576116cf61367f565b145b6116ed5760405162461bcd60e51b81526004016107529061329c565b6010544211806117015750600a5460125410155b6117475760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a5cc81b9bdd081bdd995c881e595d604a1b6044820152606401610752565b600b5460125410611ba257600354600090670de0b6b3a76400009061177790600160a01b900460ff16600a613505565b60085460125461178791906135b0565b61179191906135b0565b61179b91906134a0565b6009549091506000906064906117b49060ff16846135b0565b6117be91906134a0565b601254600954919250906000906064906117db9060ff16846135b0565b6117e591906134a0565b6002549091506000906064906117fe9060ff16856135b0565b61180891906134a0565b905060006118168284613488565b61182090856135cf565b6005546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114611872576040519150601f19603f3d011682016040523d82523d6000602084013e611877565b606091505b50509050806118985760405162461bcd60e51b815260040161075290613356565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168460405160006040518083038185875af1925050503d8060008114611905576040519150601f19603f3d011682016040523d82523d6000602084013e61190a565b606091505b505090508061192b5760405162461bcd60e51b815260040161075290613356565b60035460025460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261196892610100909104909116908b90600401613104565b602060405180830381600087803b15801561198257600080fd5b505af1158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190612e6b565b506002546003546001600160a01b0361010090920482169163f305d719918891168a600080306119eb42603c613488565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b158015611a5357600080fd5b505af1158015611a67573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a8c9190613054565b50506005805460ff60a01b1916600160a11b17905550600354600090611abd90600160a01b900460ff16600a613505565b602054611aca91906135b0565b6003546040516370a0823160e01b81528b916001600160a01b0316906370a0823190611afa9030906004016130cf565b60206040518083038186803b158015611b1257600080fd5b505afa158015611b26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4a919061300b565b611b5491906135cf565b611b5e91906135cf565b9050611b698161292e565b4260285560008051602061371d8339815191526002602854604051611b8f92919061341d565b60405180910390a1505050505050505050565b6005805460ff60a01b1916600360a01b1790556003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611be69030906004016130cf565b60206040518083038186803b158015611bfe57600080fd5b505afa158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c36919061300b565b9050611c418161292e565b60008051602061371d83398151915260035b6000604051611c6392919061341d565b60405180910390a150565b6005546001600160a01b03163314611c985760405162461bcd60e51b815260040161075290613306565b60005b815181101561157457611cc86000838381518110611cbb57611cbb6136ab565b6020026020010151612aab565b5080611cd381613638565b915050611c9b565b600f544210801590611cee575060105442105b611d325760405162461bcd60e51b815260206004820152601560248201527450726573616c65206973206e6f742061637469766560581b6044820152606401610752565b6000600554600160a01b900460ff166004811115611d5257611d5261367f565b1415611d96576005805460ff60a01b1916600160a01b17905560405160008051602061371d83398151915290611d8d9060019060009061341d565b60405180910390a15b6001600554600160a01b900460ff166004811115611db657611db661367f565b14611dd35760405162461bcd60e51b81526004016107529061329c565b601254600a54600091611de5916135cf565b3360009081526025602090815260409182902082516060810184528154808252600183015493820193909352600290910154928101929092529192509034838111801590611e3e5750600d54611e3b8383613488565b11155b611e865760405162461bcd60e51b815260206004820152601960248201527818dbdb9d1c9a589d5d1a5bdb881a5cc81b9bdd081d985b1a59603a1b6044820152606401610752565b6020830151611eee57600c54811015611ed85760405162461bcd60e51b81526020600482015260146024820152733a37b7903637bb9031b7b73a3934b13aba34b7b760611b6044820152606401610752565b60138054906000611ee883613638565b91905055505b600160065460ff166002811115611f0757611f0761367f565b1415611f7c57611f1633611578565b611f7c5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c792077686974656c69737465642075736572732061726520616c6c6f77604482015270656420746f20706172746963697061746560781b6064820152608401610752565b600260065460ff166002811115611f9557611f9561367f565b141561207e576007546006546040516370a0823160e01b81526101009091046001600160a01b0316906370a0823190611fd29033906004016130cf565b60206040518083038186803b158015611fea57600080fd5b505afa158015611ffe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612022919061300b565b101561207e5760405162461bcd60e51b815260206004820152602560248201527f596f7520646f6e277420686f6c6420656e6f75676820637269746572696120746044820152646f6b656e7360d81b6064820152608401610752565b600354600090670de0b6b3a7640000906120a390600160a01b900460ff16600a613505565b6008546120b090856135b0565b6120ba91906135b0565b6120c491906134a0565b336000908152602560205260408120600101805492935083929091906120eb908490613488565b90915550503360009081526025602052604081206002018054839290612112908490613488565b90915550503360009081526025602052604081208054849290612136908490613488565b909155505060128054839190600090612150908490613488565b90915550506040517f38ab99026883077be8d0c17df06afddbf3a1c49e4cb37b388bbe5df4763cc81390612189903390859085906130e3565b60405180910390a15050505050565b6001600554600160a01b900460ff1660048111156121b8576121b861367f565b146121d55760405162461bcd60e51b81526004016107529061329c565b3360009081526025602090815260409182902082516060810184528154808252600183015493820193909352600290910154928101929092526122505760405162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b6044820152606401610752565b805160009060649061226390605f6135b0565b61226d91906134a0565b3360009081526025602052604081208181556001810182905560020181905583516012805493945090929091906122a59084906135cf565b9091555050601380549060006122ba836135e6565b9091555050604051600090339083908381818185875af1925050503d8060008114612301576040519150601f19603f3d011682016040523d82523d6000602084013e612306565b606091505b50509050806123575760405162461bcd60e51b815260206004820152601d60248201527f63616e6e6f7420726566756e6420746f20636f6e7472696275746f72730000006044820152606401610752565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683856000015161239391906135cf565b604051600081818185875af1925050503d80600081146123cf576040519150601f19603f3d011682016040523d82523d6000602084013e6123d4565b606091505b50509050806123f55760405162461bcd60e51b815260040161075290613356565b83516040517fae7cd8ccc742b7c5cf2c6529604c8df916a4b092aeb0f904fa0ac9e15efd69c79161242891339190613104565b60405180910390a150505050565b6005546001600160a01b031633146124605760405162461bcd60e51b815260040161075290613306565b6001600554600160a01b900460ff1660048111156124805761248061367f565b14806124a957506000600554600160a01b900460ff1660048111156124a7576124a761367f565b145b6124c55760405162461bcd60e51b81526004016107529061329c565b6005805460ff60a01b1916600160a21b1790556003546040516370a0823160e01b81526000916001600160a01b0316906370a08231906125099030906004016130cf565b60206040518083038186803b15801561252157600080fd5b505afa158015612535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612559919061300b565b90506125648161292e565b60008051602061371d8339815191526004611c53565b6005546001600160a01b031633146125a45760405162461bcd60e51b815260040161075290613306565b6002600554600160a01b900460ff1660048111156125c4576125c461367f565b14806125ed57506003600554600160a01b900460ff1660048111156125eb576125eb61367f565b145b8061261557506004600554600160a01b900460ff1660048111156126135761261361367f565b145b6126315760405162461bcd60e51b8152600401610752906132d0565b60035460009061264c90600160a01b900460ff16600a613505565b60205461265991906135b0565b90506000805b602b548111612735576000818152602a60205260409020600101546028546126879190613488565b42101580156126b957506000818152602a602052604081206004015460ff1660018111156126b7576126b761367f565b145b15612723576000818152602a60205260409020600381015460029091015461271091906126e690866135b0565b6126f091906135b0565b6126fa91906134a0565b6127049083613488565b6000828152602a60205260409020600401805460ff1916600117905591505b8061272d81613638565b91505061265f565b50600081116127565760405162461bcd60e51b815260040161075290613388565b60035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906127889033908590600401613104565b602060405180830381600087803b1580156127a257600080fd5b505af11580156127b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127da9190612e6b565b505050565b6005546001600160a01b031633146128095760405162461bcd60e51b815260040161075290613306565b600283600281111561281d5761281d61367f565b1415612871576006805484919060ff191660018360028111156128425761284261367f565b021790555060068054610100600160a81b0319166101006001600160a01b038516021790556007819055612896565b6006805484919060ff191660018360028111156128905761289061367f565b02179055505b7ffd54e7735b47af9b9138d33a802751317217e0c93173ed3f71772742fbd63d2b8360028111156128c9576128c961367f565b6040805160ff90921682526001600160a01b03851660208301528101839052606001611073565b606060006128fd83612ac0565b9392505050565b60006128fd836001600160a01b038416612b1c565b60006128fd836001600160a01b038416612b66565b801561119b576003600554600160a01b900460ff1660048111156129545761295461367f565b148061297d57506004600554600160a01b900460ff16600481111561297b5761297b61367f565b145b15612a1d5760035460055460405163a9059cbb60e01b81526000926001600160a01b039081169263a9059cbb926129bc92909116908690600401613104565b602060405180830381600087803b1580156129d657600080fd5b505af11580156129ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0e9190612e6b565b90508061157457611574613653565b6001600e5460ff166001811115612a3657612a3661367f565b1415612a765760035460055460405163a9059cbb60e01b81526000926001600160a01b039081169263a9059cbb926129bc92909116908690600401613104565b60035460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906129bc9061dead908690600401613104565b60006128fd836001600160a01b038416612b7e565b606081600001805480602002602001604051908101604052809291908181526020018280548015612b1057602002820191906000526020600020905b815481526020019060010190808311612afc575b50505050509050919050565b6000612b288383612b66565b612b5e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611585565b506000611585565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612c67576000612ba26001836135cf565b8554909150600090612bb6906001906135cf565b9050818114612c1b576000866000018281548110612bd657612bd66136ab565b9060005260206000200154905080876000018481548110612bf957612bf96136ab565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612c2c57612c2c613695565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611585565b6000915050611585565b828054612c7d906135fd565b90600052602060002090601f016020900481019282612c9f5760008555612ce5565b82601f10612cb857805160ff1916838001178555612ce5565b82800160010185558215612ce5579182015b82811115612ce5578251825591602001919060010190612cca565b50612cf1929150612cf5565b5090565b5b80821115612cf15760008155600101612cf6565b600082601f830112612d1b57600080fd5b81356001600160401b03811115612d3457612d346136c1565b612d47601f8201601f1916602001613458565b818152846020838601011115612d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612d8b57600080fd5b81356128fd816136e7565b600060208284031215612da857600080fd5b81516128fd816136e7565b60006020808385031215612dc657600080fd5b82356001600160401b0380821115612ddd57600080fd5b818501915085601f830112612df157600080fd5b813581811115612e0357612e036136c1565b8060051b9150612e14848301613458565b8181528481019084860184860187018a1015612e2f57600080fd5b600095505b83861015612e5e5780359450612e49856136e7565b84835260019590950194918601918601612e34565b5098975050505050505050565b600060208284031215612e7d57600080fd5b815180151581146128fd57600080fd5b600080600060608486031215612ea257600080fd5b833560038110612eb157600080fd5b92506020840135612ec1816136e7565b929592945050506040919091013590565b600060208284031215612ee457600080fd5b81356001600160401b0380821115612efb57600080fd5b9083019060c08286031215612f0f57600080fd5b612f17613430565b823582811115612f2657600080fd5b612f3287828601612d0a565b825250602083013582811115612f4757600080fd5b612f5387828601612d0a565b602083015250604083013582811115612f6b57600080fd5b612f7787828601612d0a565b604083015250606083013582811115612f8f57600080fd5b612f9b87828601612d0a565b606083015250608083013582811115612fb357600080fd5b612fbf87828601612d0a565b60808301525060a083013582811115612fd757600080fd5b612fe387828601612d0a565b60a08301525095945050505050565b60006020828403121561300457600080fd5b5035919050565b60006020828403121561301d57600080fd5b5051919050565b6000806040838503121561303757600080fd5b823591506020830135613049816136e7565b809150509250929050565b60008060006060848603121561306957600080fd5b8351925060208401519150604084015190509250925092565b6000815180845260005b818110156130a85760208185018101518683018201520161308c565b818111156130ba576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561315e5783516001600160a01b031683529284019291840191600101613139565b50909695505050505050565b610140810160038c1061317f5761317f61367f565b8b825260018060a01b038b16602083015289604083015288606083015260ff881660808301528660a08301528560c08301528460e0830152836101008301526131c7836136d7565b826101208301529b9a5050505050505050505050565b602081016131ea836136d7565b91905290565b60c08152600061320360c0830189613082565b82810360208401526132158189613082565b905082810360408401526132298188613082565b9050828103606084015261323d8187613082565b905082810360808401526132518186613082565b905082810360a08401526132658185613082565b9998505050505050505050565b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252601a908201527950726573616c65206973206e6f7420696e2070726f677265737360301b604082015260600190565b6020808252601c908201527b141c995cd85b19481a5cc81b9bdd0818dbdb98db1d591959081e595d60221b604082015260600190565b60208082526030908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526f206f6620746869732070726573616c6560801b606082015260800190565b60208082526018908201527763616e6e6f742073656e64206465765465616d536861726560401b604082015260600190565b6020808252601190820152704e6f7468696e6720746f20756e6c6f636b60781b604082015260600190565b8381526001600160a01b038316602082015260608101600583106133d9576133d961367f565b826040830152949350505050565b600060a08201905086825285602083015284604083015283606083015261340d836136d7565b8260808301529695505050505050565b60ff929092168252602082015260400190565b60405160c081016001600160401b0381118282101715613452576134526136c1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613480576134806136c1565b604052919050565b6000821982111561349b5761349b613669565b500190565b6000826134bd57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156134fd5781600019048211156134e3576134e3613669565b808516156134f057918102915b93841c93908002906134c7565b509250929050565b60006128fd60ff84168360008261351e57506001611585565b8161352b57506000611585565b8160018114613541576002811461354b57613567565b6001915050611585565b60ff84111561355c5761355c613669565b50506001821b611585565b5060208310610133831016604e8410600b841016171561358a575081810a611585565b61359483836134c2565b80600019048211156135a8576135a8613669565b029392505050565b60008160001904831182151516156135ca576135ca613669565b500290565b6000828210156135e1576135e1613669565b500390565b6000816135f5576135f5613669565b506000190190565b600181811c9082168061361157607f821691505b6020821081141561363257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561364c5761364c613669565b5060010190565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6002811061119b5761119b61367f565b6001600160a01b038116811461119b57600080fdfe987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a2cfdb8f6e98aa10f6f94bc67cbf83bd964053ce8874a79053fadef271036223ca264697066735822122071460bb703ccaf83cdb9931239b74e33dcc89be8984ffb851c7b1ef98c217c9564736f6c63430008070033a26469706673582212208b6f8fb683a45970835e3e2fc01bdd22d57a98a0fdfdf5a7fcba26963d64875864736f6c634300080700330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000001330456e0dab5a84e17e4c3231edde6018ac378f0000000000000000000000002a1706e0b87373445c500621a47cb26484d1ddff
Deployed Bytecode
0x608060405260043610620000d85760003560e01c806314eb76ac14620000e557806332661af7146200010c5780634a5ff7491462000124578063715018a6146200016357806376130324146200017b5780637a57480f14620001b55780638503376214620001cc5780638da5cb5b14620001f1578063a7c6402c1462000209578063acc3ba881462000230578063cde27a351462000264578063da09c72c146200028b578063da3606be14620002ad578063dc5744ad14620002d2578063eec5dab71462000301578063f2fde38b146200031957600080fd5b36620000e057005b600080fd5b348015620000f257600080fd5b506200010a620001043660046200103e565b6200033e565b005b3480156200011957600080fd5b506200010a6200039d565b3480156200013157600080fd5b5060045462000146906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156200017057600080fd5b506200010a6200058b565b3480156200018857600080fd5b50620001466200019a366004620011f4565b6006602052600090815260409020546001600160a01b031681565b6200010a620001c636600462001083565b620005cd565b348015620001d957600080fd5b506200010a620001eb3660046200103e565b62000aa6565b348015620001fe57600080fd5b506200014662000b1a565b3480156200021657600080fd5b50600354620001469061010090046001600160a01b031681565b3480156200023d57600080fd5b50620002556200024f3660046200103e565b62000b29565b6040516200015a9190620013fa565b3480156200027157600080fd5b506200027c60015481565b6040519081526020016200015a565b3480156200029857600080fd5b5060055462000146906001600160a01b031681565b348015620002ba57600080fd5b506200010a620002cc3660046200120e565b62000ba1565b348015620002df57600080fd5b50600354620002ee9060ff1681565b60405160ff90911681526020016200015a565b3480156200030e57600080fd5b506200027c60025481565b3480156200032657600080fd5b506200010a620003383660046200103e565b62000bf0565b336200034962000b1a565b6001600160a01b0316146200037b5760405162461bcd60e51b8152600401620003729062001449565b60405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b33620003a862000b1a565b6001600160a01b031614620003d15760405162461bcd60e51b8152600401620003729062001449565b4780620004175760405162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20776974686472617760681b604482015260640162000372565b600060646200042883605a62001772565b62000434919062001645565b6004546040519192506000916001600160a01b039091169083908381818185875af1925050503d806000811462000488576040519150601f19603f3d011682016040523d82523d6000602084013e6200048d565b606091505b5050905080620004d95760405162461bcd60e51b815260206004820152601660248201527563616e6e6f742073656e64207465616d20536861726560501b604482015260640162000372565b6005546000906001600160a01b0316620004f4848662001794565b604051600081818185875af1925050503d806000811462000532576040519150601f19603f3d011682016040523d82523d6000602084013e62000537565b606091505b5050905080620005855760405162461bcd60e51b815260206004820152601860248201527763616e6e6f742073656e64206465765465616d536861726560401b604482015260640162000372565b50505050565b336200059662000b1a565b6001600160a01b031614620005bf5760405162461bcd60e51b8152600401620003729062001449565b620005cb600062000c99565b565b8151156200063b5760008260200151116200063b5760405162461bcd60e51b815260206004820152602760248201527f56657374696e6720746f6b656e732073686f756c64206265206d6f7265207468604482015266616e207a65726f60c81b606482015260840162000372565b6014856080015160ff16101580156200065c5750605f856080015160ff1611155b8015620006695750835142105b80156200067a575083516020850151115b620006c85760405162461bcd60e51b815260206004820152601e60248201527f4c6971756964697479206f722054696d65732061726520696e76616c69640000604482015260640162000372565b60008560c00151118015620006e457508460a001518560c00151105b801562000707575060028560a00151620006ff919062001645565b8560c0015110155b801562000718575060008560e00151115b80156200072d57508461010001518560e00151105b6200079e5760405162461bcd60e51b815260206004820152603a60248201527f496e76616c696420686172646361702f736f6674636170206f72206d696e436f604482015279373a3934b13aba34b7b717b6b0bc21b7b73a3934b13aba34b7b760311b606482015260840162000372565b620007a862000b1a565b6001600160a01b0316336001600160a01b0316146200081357600254341015620008135760405162461bcd60e51b815260206004820152601b60248201527a125b9cdd59999a58da595b9d08199d5b991cc81d1bc81cdd185c9d602a1b604482015260640162000372565b600180549060006200082583620017ae565b90915550506040805160608101825260015481523360208201526000918101828152509050600087828888888888600360009054906101000a900460ff16600360019054906101000a90046001600160a01b0316604051620008879062000ce9565b6200089b999897969594939291906200147e565b604051809103906000f080158015620008b8573d6000803e3d6000fd5b5090506000670de0b6b3a76400008960200151600a620008d99190620016b1565b89606001518a60a00151620008ef919062001772565b620008fb919062001772565b62000907919062001645565b905060006064896080015160ff168362000922919062001772565b6200092e919062001645565b905060008a60200151600a620009459190620016b1565b876020015162000956919062001772565b90506000816200096784866200162a565b6200097391906200162a565b8c516040516323b872dd60e01b81523360048201526001600160a01b038881166024830152604482018490529293509116906323b872dd90606401602060405180830381600087803b158015620009c957600080fd5b505af1158015620009de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a04919062001063565b508b516001600160a01b039081166000908152600760209081526040808320805460018082018355918552838520018054958b166001600160a01b031996871681179091558154855260068452938290208054909516841790945592548351908152908101919091527fa63e1b89b8708e2f6d5297fc6c5135793e89946161d4a652acac23119697bfb1910160405180910390a1505050505050505050505050565b6005546001600160a01b0316331462000af85760405162461bcd60e51b815260206004820152601360248201527213db9b1e4819195d881a5cc8185b1b1bddd959606a1b604482015260640162000372565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801562000b9557602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000b76575b50505050509050919050565b3362000bac62000b1a565b6001600160a01b03161462000bd55760405162461bcd60e51b8152600401620003729062001449565b6002919091556003805460ff191660ff909216919091179055565b3362000bfb62000b1a565b6001600160a01b03161462000c245760405162461bcd60e51b8152600401620003729062001449565b6001600160a01b03811662000c8b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000372565b62000c968162000c99565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61475c806200181e83390190565b80356001600160a01b038116811462000d0f57600080fd5b919050565b80356003811062000d0f57600080fd5b80356002811062000d0f57600080fd5b600082601f83011262000d4657600080fd5b81356001600160401b038082111562000d635762000d63620017f8565b604051601f8301601f19908116603f0116810190828211818310171562000d8e5762000d8e620017f8565b8160405283815286602085880101111562000da857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006080828403121562000ddb57600080fd5b604051608081016001600160401b038111828210171562000e005762000e00620017f8565b604052905080823562000e13816200180e565b80825250602083013560208201526040830135604082015262000e39606084016200102c565b60608201525092915050565b600060c0828403121562000e5857600080fd5b62000e62620015b4565b905081356001600160401b038082111562000e7c57600080fd5b62000e8a8583860162000d34565b8352602084013591508082111562000ea157600080fd5b62000eaf8583860162000d34565b6020840152604084013591508082111562000ec957600080fd5b62000ed78583860162000d34565b6040840152606084013591508082111562000ef157600080fd5b62000eff8583860162000d34565b6060840152608084013591508082111562000f1957600080fd5b62000f278583860162000d34565b608084015260a084013591508082111562000f4157600080fd5b5062000f508482850162000d34565b60a08301525092915050565b60006060828403121562000f6f57600080fd5b604051606081016001600160401b038111828210171562000f945762000f94620017f8565b80604052508091508235815260208301356020820152604083013560408201525092915050565b600060c0828403121562000fce57600080fd5b62000fd8620015b4565b9050813562000fe7816200180e565b80825250602082013560208201526040820135604082015260608201356060820152608082013560808201526200102160a083016200102c565b60a082015292915050565b803560ff8116811462000d0f57600080fd5b6000602082840312156200105157600080fd5b6200105c8262000cf7565b9392505050565b6000602082840312156200107657600080fd5b81516200105c816200180e565b6000806000806000808688036103408112156200109f57600080fd5b6040811215620010ae57600080fd5b620010b8620015df565b620010c38962000cf7565b8152620010d360208a016200102c565b60208201529650610140603f198201811315620010ef57600080fd5b620010f962001604565b91506200110960408a0162000d14565b82526200111960608a0162000cf7565b60208301526080890135604083015260a089013560608301526200114060c08a016200102c565b608083015260e089013560a0830152610100808a013560c0840152610120808b013560e0850152828b0135828501526200117e6101608c0162000d24565b908401525090955062001198905088610180890162000f5c565b9350620011aa886101e0890162000dc8565b9250620011bc88610260890162000fbb565b91506103208701356001600160401b03811115620011d957600080fd5b620011e789828a0162000e45565b9150509295509295509295565b6000602082840312156200120757600080fd5b5035919050565b600080604083850312156200122257600080fd5b8235915062001234602084016200102c565b90509250929050565b6001600160a01b03169052565b600381106200125d576200125d620017e2565b9052565b600281106200125d576200125d620017e2565b6000815180845260005b818110156200129c576020818501810151868301820152016200127e565b81811115620012af576000602083870101525b50601f01601f19169290920160200192915050565b6000815160c08452620012db60c085018262001274565b905060208301518482036020860152620012f6828262001274565b9150506040830151848203604086015262001312828262001274565b915050606083015184820360608601526200132e828262001274565b915050608083015184820360808601526200134a828262001274565b91505060a083015184820360a086015262001366828262001274565b95945050505050565b6200137c8282516200124a565b60208101516200139060208401826200123d565b5060408101516040830152606081015160608301526080810151620013ba608084018260ff169052565b5060a081015160a083015260c081015160c083015260e081015160e083015261010080820151818401525061012080820151620005858285018262001261565b6020808252825182820181905260009190848201906040850190845b818110156200143d5783516001600160a01b03168352928401929184019160010162001416565b50909695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006103e060018060a01b03808d5116845260ff60208e01511660208501528b5160408501528060208d01511660608501525060408b015160058110620014c957620014c9620017e2565b6080840152620014dd60a084018b6200136f565b88516101e0840152602089015161020084015260408901516102208401528751151561024084015260208801516102608401526040880151610280840152606088015160ff166102a0840152865115156102c084015260208701516102e084015260408701516103008401526060870151610320840152608087015161034084015260a087015160ff16610360840152806103808401526200158281840187620012c4565b915050620015966103a083018560ff169052565b620015a66103c08301846200123d565b9a9950505050505050505050565b60405160c081016001600160401b0381118282101715620015d957620015d9620017f8565b60405290565b604080519081016001600160401b0381118282101715620015d957620015d9620017f8565b60405161014081016001600160401b0381118282101715620015d957620015d9620017f8565b60008219821115620016405762001640620017cc565b500190565b6000826200166357634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620016a95781600019048211156200168d576200168d620017cc565b808516156200169b57918102915b93841c93908002906200166d565b509250929050565b60006200105c60ff841683600082620016cd575060016200176c565b81620016dc575060006200176c565b8160018114620016f55760028114620017005762001720565b60019150506200176c565b60ff841115620017145762001714620017cc565b50506001821b6200176c565b5060208310610133831016604e8410600b841016171562001745575081810a6200176c565b62001751838362001668565b8060001904821115620017685762001768620017cc565b0290505b92915050565b60008160001904831182151516156200178f576200178f620017cc565b500290565b600082821015620017a957620017a9620017cc565b500390565b6000600019821415620017c557620017c5620017cc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811462000c9657600080fdfe60a060405260006027556000602b553480156200001b57600080fd5b506040516200475c3803806200475c8339810160408190526200003e9162000cc7565b3360601b6080528851600380546020808d015160ff16600160a01b9081026001600160a81b03199384166001600160a01b0396871617179093558b516004908155908c015160058054919095166001600160a01b031982168117865560408e01518e96939590949290921617908385811115620000bf57620000bf62000f91565b0217905550508751600680548a9350909190829060ff19166001836002811115620000ee57620000ee62000f91565b021790555060208201518154610100600160a81b0319166101006001600160a01b039092168202178255604083015160018084019190915560608401516002840155608084015160038401805460ff1990811660ff90931692909217905560a0850151600485015560c0850151600585015560e085015160068501559184015160078401556101208401516008840180549193909291169083818111156200019a576200019a62000f91565b0217905550508651600f55506020808701516010556040808801516011558651601b805491151560ff1992831617905587830151601c5587820151601d55606080890151601e805460ff9283169085161790558851601f805491151591851691909117905588850151855592880151602155870151602255608087015160235560a087015160248054919093169116179055835180518592601592620002479284929190910190620007f2565b506020828101518051620002629260018501920190620007f2565b506040820151805162000280916002840191602090910190620007f2565b50606082015180516200029e916003840191602090910190620007f2565b5060808201518051620002bc916004840191602090910190620007f2565b5060a08201518051620002da916005840191602090910190620007f2565b5050600280546001600160a01b038416610100026001600160a81b031990911660ff861617179055508451156200031657620003168562000338565b835115620003295762000329846200051a565b50505050505050505062000fbd565b602080820151604080516080810182526000808252818501818152606493830184815260608401868152928052602690965291517f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ac5590517f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ad5592517f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ae5591517f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3af55818110156200051557600062000411828462000f06565b9050836060015160ff168362000428919062000ec1565b602755600060015b6027548111620004da5760006200044982603c62000ee4565b87604001516200045a919062000ee4565b60408051608081018252848152602080820184815282840189815260608d8101805160ff90811692870192835260008b815260269096529690942094518555915160018501555160028401555160039092019190915551919250620004c191168462000ea6565b9250508080620004d19062000f5d565b91505062000430565b50620004e7818562000f06565b602754600090815260266020526040812060030180549091906200050d90849062000ea6565b909155505050505b505050565b60608101516040820151606491906000906200053890603c62000ee4565b90506040518060a00160405280600081526020018281526020018481526020018381526020016000600181111562000574576200057462000f91565b905260008052602a602090815281517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9c908155908201517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9d5560408201517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9e5560608201517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9f5560808201517f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424aa0805460ff1916600183818111156200065d576200065d62000f91565b0217905550505082821015620007ec5760006200067b838562000f06565b90508460a0015160ff168462000692919062000ec1565b602b55600060015b602b548111620007b1576000620006b382603c62000ee4565b8860800151620006c4919062000ee4565b620006d0908662000ea6565b90506040518060a001604052808381526020018281526020018581526020018960a0015160ff1681526020016000600181111562000712576200071262000f91565b815250602a60008481526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff021916908360018111156200077d576200077d62000f91565b0217905550505060a0880151620007989060ff168462000ea6565b9250508080620007a89062000f5d565b9150506200069a565b50620007be818662000f06565b602b546000908152602a602052604081206003018054909190620007e490849062000ea6565b909155505050505b50505050565b828054620008009062000f20565b90600052602060002090601f0160209004810192826200082457600085556200086f565b82601f106200083f57805160ff19168380011785556200086f565b828001600101855582156200086f579182015b828111156200086f57825182559160200191906001019062000852565b506200087d92915062000881565b5090565b5b808211156200087d576000815560010162000882565b80516001600160a01b0381168114620008b057600080fd5b919050565b80518015158114620008b057600080fd5b805160038110620008b057600080fd5b805160028110620008b057600080fd5b600082601f830112620008f857600080fd5b81516001600160401b0381111562000914576200091462000fa7565b60206200092a601f8301601f1916820162000e73565b82815285828487010111156200093f57600080fd5b60005b838110156200095f57858101830151828201840152820162000942565b83811115620009715760008385840101525b5095945050505050565b6000608082840312156200098e57600080fd5b604051608081016001600160401b0381118282101715620009b357620009b362000fa7565b604052905080620009c483620008b5565b81526020830151602082015260408301516040820152620009e86060840162000cb5565b60608201525092915050565b600060c0828403121562000a0757600080fd5b62000a1162000dd8565b82519091506001600160401b038082111562000a2c57600080fd5b62000a3a85838601620008e6565b8352602084015191508082111562000a5157600080fd5b62000a5f85838601620008e6565b6020840152604084015191508082111562000a7957600080fd5b62000a8785838601620008e6565b6040840152606084015191508082111562000aa157600080fd5b62000aaf85838601620008e6565b6060840152608084015191508082111562000ac957600080fd5b62000ad785838601620008e6565b608084015260a084015191508082111562000af157600080fd5b5062000b0084828501620008e6565b60a08301525092915050565b6000610140828403121562000b2057600080fd5b62000b2a62000e03565b905062000b3782620008c6565b815262000b476020830162000898565b6020820152604082015160408201526060820151606082015262000b6e6080830162000cb5565b608082015260a082015160a082015260c082015160c082015260e082015160e082015261010080830151818301525061012062000bad818401620008d6565b9082015292915050565b60006060828403121562000bca57600080fd5b62000bd462000e29565b90508151815262000be86020830162000898565b602082015260408201516005811062000c0057600080fd5b604082015292915050565b60006060828403121562000c1e57600080fd5b62000c2862000e29565b905081518152602082015160208201526040820151604082015292915050565b600060c0828403121562000c5b57600080fd5b62000c6562000dd8565b905062000c7282620008b5565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015262000caa60a0830162000cb5565b60a082015292915050565b805160ff81168114620008b057600080fd5b6000806000806000806000806000898b036103e081121562000ce857600080fd5b604081121562000cf757600080fd5b5062000d0262000e4e565b62000d0d8b62000898565b815262000d1d60208c0162000cb5565b6020820152985062000d338b60408c0162000bb7565b975062000d448b60a08c0162000b0c565b965062000d568b6101e08c0162000c0b565b955062000d688b6102408c016200097b565b945062000d7a8b6102c08c0162000c48565b6103808b01519094506001600160401b0381111562000d9857600080fd5b62000da68c828d01620009f4565b93505062000db86103a08b0162000cb5565b915062000dc96103c08b0162000898565b90509295985092959850929598565b60405160c081016001600160401b038111828210171562000dfd5762000dfd62000fa7565b60405290565b60405161014081016001600160401b038111828210171562000dfd5762000dfd62000fa7565b604051606081016001600160401b038111828210171562000dfd5762000dfd62000fa7565b604080519081016001600160401b038111828210171562000dfd5762000dfd62000fa7565b604051601f8201601f191681016001600160401b038111828210171562000e9e5762000e9e62000fa7565b604052919050565b6000821982111562000ebc5762000ebc62000f7b565b500190565b60008262000edf57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562000f015762000f0162000f7b565b500290565b60008282101562000f1b5762000f1b62000f7b565b500390565b600181811c9082168062000f3557607f821691505b6020821081141562000f5757634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000f745762000f7462000f7b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c61377262000fea600039600081816106bb0152818161189c015261235b01526137726000f3fe6080604052600436106101685760003560e01c806309cba0f71461016d578063173434fa14610184578063243bae521461019957806325a6c545146101c45780632605b3c7146101eb5780632edf0869146102425780632fff7af514610281578063475fda0e146102a55780634d7459e0146102c5578063564e1cc41461032f578063619f3d6c1461038d5780636addb663146103f05780636f9170f61461043d5780637781c35e1461046d57806378caf7541461048357806382cde82c146104d15780639e8f4d65146104f15780639fa6f2f914610553578063a0a6e94014610572578063a663ea8c14610587578063a7c6402c146105da578063b96f21201461060c578063bf9e30631461062c578063d57880471461064b578063db2e21bc14610653578063dc5744ad14610668578063e7e1049014610694578063ee97f7f3146106a9578063f968f493146106dd578063fdc6acf8146106f2578063ff3a314114610712575b600080fd5b34801561017957600080fd5b50610182610728565b005b34801561019057600080fd5b50610182610b06565b3480156101a557600080fd5b506101ae61119e565b6040516101bb919061311d565b60405180910390f35b3480156101d057600080fd5b506101d96111af565b6040516101bb969594939291906131f0565b3480156101f757600080fd5b50610227610206366004612d79565b60256020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101bb565b34801561024e57600080fd5b5060045460055461027291906001600160a01b03811690600160a01b900460ff1683565b6040516101bb939291906133b3565b34801561028d57600080fd5b50610297602b5481565b6040519081526020016101bb565b3480156102b157600080fd5b506101826102c0366004612db3565b611507565b3480156102d157600080fd5b50600654600754600854600954600a54600b54600c54600d54600e546103199860ff808216996101009092046001600160a01b0316989197919691811695919491939192168a565b6040516101bb9a9998979695949392919061316a565b34801561033b57600080fd5b5061037c61034a366004612ff2565b602a60205260009081526040902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040516101bb9594939291906133e7565b34801561039957600080fd5b50601f546020546021546022546023546024546103be9560ff90811695949392911686565b6040805196151587526020870195909552938501929092526060840152608083015260ff1660a082015260c0016101bb565b3480156103fc57600080fd5b5060035461041c906001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b03909316835260ff9091166020830152016101bb565b34801561044957600080fd5b5061045d610458366004612d79565b611578565b60405190151581526020016101bb565b34801561047957600080fd5b5061029760285481565b34801561048f57600080fd5b50601b54601c54601d54601e546104ac9360ff9081169392911684565b60408051941515855260208501939093529183015260ff1660608201526080016101bb565b3480156104dd57600080fd5b506101826104ec366004612ed2565b61158b565b3480156104fd57600080fd5b5061053361050c366004612ff2565b60266020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016101bb565b34801561055f57600080fd5b5060125460135460145461022792919083565b34801561057e57600080fd5b5061018261165e565b34801561059357600080fd5b506105cd6105a2366004613024565b60009182526029602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040516101bb91906131dd565b3480156105e657600080fd5b506002546105ff9061010090046001600160a01b031681565b6040516101bb91906130cf565b34801561061857600080fd5b50610182610627366004612db3565b611c6e565b34801561063857600080fd5b50600f5460105460115461022792919083565b610182611cdb565b34801561065f57600080fd5b50610182612198565b34801561067457600080fd5b506002546106829060ff1681565b60405160ff90911681526020016101bb565b3480156106a057600080fd5b50610182612436565b3480156106b557600080fd5b506105ff7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106e957600080fd5b5061018261257a565b3480156106fe57600080fd5b5061018261070d366004612e8d565b6127df565b34801561071e57600080fd5b5061029760275481565b6005546001600160a01b0316331461075b5760405162461bcd60e51b815260040161075290613306565b60405180910390fd5b6002600554600160a01b900460ff16600481111561077b5761077b61367f565b14806107a457506003600554600160a01b900460ff1660048111156107a2576107a261367f565b145b806107cc57506004600554600160a01b900460ff1660048111156107ca576107ca61367f565b145b6107e85760405162461bcd60e51b8152600401610752906132d0565b6000600260019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561083857600080fd5b505afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190612d96565b90506000600260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156108c257600080fd5b505afa1580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190612d96565b60035460405163e6a4390560e01b81526001600160a01b03918216600482015281831660248201529192506000919084169063e6a439059060440160206040518083038186803b15801561094d57600080fd5b505afa158015610961573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109859190612d96565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016109b591906130cf565b60206040518083038186803b1580156109cd57600080fd5b505afa1580156109e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a05919061300b565b905060008111610a275760405162461bcd60e51b815260040161075290613272565b601154602854610a379190613488565b421015610a795760405162461bcd60e51b815260206004820152601060248201526f139bdd081d5b9b1bd8dad959081e595d60821b6044820152606401610752565b60055460405163a9059cbb60e01b81526001600160a01b038481169263a9059cbb92610aad92909116908590600401613104565b602060405180830381600087803b158015610ac757600080fd5b505af1158015610adb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff9190612e6b565b5050505050565b6002600554600160a01b900460ff166004811115610b2657610b2661367f565b1480610b4f57506003600554600160a01b900460ff166004811115610b4d57610b4d61367f565b145b80610b7757506004600554600160a01b900460ff166004811115610b7557610b7561367f565b145b610b935760405162461bcd60e51b8152600401610752906132d0565b336000908152602560209081526040918290208251606081018452815481526001820154928101929092526002015491810182905290610be55760405162461bcd60e51b815260040161075290613272565b6002600554600160a01b900460ff166004811115610c0557610c0561367f565b141561108057601b5460ff16610da4573360009081526025602052604081206002018190556014805491610c3883613638565b91905055506000816020015111610c865760405162461bcd60e51b81526020600482015260126024820152714e6f20746f6b656e7320746f20636c61696d60701b6044820152606401610752565b600354602082015160405163a9059cbb60e01b81526000926001600160a01b03169163a9059cbb91610cbc913391600401613104565b602060405180830381600087803b158015610cd657600080fd5b505af1158015610cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0e9190612e6b565b905080610d725760405162461bcd60e51b815260206004820152602c60248201527f556e61626c6520746f207472616e7366657220746f6b656e7320746f2074686560448201526b081c185c9d1a58da5c185b9d60a21b6064820152608401610752565b6000805160206136fd8339815191523360008460200151604051610d98939291906130e3565b60405180910390a15050565b60208101516000805b6027548111610f1a57600081815260266020526040902060010154602854610dd59190613488565b4210158015610e3657506000808281526026602052604081206001015460285460299291610e0291613488565b81526020808201929092526040908101600090812033825290925290205460ff166001811115610e3457610e3461367f565b145b15610f0857600081815260266020526040902060038101546002909101546127109190610e6390866135b0565b610e6d91906135b0565b610e7791906134a0565b610e819083613488565b91506001602960006026600085815260200190815260200160002060010154602854610ead9190613488565b8152602080820192909252604090810160009081203382529092529020805460ff191660018381811115610ee357610ee361367f565b0217905550602754811415610f085760148054906000610f0283613638565b91905055505b80610f1281613638565b915050610dad565b5060008111610f3b5760405162461bcd60e51b815260040161075290613388565b3360009081526025602052604081206002018054839290610f5d9084906135cf565b909155505060035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610f949033908590600401613104565b602060405180830381600087803b158015610fae57600080fd5b505af1158015610fc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe69190612e6b565b6110515760405162461bcd60e51b815260206004820152603660248201527f556e61626c6520746f207472616e736665722070726573616c6520746f6b656e60448201527539903a37903a343290383932b9b0b6329037bbb732b960511b6064820152608401610752565b6000805160206136fd83398151915233600083604051611073939291906130e3565b60405180910390a1505050565b3360009081526025602052604081206001810182905581815560020181905560148054916110ad83613638565b909155505080516110f65760405162461bcd60e51b8152602060048201526013602482015272139bc8185b5bdd5b9d081d1bc81c99599d5b99606a1b6044820152606401610752565b8051604051600091339181156108fc02919084818181858888f193505050509050806111775760405162461bcd60e51b815260206004820152602a60248201527f556e61626c6520746f20726566756e6420616d6f756e7420746f207468652070604482015269185c9d1a58da5c185b9d60b21b6064820152608401610752565b81516040516000805160206136fd83398151915291610d98913391906000906130e3565b50565b60606111aa60006128f0565b905090565b6015805481906111be906135fd565b80601f01602080910402602001604051908101604052809291908181526020018280546111ea906135fd565b80156112375780601f1061120c57610100808354040283529160200191611237565b820191906000526020600020905b81548152906001019060200180831161121a57829003601f168201915b50505050509080600101805461124c906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611278906135fd565b80156112c55780601f1061129a576101008083540402835291602001916112c5565b820191906000526020600020905b8154815290600101906020018083116112a857829003601f168201915b5050505050908060020180546112da906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611306906135fd565b80156113535780601f1061132857610100808354040283529160200191611353565b820191906000526020600020905b81548152906001019060200180831161133657829003601f168201915b505050505090806003018054611368906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611394906135fd565b80156113e15780601f106113b6576101008083540402835291602001916113e1565b820191906000526020600020905b8154815290600101906020018083116113c457829003601f168201915b5050505050908060040180546113f6906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611422906135fd565b801561146f5780601f106114445761010080835404028352916020019161146f565b820191906000526020600020905b81548152906001019060200180831161145257829003601f168201915b505050505090806005018054611484906135fd565b80601f01602080910402602001604051908101604052809291908181526020018280546114b0906135fd565b80156114fd5780601f106114d2576101008083540402835291602001916114fd565b820191906000526020600020905b8154815290600101906020018083116114e057829003601f168201915b5050505050905086565b6005546001600160a01b031633146115315760405162461bcd60e51b815260040161075290613306565b60005b8151811015611574576115616000838381518110611554576115546136ab565b6020026020010151612904565b508061156c81613638565b915050611534565b5050565b6000611585600083612919565b92915050565b6005546001600160a01b031633146115b55760405162461bcd60e51b815260040161075290613306565b8051805182916015916115cf918391602090910190612c71565b5060208281015180516115e89260018501920190612c71565b5060408201518051611604916002840191602090910190612c71565b5060608201518051611620916003840191602090910190612c71565b506080820151805161163c916004840191602090910190612c71565b5060a08201518051611658916005840191602090910190612c71565b50505050565b6005546001600160a01b031633146116885760405162461bcd60e51b815260040161075290613306565b6001600554600160a01b900460ff1660048111156116a8576116a861367f565b14806116d157506000600554600160a01b900460ff1660048111156116cf576116cf61367f565b145b6116ed5760405162461bcd60e51b81526004016107529061329c565b6010544211806117015750600a5460125410155b6117475760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a5cc81b9bdd081bdd995c881e595d604a1b6044820152606401610752565b600b5460125410611ba257600354600090670de0b6b3a76400009061177790600160a01b900460ff16600a613505565b60085460125461178791906135b0565b61179191906135b0565b61179b91906134a0565b6009549091506000906064906117b49060ff16846135b0565b6117be91906134a0565b601254600954919250906000906064906117db9060ff16846135b0565b6117e591906134a0565b6002549091506000906064906117fe9060ff16856135b0565b61180891906134a0565b905060006118168284613488565b61182090856135cf565b6005546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114611872576040519150601f19603f3d011682016040523d82523d6000602084013e611877565b606091505b50509050806118985760405162461bcd60e51b815260040161075290613356565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168460405160006040518083038185875af1925050503d8060008114611905576040519150601f19603f3d011682016040523d82523d6000602084013e61190a565b606091505b505090508061192b5760405162461bcd60e51b815260040161075290613356565b60035460025460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261196892610100909104909116908b90600401613104565b602060405180830381600087803b15801561198257600080fd5b505af1158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190612e6b565b506002546003546001600160a01b0361010090920482169163f305d719918891168a600080306119eb42603c613488565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b158015611a5357600080fd5b505af1158015611a67573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a8c9190613054565b50506005805460ff60a01b1916600160a11b17905550600354600090611abd90600160a01b900460ff16600a613505565b602054611aca91906135b0565b6003546040516370a0823160e01b81528b916001600160a01b0316906370a0823190611afa9030906004016130cf565b60206040518083038186803b158015611b1257600080fd5b505afa158015611b26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4a919061300b565b611b5491906135cf565b611b5e91906135cf565b9050611b698161292e565b4260285560008051602061371d8339815191526002602854604051611b8f92919061341d565b60405180910390a1505050505050505050565b6005805460ff60a01b1916600360a01b1790556003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611be69030906004016130cf565b60206040518083038186803b158015611bfe57600080fd5b505afa158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c36919061300b565b9050611c418161292e565b60008051602061371d83398151915260035b6000604051611c6392919061341d565b60405180910390a150565b6005546001600160a01b03163314611c985760405162461bcd60e51b815260040161075290613306565b60005b815181101561157457611cc86000838381518110611cbb57611cbb6136ab565b6020026020010151612aab565b5080611cd381613638565b915050611c9b565b600f544210801590611cee575060105442105b611d325760405162461bcd60e51b815260206004820152601560248201527450726573616c65206973206e6f742061637469766560581b6044820152606401610752565b6000600554600160a01b900460ff166004811115611d5257611d5261367f565b1415611d96576005805460ff60a01b1916600160a01b17905560405160008051602061371d83398151915290611d8d9060019060009061341d565b60405180910390a15b6001600554600160a01b900460ff166004811115611db657611db661367f565b14611dd35760405162461bcd60e51b81526004016107529061329c565b601254600a54600091611de5916135cf565b3360009081526025602090815260409182902082516060810184528154808252600183015493820193909352600290910154928101929092529192509034838111801590611e3e5750600d54611e3b8383613488565b11155b611e865760405162461bcd60e51b815260206004820152601960248201527818dbdb9d1c9a589d5d1a5bdb881a5cc81b9bdd081d985b1a59603a1b6044820152606401610752565b6020830151611eee57600c54811015611ed85760405162461bcd60e51b81526020600482015260146024820152733a37b7903637bb9031b7b73a3934b13aba34b7b760611b6044820152606401610752565b60138054906000611ee883613638565b91905055505b600160065460ff166002811115611f0757611f0761367f565b1415611f7c57611f1633611578565b611f7c5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c792077686974656c69737465642075736572732061726520616c6c6f77604482015270656420746f20706172746963697061746560781b6064820152608401610752565b600260065460ff166002811115611f9557611f9561367f565b141561207e576007546006546040516370a0823160e01b81526101009091046001600160a01b0316906370a0823190611fd29033906004016130cf565b60206040518083038186803b158015611fea57600080fd5b505afa158015611ffe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612022919061300b565b101561207e5760405162461bcd60e51b815260206004820152602560248201527f596f7520646f6e277420686f6c6420656e6f75676820637269746572696120746044820152646f6b656e7360d81b6064820152608401610752565b600354600090670de0b6b3a7640000906120a390600160a01b900460ff16600a613505565b6008546120b090856135b0565b6120ba91906135b0565b6120c491906134a0565b336000908152602560205260408120600101805492935083929091906120eb908490613488565b90915550503360009081526025602052604081206002018054839290612112908490613488565b90915550503360009081526025602052604081208054849290612136908490613488565b909155505060128054839190600090612150908490613488565b90915550506040517f38ab99026883077be8d0c17df06afddbf3a1c49e4cb37b388bbe5df4763cc81390612189903390859085906130e3565b60405180910390a15050505050565b6001600554600160a01b900460ff1660048111156121b8576121b861367f565b146121d55760405162461bcd60e51b81526004016107529061329c565b3360009081526025602090815260409182902082516060810184528154808252600183015493820193909352600290910154928101929092526122505760405162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b6044820152606401610752565b805160009060649061226390605f6135b0565b61226d91906134a0565b3360009081526025602052604081208181556001810182905560020181905583516012805493945090929091906122a59084906135cf565b9091555050601380549060006122ba836135e6565b9091555050604051600090339083908381818185875af1925050503d8060008114612301576040519150601f19603f3d011682016040523d82523d6000602084013e612306565b606091505b50509050806123575760405162461bcd60e51b815260206004820152601d60248201527f63616e6e6f7420726566756e6420746f20636f6e7472696275746f72730000006044820152606401610752565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683856000015161239391906135cf565b604051600081818185875af1925050503d80600081146123cf576040519150601f19603f3d011682016040523d82523d6000602084013e6123d4565b606091505b50509050806123f55760405162461bcd60e51b815260040161075290613356565b83516040517fae7cd8ccc742b7c5cf2c6529604c8df916a4b092aeb0f904fa0ac9e15efd69c79161242891339190613104565b60405180910390a150505050565b6005546001600160a01b031633146124605760405162461bcd60e51b815260040161075290613306565b6001600554600160a01b900460ff1660048111156124805761248061367f565b14806124a957506000600554600160a01b900460ff1660048111156124a7576124a761367f565b145b6124c55760405162461bcd60e51b81526004016107529061329c565b6005805460ff60a01b1916600160a21b1790556003546040516370a0823160e01b81526000916001600160a01b0316906370a08231906125099030906004016130cf565b60206040518083038186803b15801561252157600080fd5b505afa158015612535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612559919061300b565b90506125648161292e565b60008051602061371d8339815191526004611c53565b6005546001600160a01b031633146125a45760405162461bcd60e51b815260040161075290613306565b6002600554600160a01b900460ff1660048111156125c4576125c461367f565b14806125ed57506003600554600160a01b900460ff1660048111156125eb576125eb61367f565b145b8061261557506004600554600160a01b900460ff1660048111156126135761261361367f565b145b6126315760405162461bcd60e51b8152600401610752906132d0565b60035460009061264c90600160a01b900460ff16600a613505565b60205461265991906135b0565b90506000805b602b548111612735576000818152602a60205260409020600101546028546126879190613488565b42101580156126b957506000818152602a602052604081206004015460ff1660018111156126b7576126b761367f565b145b15612723576000818152602a60205260409020600381015460029091015461271091906126e690866135b0565b6126f091906135b0565b6126fa91906134a0565b6127049083613488565b6000828152602a60205260409020600401805460ff1916600117905591505b8061272d81613638565b91505061265f565b50600081116127565760405162461bcd60e51b815260040161075290613388565b60035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906127889033908590600401613104565b602060405180830381600087803b1580156127a257600080fd5b505af11580156127b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127da9190612e6b565b505050565b6005546001600160a01b031633146128095760405162461bcd60e51b815260040161075290613306565b600283600281111561281d5761281d61367f565b1415612871576006805484919060ff191660018360028111156128425761284261367f565b021790555060068054610100600160a81b0319166101006001600160a01b038516021790556007819055612896565b6006805484919060ff191660018360028111156128905761289061367f565b02179055505b7ffd54e7735b47af9b9138d33a802751317217e0c93173ed3f71772742fbd63d2b8360028111156128c9576128c961367f565b6040805160ff90921682526001600160a01b03851660208301528101839052606001611073565b606060006128fd83612ac0565b9392505050565b60006128fd836001600160a01b038416612b1c565b60006128fd836001600160a01b038416612b66565b801561119b576003600554600160a01b900460ff1660048111156129545761295461367f565b148061297d57506004600554600160a01b900460ff16600481111561297b5761297b61367f565b145b15612a1d5760035460055460405163a9059cbb60e01b81526000926001600160a01b039081169263a9059cbb926129bc92909116908690600401613104565b602060405180830381600087803b1580156129d657600080fd5b505af11580156129ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0e9190612e6b565b90508061157457611574613653565b6001600e5460ff166001811115612a3657612a3661367f565b1415612a765760035460055460405163a9059cbb60e01b81526000926001600160a01b039081169263a9059cbb926129bc92909116908690600401613104565b60035460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906129bc9061dead908690600401613104565b60006128fd836001600160a01b038416612b7e565b606081600001805480602002602001604051908101604052809291908181526020018280548015612b1057602002820191906000526020600020905b815481526020019060010190808311612afc575b50505050509050919050565b6000612b288383612b66565b612b5e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611585565b506000611585565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612c67576000612ba26001836135cf565b8554909150600090612bb6906001906135cf565b9050818114612c1b576000866000018281548110612bd657612bd66136ab565b9060005260206000200154905080876000018481548110612bf957612bf96136ab565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612c2c57612c2c613695565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611585565b6000915050611585565b828054612c7d906135fd565b90600052602060002090601f016020900481019282612c9f5760008555612ce5565b82601f10612cb857805160ff1916838001178555612ce5565b82800160010185558215612ce5579182015b82811115612ce5578251825591602001919060010190612cca565b50612cf1929150612cf5565b5090565b5b80821115612cf15760008155600101612cf6565b600082601f830112612d1b57600080fd5b81356001600160401b03811115612d3457612d346136c1565b612d47601f8201601f1916602001613458565b818152846020838601011115612d5c57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612d8b57600080fd5b81356128fd816136e7565b600060208284031215612da857600080fd5b81516128fd816136e7565b60006020808385031215612dc657600080fd5b82356001600160401b0380821115612ddd57600080fd5b818501915085601f830112612df157600080fd5b813581811115612e0357612e036136c1565b8060051b9150612e14848301613458565b8181528481019084860184860187018a1015612e2f57600080fd5b600095505b83861015612e5e5780359450612e49856136e7565b84835260019590950194918601918601612e34565b5098975050505050505050565b600060208284031215612e7d57600080fd5b815180151581146128fd57600080fd5b600080600060608486031215612ea257600080fd5b833560038110612eb157600080fd5b92506020840135612ec1816136e7565b929592945050506040919091013590565b600060208284031215612ee457600080fd5b81356001600160401b0380821115612efb57600080fd5b9083019060c08286031215612f0f57600080fd5b612f17613430565b823582811115612f2657600080fd5b612f3287828601612d0a565b825250602083013582811115612f4757600080fd5b612f5387828601612d0a565b602083015250604083013582811115612f6b57600080fd5b612f7787828601612d0a565b604083015250606083013582811115612f8f57600080fd5b612f9b87828601612d0a565b606083015250608083013582811115612fb357600080fd5b612fbf87828601612d0a565b60808301525060a083013582811115612fd757600080fd5b612fe387828601612d0a565b60a08301525095945050505050565b60006020828403121561300457600080fd5b5035919050565b60006020828403121561301d57600080fd5b5051919050565b6000806040838503121561303757600080fd5b823591506020830135613049816136e7565b809150509250929050565b60008060006060848603121561306957600080fd5b8351925060208401519150604084015190509250925092565b6000815180845260005b818110156130a85760208185018101518683018201520161308c565b818111156130ba576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561315e5783516001600160a01b031683529284019291840191600101613139565b50909695505050505050565b610140810160038c1061317f5761317f61367f565b8b825260018060a01b038b16602083015289604083015288606083015260ff881660808301528660a08301528560c08301528460e0830152836101008301526131c7836136d7565b826101208301529b9a5050505050505050505050565b602081016131ea836136d7565b91905290565b60c08152600061320360c0830189613082565b82810360208401526132158189613082565b905082810360408401526132298188613082565b9050828103606084015261323d8187613082565b905082810360808401526132518186613082565b905082810360a08401526132658185613082565b9998505050505050505050565b60208082526010908201526f4e6f7468696e6720746f20636c61696d60801b604082015260600190565b6020808252601a908201527950726573616c65206973206e6f7420696e2070726f677265737360301b604082015260600190565b6020808252601c908201527b141c995cd85b19481a5cc81b9bdd0818dbdb98db1d591959081e595d60221b604082015260600190565b60208082526030908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526f206f6620746869732070726573616c6560801b606082015260800190565b60208082526018908201527763616e6e6f742073656e64206465765465616d536861726560401b604082015260600190565b6020808252601190820152704e6f7468696e6720746f20756e6c6f636b60781b604082015260600190565b8381526001600160a01b038316602082015260608101600583106133d9576133d961367f565b826040830152949350505050565b600060a08201905086825285602083015284604083015283606083015261340d836136d7565b8260808301529695505050505050565b60ff929092168252602082015260400190565b60405160c081016001600160401b0381118282101715613452576134526136c1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613480576134806136c1565b604052919050565b6000821982111561349b5761349b613669565b500190565b6000826134bd57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156134fd5781600019048211156134e3576134e3613669565b808516156134f057918102915b93841c93908002906134c7565b509250929050565b60006128fd60ff84168360008261351e57506001611585565b8161352b57506000611585565b8160018114613541576002811461354b57613567565b6001915050611585565b60ff84111561355c5761355c613669565b50506001821b611585565b5060208310610133831016604e8410600b841016171561358a575081810a611585565b61359483836134c2565b80600019048211156135a8576135a8613669565b029392505050565b60008160001904831182151516156135ca576135ca613669565b500290565b6000828210156135e1576135e1613669565b500390565b6000816135f5576135f5613669565b506000190190565b600181811c9082168061361157607f821691505b6020821081141561363257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561364c5761364c613669565b5060010190565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6002811061119b5761119b61367f565b6001600160a01b038116811461119b57600080fdfe987d620f307ff6b94d58743cb7a7509f24071586a77759b77c2d4e29f75a2f9a2cfdb8f6e98aa10f6f94bc67cbf83bd964053ce8874a79053fadef271036223ca264697066735822122071460bb703ccaf83cdb9931239b74e33dcc89be8984ffb851c7b1ef98c217c9564736f6c63430008070033a26469706673582212208b6f8fb683a45970835e3e2fc01bdd22d57a98a0fdfdf5a7fcba26963d64875864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000001330456e0dab5a84e17e4c3231edde6018ac378f0000000000000000000000002a1706e0b87373445c500621a47cb26484d1ddff
-----Decoded View---------------
Arg [0] : _uniswapV2Router02 (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _teamAddr (address): 0x1330456e0Dab5a84e17e4C3231eDde6018AC378f
Arg [2] : _devAddr (address): 0x2a1706e0B87373445c500621a47cb26484D1DdfF
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000001330456e0dab5a84e17e4c3231edde6018ac378f
Arg [2] : 0000000000000000000000002a1706e0b87373445c500621a47cb26484d1ddff
Loading...
Loading
Loading...
Loading
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.