Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 2064191 | 47 hrs ago | IN | 0 S | 0.00003181 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
2215034 | 5 hrs ago | Contract Creation | 0 S |
Loading...
Loading
Contract Name:
FairPresaleDapp
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; //pragma experimental ABIEncoderV2; //import "https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol"; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function decimals() external view returns(uint8); /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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); } interface ERC20 { function name() external pure returns(string memory); function symbol() external pure returns(string memory); function transfer(address to, uint256 value) external returns(bool); function approve(address spender, uint256 value) external returns(bool); function transferFrom(address from, address to, uint256 value) external returns(bool); function totalSupply() external view returns(uint256); function balanceOf(address who) external view returns(uint256); function allowance(address owner, address spender) external view returns(uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns(uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns(uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns(uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns(uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; address public voter; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyVoter() { require(msg.sender == voter); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } interface LPToken { function sync() external; } // pragma solidity >=0.5.0; interface UniswapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function getPair(address tokenA, address tokenB) external view returns(address pair); function createPair(address tokenA, address tokenB) external returns(address pair); } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns(string memory); function symbol() external pure returns(string memory); function decimals() external pure returns(uint8); function totalSupply() external view returns(uint); function balanceOf(address owner) external view returns(uint); function allowance(address owner, address spender) external view returns(uint); function approve(address spender, uint value) external returns(bool); function transfer(address to, uint value) external returns(bool); function transferFrom(address from, address to, uint value) external returns(bool); } // pragma solidity >=0.6.2; interface UniswapRouter02 { function factory() external pure returns(address); function WETH() external pure returns(address); function WBNB() 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 addLiquidityBNB( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns(uint amountToken, uint amountETH, uint liquidity); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns(uint[] memory amounts); function swapExactBNBForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns(uint[] memory amounts); // 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); } interface lpLockDeployerInterface { function createLPLocker(address _lockingToken, uint256 _lockerEndTimeStamp, string memory _logo, uint256 _lockingAmount) external payable returns (address); } contract Consts { uint constant TOKEN_DECIMALS = 18; uint8 constant TOKEN_DECIMALS_UINT8 = 18; uint constant TOKEN_DECIMAL_MULTIPLIER = 10 ** TOKEN_DECIMALS; bool constant CONTINUE_MINTING = false; uint256 constant minPlatTokenReq = 1000 * TOKEN_DECIMAL_MULTIPLIER; uint256 constant airdropTokenPercentage = 2; } contract DefiFairCrowdsale is Consts, Ownable { event TokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount ); event Closed(); event RefundsEnabled(); event Refunded(address indexed beneficiary, uint256 weiAmount); event claimedBack(address indexed beneficiary, uint256 weiAmount); event Finalized(); string public presaleType = "FAIRLAUNCH"; using SafeMath for uint256; mapping(address => uint256) public contributors; mapping(address => uint256) public contributorsTracker; mapping(address => uint256) public contributorsClaim; mapping(address => uint256) public contributorsRefundAnytime; mapping(address => uint256) public contributorsPayoutNumber; mapping(uint256 => address) public contributorsAddressTracker; mapping(address => bool) public contributed; mapping(address => bool) public anytimeRefunded; mapping(address => bool) public whitelist; bool public whitelistEnabled; uint256 public contributorCount; uint256 public AddWhitelistNumber; uint256 public RemoveWhitelistNumber; mapping(uint256 => address) public AddWhitelistTracker; //mapping(uint256 => address) public RemoveWhitelistTracker; address[] public AddWhitelistTrackerArray; //address[] public RemoveWhitelistTrackerArray; uint256 public presaleGoalReachedTime = 0; //event Initialized(); //event TimesChanged(uint startTime, uint endTime, uint oldStartTime, uint oldEndTime); //bool public initialized = false; //bool public Preaslefinalized = false; uint256 public buyRate; uint teamFeePer = 2; // team fees percentage uint256 public nativeMultiplier = 20; uint256[2] __min_max_eth; uint256 public soft_cap; //uint256 public hard_cap; uint256 public startTime; uint256 public endTime; uint256 public weiRaised; uint256 public whitelistCoolOff = 600; uint256 public finalizeTimeout = 600; //604800; //time for presale owner to finalize address public token; uint256 public disabledWhitelistTime; bool public whitelistDisabledInitiated; bool public isFinalized; bool public finalizeValid; bool public vestingEnabled; bool public refundEnabled; bool public alternateFee; uint256 public MaxAllowedContribution; uint256 public numberOfVest; uint256 public finalizedTime; uint256 public vestingPeriod; uint256 public uniswapPercentage; uint256 public presaleAmount; uint256 public uniAmount; uint256 public totalTokenRequired; uint256 public extraAmountPerVal; address public presaleCreator; address public feeContract; address public referrerAddr; // address public uniswapDapAddress; // address[] teamAddresses; // uint256[] teamAmounts; // uint256[] teamFreezeTimes; //uint256 totalTeamTokensMinted; constructor(address _token, uint256[2] memory _presaleUniAmount, uint256[2] memory start_end_time, address[2] memory targetWallets, uint256[3] memory _soft_cap_min_max_eth, uint[2] memory _UniPercentage_teamFeePer, uint256[3] memory _extraAmountPer_lockTime_nativeMul, address[2] memory _lpLockDepAndRouter,address[3] memory _altAssets) //Crowdsale(_rate, targetWallets[0], ERC20(token), _min_max_eth[1]) //TimedCrowdsale(start_end_time[0] > now ? start_end_time[0] : now, start_end_time[1]) //CappedCrowdsale(soft_hard_cap[1] * TOKEN_DECIMAL_MULTIPLIER) //RefundableCrowdsale(soft_hard_cap[0] * TOKEN_DECIMAL_MULTIPLIER, teamFees, _UniPercentage, targetWallets[1]) { // require((_govUniPercentage[0] >= 0) && (_govUniPercentage[0] <= 100), "Governance amount is outside of governance limits"); __min_max_eth = [_soft_cap_min_max_eth[1],_soft_cap_min_max_eth[2]]; soft_cap = _soft_cap_min_max_eth[0]; // hard_cap = soft_hard_cap[1] * TOKEN_DECIMAL_MULTIPLIER; startTime = start_end_time[0]; endTime = start_end_time[1]; token = _token; MaxAllowedContribution = _soft_cap_min_max_eth[2]; presaleCreator = targetWallets[0]; feeContract = targetWallets[1]; teamFeePer = _UniPercentage_teamFeePer[1]; uniswapPercentage = _UniPercentage_teamFeePer[0]; presaleAmount = _presaleUniAmount[0]; uniAmount = _presaleUniAmount[1]; totalTokenRequired = (presaleAmount + uniAmount) * (teamFeePer + 100) /100; extraAmountPerVal = _extraAmountPer_lockTime_nativeMul[0] + 100; locktime = _extraAmountPer_lockTime_nativeMul[1]; nativeMultiplier = _extraAmountPer_lockTime_nativeMul[2]; lpLockDeployer = _lpLockDepAndRouter[0]; ROUTER_ADDRESS = _lpLockDepAndRouter[1]; altAssets = _altAssets; for(uint256 i=0;i<_altAssets.length;i++){ validPairPartner[altAssets[i]] = true; } } /* function checkContributorValidity(address contributor_addr) public view returns(uint256) { return contributors[contributor_addr]; } */ function checkRate() public view returns(uint256) { return buyRate; } function minEthContribution() public view returns(uint256) { return __min_max_eth[0]; } function maxEthContribution() public view returns(uint256) { return __min_max_eth[1]; } function presaleStartTime() public view returns(uint256) { return startTime; } function presaleEndTime() public view returns(uint256) { return endTime; } /* function mintForPlatform(address _platAddrs) public onlyOwner { require(_platAddrs != address(0), "platform addr cant be zero"); uint256 platFee = (presaleAmount*teamFeePer)/100; ERC20(token).transfer(_platAddrs, platFee); } function mintForUniswap(address uniswapDep) public onlyOwner { require(uniswapDep != address(0x0),"uniswapDep addr cannot be zero"); require(ERC20(token).transfer(uniswapDep, (uniAmount*extraAmountPerVal)/100),"unable to mint for uniDep from presale"); } */ // function resetUserEthAmount(address contributor_addr) onlyOwner public { // contributors[contributor_addr] = 0; //} /** * @dev override hasClosed to add minimal value logic * @return true if remained to achieve less than minimal */ function hasClosed() public view returns(bool) { //bool remainValue = (hard_cap - weiRaised) < __min_max_eth[0]; return (block.timestamp > endTime);// || remainValue; } function CheckSoftCap() public view returns(uint256) { return soft_cap; } /* function CheckHardCap() public view returns(uint256) { return hard_cap; } */ function CheckTotalEthRaised() public view returns(uint256) { return weiRaised; } /* * @dev override purchase validation to add extra value logic. * @return true if sended more than minimal value */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { require(msg.value >= __min_max_eth[0]); // require(msg.value >= 0); require(msg.value <= (__min_max_eth[1])); // it should be 10% in mainnet launch *********************** // require(msg.value <= 1000000000000000000); // require((weiRaised + _weiAmount) <= hard_cap,"contribution reaching over hcap"); require(_beneficiary != address(0)); require(_weiAmount != 0); } function addToWhitelist(address WhitelistAddress) public onlyOwner { // require(!whitelist[WhitelistAddress], "already whitelisted"); whitelist[WhitelistAddress] = true; AddWhitelistTracker[AddWhitelistNumber] = WhitelistAddress; AddWhitelistNumber++; } function removeFromWhitelist(address WhitelistAddress) public onlyOwner { require(whitelist[WhitelistAddress], "not in whitelist!"); whitelist[WhitelistAddress] = false; //RemoveWhitelistTracker[RemoveWhitelistNumber] = WhitelistAddress; RemoveWhitelistNumber++; } function enableWhitelist() public onlyOwner { require(!whitelistEnabled, "whitelist already enabled"); whitelistEnabled = true; } function disableWhitelist() public onlyOwner { require(whitelistEnabled, "whitelist already disabled"); whitelistEnabled = false; disabledWhitelistTime = block.timestamp + whitelistCoolOff; whitelistDisabledInitiated = true; } function getAddlist() public view returns(address[] memory){ address[] memory AddList = new address[](AddWhitelistNumber); for (uint256 i = 0; i < AddWhitelistNumber; i++) { if(whitelist[AddWhitelistTracker[i]]){ AddList[i] = AddWhitelistTracker[i]; } else { AddList[i] = address(0x0); } } return AddList; } /* function getRemovelist() public view returns(address[] memory) { address[] memory RemoveList = new address[](RemoveWhitelistNumber); for (uint256 i = 0; i < RemoveWhitelistNumber; i++) { RemoveList[i] = RemoveWhitelistTracker[i]; } return RemoveList; } */ /* function getPresaleDataAddr() view returns(address[] memory, uint256[7] memory) { address[] memory PresaleDataAddr = new address[](AddWhitelistNumber); for (uint256 i = 0; i < AddWhitelistNumber; i++) { PresaleDataAddr[i] = AddWhitelistTracker[i]; //******************************************** NEED UPDATE TO ADD CORRECT ADDRESS DATA*************************************************** } return (PresaleDataAddr,getPresaleDataUint()); } */ function getPresaleData() public view returns(uint256[10] memory,bool[4] memory, string memory) { uint256[10] memory PresaleDataUint; bool[4] memory presaleDataBool; PresaleDataUint = [soft_cap,presaleAmount,__min_max_eth[0],__min_max_eth[1],startTime,endTime,weiRaised,buyRate,uniAmount,uniswapPercentage]; presaleDataBool = [isFinalized,finalizeValid,vestingEnabled,refundEnabled]; return (PresaleDataUint,presaleDataBool,presaleType); } function getContributorData() public view returns(address[] memory,uint256[] memory) { // address[] memory WalletList = new address[](KYCsverifiedNumber); address[] memory contributorAddresses = new address[](contributorCount); uint256[] memory contributedValues = new uint256[](contributorCount); for (uint256 i = 0; i < contributorCount;i++){ contributorAddresses[i] = contributorsAddressTracker[i]; contributedValues[i] = contributors[contributorsAddressTracker[i]]; } return (contributorAddresses,contributedValues); } /** * @dev fallback function ***DO NOT OVERRIDE*** */ receive() external payable { require(block.timestamp > disabledWhitelistTime, "In whitelist disabled cool Off"); require(!anytimeRefunded[msg.sender], "User used anytime refund!"); //checking if user refunded from this presale at anytime if (whitelistEnabled) { require(whitelist[msg.sender], "user not whitelisted"); } require(contributors[msg.sender] <= (MaxAllowedContribution - msg.value),"contribution over max allowed"); buyTokens(msg.sender); contributors[msg.sender] += msg.value; contributorsTracker[msg.sender] += msg.value; if(!contributed[msg.sender]){ contributorsAddressTracker[contributorCount] = msg.sender; contributed[msg.sender] = true; contributorCount++; } } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyTokens(address _beneficiary) internal { require(msg.sender == tx.origin,"can't contribute via contracts"); require(block.timestamp > disabledWhitelistTime, "In whitelist disabled cool Off"); require (block.timestamp >= startTime && block.timestamp < endTime,"presale not active"); require(!anytimeRefunded[msg.sender], "User used anytime refund!"); //checking if user refunded from this presale at anytime if (whitelistEnabled) { require(whitelist[msg.sender], "user not whitelisted"); } uint256 weiAmount = msg.value; _preValidatePurchase(_beneficiary, weiAmount); // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount); // update state weiRaised += weiAmount; //_processPurchase(_beneficiary, tokens); emit TokenPurchase( msg.sender, _beneficiary, weiAmount, tokens ); // _updatePurchasingState(_beneficiary, weiAmount); //_forwardFunds(); //_postValidatePurchase(_beneficiary, weiAmount); } function _getTokenAmount(uint256 _weiAmount) internal view returns(uint256) { return _weiAmount*buyRate/(1 ether); // return _weiAmount.mul(rate); } function claimTokens() public { require(!refundEnabled,"presale was refunded"); require(!vestingEnabled,"please use vesting method to claim"); require(isFinalized, "Not Finalized yet!"); require(finalizeValid, "presale Failed!"); //checking if presale succeeded or not require(!(contributors[msg.sender] == 0), "user has no more tokens to claim!"); uint256 tokenValue = (uint256(contributors[msg.sender]).mul(uint256(buyRate))).div(1 ether); // uint256 tokenValueDecimalOptimized = (tokenValue.mul(10 ** uint256(seeDecimals(token)))).div(1 ether); contributors[msg.sender] = 0; ERC20(token).transfer(msg.sender, tokenValue); contributorsClaim[msg.sender] = tokenValue; } function vestToken() public { // require(!tokenDropFlag,"can't vest when token drop enabled!"); require(!refundEnabled,"presale was refunded"); require(vestingEnabled,"vesting not enabled"); require(isFinalized, "Not Finalized yet!"); require(finalizeValid, "presale Failed!"); //checking if presale succeeded or not require(!(contributors[msg.sender] == 0), "user has no more tokens to claim!"); require(contributorsPayoutNumber[msg.sender] < numberOfVest,"all tokens vested"); uint256 CurrentPayoutRounds = (((block.timestamp).sub(finalizedTime)).div(vestingPeriod)).add(1); // need to add 1 to allow partial token vest right away after presale if (CurrentPayoutRounds >= numberOfVest){ CurrentPayoutRounds = numberOfVest; } uint256 userPayoutRounds = CurrentPayoutRounds.sub(contributorsPayoutNumber[msg.sender]); require(userPayoutRounds > 0 && userPayoutRounds <= numberOfVest,"not in user claim window"); contributorsPayoutNumber[msg.sender] = CurrentPayoutRounds; uint256 tokenValue = (((uint256(contributorsTracker[msg.sender]).mul(uint256(buyRate))).div(1 ether)).mul(userPayoutRounds)).div(numberOfVest); // uint256 tokenValueDecimalOptimized = (tokenValue.mul(10 ** uint256(seeDecimals(token)))).div(1 ether); uint256 totalTokensLeftForUser = (uint256(contributors[msg.sender]).mul(uint256(buyRate))).div(1 ether); require(tokenValue <= totalTokensLeftForUser,"can't claim more than allowed"); uint256 contributionsClaiming = contributorsTracker[msg.sender].mul(userPayoutRounds).div(numberOfVest); if(contributionsClaiming >= contributors[msg.sender]){ contributors[msg.sender] = 0; } else{ contributors[msg.sender] = contributors[msg.sender].sub(contributionsClaiming); } ERC20(token).transfer(msg.sender, tokenValue); contributorsClaim[msg.sender] = contributorsClaim[msg.sender].add(tokenValue); } function enableVesting(uint256 _numOfVest, uint256 _vestingPeriod) public{ require(_numOfVest > 1,"num of vest has to be grtr than 1"); require(_vestingPeriod > 0,"vesting period invalid"); require(block.timestamp < startTime.sub(600),"can't enable vest after presale start"); require(!vestingEnabled,"vesting already enabled"); //require(!tokenDropFlag, "can't enable vest when airdrop is on"); require(msg.sender == presaleCreator); // checking for presale owner address vestingEnabled = true; numberOfVest = _numOfVest; vestingPeriod = _vestingPeriod; } function disableVesting() public { require(msg.sender == presaleCreator); require(vestingEnabled,"vesting already disabled"); require(!isFinalized,"presale already finalized"); vestingEnabled = false; } function claimRefund() public { require(isFinalized, "not finalized"); require(!(goalReached()) || !finalizeValid, "goal reached or presale succeeded"); refund(msg.sender); } function claimRefundAnytime() public { require(!anytimeRefunded[msg.sender], "already refunded!"); uint256 userContributed = contributors[msg.sender]; require(userContributed > 0, "nothing to claim"); require(!isFinalized, "already finalized!"); require(!finalizeValid, "already succesfully finalized"); require(block.timestamp < endTime.sub(finalizeTimeout), "withdrawal window expired!"); // require(!goalReached() || !finalizeValid,"goal reached"); contributorsRefundAnytime[msg.sender] = userContributed; // added for V3 -- need to check weiRaised = weiRaised.sub(userContributed); // Subtract from total eth raised anytimeRefunded[msg.sender] = true; refundAnytime(msg.sender,userContributed); } function refund(address investor) internal { //have to see if onlyOwner works require(refundEnabled,"refund not enabled"); uint256 depositedValue = contributors[investor]; require(depositedValue > 0, "User has no investment to claim"); contributors[investor] = 0; (bool refundSucess,) = payable(investor).call{value:depositedValue}(""); require(refundSucess,"refund failed"); emit Refunded(investor, depositedValue); } function refundAnytime(address investor, uint256 _contributed) internal { // have to see if onlyOwner works //require(state == State.Refunding); //uint256 depositedValue = contributors[investor]; //require(depositedValue > 0, "User has no investment to claim"); uint256 penalty = _contributed.mul(20).div(100); uint256 refundValue = _contributed.sub(penalty); contributors[investor] = 0; // added for V3 -- need to check contributorsTracker[investor] = 0; // added for V3 -- need to check (bool feeContractPay,) = payable(feeContract).call{value:penalty}(""); (bool investorPay,) = payable(investor).call{value:refundValue}(""); require(feeContractPay && investorPay,"anytime refund failed at payment"); emit claimedBack(investor, _contributed); } function finalize(address[2] memory __finalizeInfo, uint256 refPer, bool validFinalize) onlyOwner public returns(uint256) { require(!isFinalized,"already finalized"); require(hasClosed(),"not closed"); referrerAddr = __finalizeInfo[0]; presaleCreator = __finalizeInfo[1]; // uniswapDapAddress = __finalizeInfo[2]; finalizeValid = validFinalize; if (goalReached() && finalizeValid) { setRate(); close(presaleCreator, referrerAddr, refPer); } else { enableRefunds(); } finalizedTime = block.timestamp; emit Finalized(); isFinalized = true; /* if(tokenDropFlag && finalizeValid){ tokenDrop(); } */ return 1; } /* function mintForUniswap(address _uniswapDapp) onlyOwner public { IERC20(token).transfer(_uniswapDapp,uniAmount); } */ function mintForPlatform(address _platform, address _referrer, uint256 _refPer, bool tokenFeeToRef) public onlyOwner returns(bool) { if(!alternateFee){ require(_platform != address(0), "platform addr cant be zero"); uint256 platFee = (presaleAmount*teamFeePer)/100; uint256 refFee; if(tokenFeeToRef){ refFee = platFee*_refPer/100; ERC20(token).transfer(_platform, platFee - (refFee)); ERC20(token).transfer(_referrer, refFee); } else{ ERC20(token).transfer(_platform, platFee); } } return true; } /* function mintForPlatform(address _platform) onlyOwner public { uint256 platformFee = (presaleAmount*teamFeePer)/100; IERC20(token).transfer(_platform,platformFee); } */ function finalizeAnytime(address[3] memory __finalizeInfo, bool validFinalize) onlyOwner public returns(uint256) { require(!isFinalized, "presale already finalized"); // require(hasClosed()); referrerAddr = __finalizeInfo[0]; presaleCreator = __finalizeInfo[1]; // uniswapDapAddress = __finalizeInfo[2]; finalizeValid = validFinalize; enableRefunds(); emit Finalized(); isFinalized = true; return 1; } function enableRefunds() internal { refundEnabled = true; emit RefundsEnabled(); } function setRate() internal{ buyRate = (presaleAmount*(1 ether))/CheckTotalEthRaised(); } function getBackTokens() public { // require(block.timestamp > closingTime.add(burnDeltaTime), "cannot withdraw yet"); require(msg.sender == presaleCreator, "initiator is not presale owner!"); // require(hasClosed(), "presale not closed!"); require(isFinalized, "presale not finalized!"); require(!finalizeValid, "finalize was valid"); require(IERC20(token).transfer(presaleCreator, IERC20(token).balanceOf(address(this))),"cannot transfer token back"); } function selectNativeOnlyFee() public { require(msg.sender == presaleCreator, "initiator is not presale owner!"); require(!isFinalized, "presale already finalized!"); alternateFee = true; teamFeePer = (teamFeePer * nativeMultiplier)/10; } function close(address __Creator, address _referrerAddr, uint256 _refPer) internal { require(!isFinalized,"presale already finalized"); emit Closed(); uint256 feesAmount = address(this).balance.mul(teamFeePer).div(100); if(_refPer > 0){ uint256 refAmount = feesAmount.mul(_refPer).div(100); (bool refPay,) = payable(_referrerAddr).call{value:refAmount}(""); (bool feeContractClosePay,) = payable(feeContract).call{value:feesAmount.sub(refAmount)}(""); require(refPay && feeContractClosePay,"unable to process ref or fee pay"); } else{ (bool feeContractOnlyPay,) = payable(feeContract).call{value:feesAmount}(""); require(feeContractOnlyPay,"unable to process fee pay"); } uint256 uniswapAmount = address(this).balance.mul(uniswapPercentage).div(100); // uint256 GoverningAmount = address(this).balance.mul(gov).div(100); require(address(this).balance >= uniswapAmount, "Not Enough Fund to Transfer"); // require(address(this).balance > GoverningAmount, "Not Enough Fund to Transfer"); // payable(__uniswapDep).transfer(uniswapAmount); AddLiquidity(uniAmount,uniswapAmount); // __GovContract.transfer(GoverningAmount); if(address(this).balance != 0){ (bool creatorPay,) = payable(__Creator).call{value:address(this).balance}(""); require(creatorPay,"unable to pay creator"); } } function goalReached() public view returns(bool) { return weiRaised >= soft_cap; } function presaleEnded() public view returns(bool) { return block.timestamp > endTime; } mapping(address => bool) public validPairPartner; uint256 public hundred = 100; uint256 public locktime; address public ROUTER_ADDRESS; //address public dead = 0x000000000000000000000000000000000000dEaD; address[3] public altAssets; address public storedLPAddress; address public lockerAddress; bool public addLiquidityComplete; address public alternativeCurrency; bool public useAlternativeCurrency; uint256 public returnVal; address public lpLockDeployer; string public logo = " "; function Approve(address _token) internal returns (bool) { uint256 amountIn = 100000000000000000000000000000000000000000000000000000000000000000000000000000; ERC20(_token).approve(ROUTER_ADDRESS, amountIn); return true; } function ApproveLock(address _lp, address _lockDeployer) internal returns (bool) { uint256 amountIn = 100000000000000000000000000000000000000000000000000000000000000000000000000000; ERC20(_lp).approve(_lockDeployer, amountIn); return true; } function getWrapAddr() public view returns (address){ return UniswapRouter02(ROUTER_ADDRESS).WETH(); } function getpair(address _token1, address _token2) internal returns (address) { if (UniswapFactory(UniswapRouter02(ROUTER_ADDRESS).factory()).getPair(_token1, _token2) != address(0)) { return UniswapFactory(UniswapRouter02(ROUTER_ADDRESS).factory()).getPair(_token1, _token2); } else { return UniswapFactory(UniswapRouter02(ROUTER_ADDRESS).factory()).createPair(_token1, _token2); } } function setAlternateCurrency(address _newCurrency) public { require(_newCurrency != address(0),"currency cannot be Zero addr"); // require(swapRouterMap[_swapRouter],"invalid router"); require(validPairPartner[_newCurrency],"invalid asset selected"); require(!addLiquidityComplete,"Liquidity is added already"); require(msg.sender == presaleCreator,"not the presale creator"); // swapRouter_Address = _swapRouter; alternativeCurrency = _newCurrency; useAlternativeCurrency = true; } function revertToNative() public{ require(!addLiquidityComplete,"Liquidity is added already"); require(msg.sender == presaleCreator,"not the presale creator"); useAlternativeCurrency = false; } function getAmountsMinToken(address _tokenAddress, uint256 _ethIN) public view returns(uint256) { // UniswapRouter02 pancakeRouter = UniswapRouter02(_router); // generate the pair path of token -> weth uint256[] memory amountMinArr; uint256 AmountMin; address[] memory path = new address[](2); path[0] = getWrapAddr(); path[1] = address(_tokenAddress); amountMinArr = UniswapRouter02(ROUTER_ADDRESS).getAmountsOut(_ethIN, path); AmountMin = uint256(amountMinArr[1]); return AmountMin; } function swapETHForTokens(uint256 _nativeForDex) private { require(useAlternativeCurrency,"alt currency not selected"); address[] memory path = new address[](2); //path[0] = address(this); path[0] = getWrapAddr(); path[1] = alternativeCurrency; Approve(alternativeCurrency); // make the swap UniswapRouter02(ROUTER_ADDRESS).swapExactETHForTokens{value:_nativeForDex}( getAmountsMinToken(alternativeCurrency,_nativeForDex), path, address(this), block.timestamp + (300) ); returnVal = ERC20(alternativeCurrency).balanceOf(address(this)); } function AddLiquidity(uint256 amountTokenDesired, uint256 nativeForDex) internal { // require(validPairPartner[_pairAlternative], "This is not a valid pair partner"); uint256 amountETH = nativeForDex; uint256 amountETHMin = amountETH - (amountETH * (10) / (100)); //uint256 amountTokenToAddLiq = amountTokenDesired * (hundred) / (extraAmountPerVal); uint256 amountTokenToAddLiq = amountTokenDesired; uint256 amountTokenMin = amountTokenToAddLiq - (amountTokenToAddLiq * (10) / (100)); uint256 LP_WBNB_exp_balance; uint256 LP_token_balance; uint256 tokenToSend; if (useAlternativeCurrency) { swapETHForTokens(nativeForDex); storedLPAddress = getpair(token, alternativeCurrency); LP_WBNB_exp_balance = ERC20(alternativeCurrency).balanceOf(storedLPAddress); LP_token_balance = ERC20(token).balanceOf(storedLPAddress); } else{ storedLPAddress = getpair(token, getWrapAddr()); LP_WBNB_exp_balance = ERC20(getWrapAddr()).balanceOf(storedLPAddress); LP_token_balance = ERC20(token).balanceOf(storedLPAddress); } if (storedLPAddress != address(0x0) && (LP_WBNB_exp_balance > 0 && LP_token_balance <= 0)) { tokenToSend = amountTokenToAddLiq * (LP_WBNB_exp_balance) / (amountETH); ERC20(token).transfer(storedLPAddress, tokenToSend); LPToken(storedLPAddress).sync(); // sync after adding token } Approve(token); if (useAlternativeCurrency) { UniswapRouter02(ROUTER_ADDRESS).addLiquidity(token, alternativeCurrency,amountTokenDesired,ERC20(alternativeCurrency).balanceOf(address(this)),amountTokenDesired,ERC20(alternativeCurrency).balanceOf(address(this)),address(this), block.timestamp + (300)); } else{ UniswapRouter02(ROUTER_ADDRESS).addLiquidityETH{value:amountETH}(token, amountTokenToAddLiq, amountTokenMin, amountETHMin, address(this), block.timestamp + (300)); } addLiquidityComplete = true; ApproveLock(storedLPAddress,lpLockDeployer); lockerAddress = lpLockDeployerInterface(lpLockDeployer).createLPLocker(storedLPAddress,locktime,logo,ERC20(storedLPAddress).balanceOf(address(this))); } /* function getAltAssetData() public view returns(address[] memory, string[] memory){ address[] memory altAssetData = new address[](altAssets.length); // string[] memory altListName = new string[](altAssets.length); string[] memory altListSym = new string[](altAssets.length); for(uint256 i=0;i<altAssets.length;i++){ altAssetData[i] = altAssets[i]; // altListName[i] = ERC20(altAssets[i]).name(); altListSym[i] = ERC20(altAssets[i]).symbol(); } return(altAssetData,altListSym); } */ } contract FairPresaleDapp is Consts, Ownable { using SafeMath for uint256; address public feeContract; address public lpLockDeployer; uint256 public teamFee = 2; // uint256 public extraAmountPer = 2; uint256 public nativeMultiplier = 20; address[3] public altAssets; constructor(address _feeContract, address _lpLockDeployer, address[3] memory _altAssets) { feeContract = _feeContract; lpLockDeployer = _lpLockDeployer; altAssets = _altAssets; } function CreatePresaleFair(address[4] memory presaleAddressInput_Router, uint256[2] memory start_end_time, uint256[5] memory softcap_preAmnt_uniAmnt_min_max_eth, uint256 uniPercentage, uint256[2] memory extraAmountPer_lockTime) public returns(address) { DefiFairCrowdsale PresaleContract = new DefiFairCrowdsale(presaleAddressInput_Router[2], [softcap_preAmnt_uniAmnt_min_max_eth[1],softcap_preAmnt_uniAmnt_min_max_eth[2]], start_end_time, [presaleAddressInput_Router[1],feeContract], [softcap_preAmnt_uniAmnt_min_max_eth[0],softcap_preAmnt_uniAmnt_min_max_eth[3], softcap_preAmnt_uniAmnt_min_max_eth[4]], [uniPercentage,teamFee],[extraAmountPer_lockTime[0],extraAmountPer_lockTime[1],nativeMultiplier],[lpLockDeployer,presaleAddressInput_Router[3]],altAssets); PresaleContract.transferOwnership(presaleAddressInput_Router[0]); return address(PresaleContract); } function CheckBlockTimestamp() public view returns(uint256) { return block.timestamp; } function updateNativeMultiplier(uint256 _newMultiplier) public onlyOwner { nativeMultiplier = _newMultiplier; } function updateTeamFee(uint256 _newTeamFee) public onlyOwner { teamFee = _newTeamFee; } function updateFeeContract(address _newFeeContract) public onlyOwner { feeContract = _newFeeContract; } function updateAltAssets(uint index, address _newAltAsset) public onlyOwner { altAssets[index] = _newAltAsset; } }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 1 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_feeContract","type":"address"},{"internalType":"address","name":"_lpLockDeployer","type":"address"},{"internalType":"address[3]","name":"_altAssets","type":"address[3]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"CheckBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[4]","name":"presaleAddressInput_Router","type":"address[4]"},{"internalType":"uint256[2]","name":"start_end_time","type":"uint256[2]"},{"internalType":"uint256[5]","name":"softcap_preAmnt_uniAmnt_min_max_eth","type":"uint256[5]"},{"internalType":"uint256","name":"uniPercentage","type":"uint256"},{"internalType":"uint256[2]","name":"extraAmountPer_lockTime","type":"uint256[2]"}],"name":"CreatePresaleFair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"altAssets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpLockDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"_newAltAsset","type":"address"}],"name":"updateAltAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeContract","type":"address"}],"name":"updateFeeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMultiplier","type":"uint256"}],"name":"updateNativeMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTeamFee","type":"uint256"}],"name":"updateTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600260045560146005553480156200001b57600080fd5b50604051620061b4380380620061b48339810160408190526200003e9162000139565b60008054336001600160a01b0319918216179091556002805482166001600160a01b0386811691909117909155600380549092169084161781556200008890600690839062000092565b50505050620001ee565b8260038101928215620000dd579160200282015b82811115620000dd57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620000a6565b50620000eb929150620000ef565b5090565b5b80821115620000eb5760008155600101620000f0565b80516001600160a01b03811681146200011e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600060a084860312156200014f57600080fd5b6200015a8462000106565b925060206200016b81860162000106565b925085605f8601126200017d57600080fd5b604051606081016001600160401b0381118282101715620001a257620001a262000123565b6040528060a0870188811115620001b857600080fd5b604088015b81811015620001df57620001d18162000106565b8352918401918401620001bd565b50505080925050509250925092565b615fb680620001fe6000396000f3fe60806040523480156200001157600080fd5b5060043610620000d65760003560e01c806306e2971214620000db5780631ab8f86414620001075780631dfaced4146200012057806325cfdf5e1462000137578063417d4add146200015057806346c96aac1462000167578063715018a6146200017b5780638da5cb5b1462000185578063accef1fa1462000199578063acedf07c14620001a0578063c3abb76614620001b7578063d48f502914620001cb578063d7c94efd14620001e2578063f2fde38b14620001ec578063fc006a8a1462000203575b600080fd5b600254620000ef906001600160a01b031681565b604051620000fe9190620005ae565b60405180910390f35b6200011160055481565b604051908152602001620000fe565b620000ef62000131366004620005c2565b6200021a565b6200014e62000148366004620005c2565b6200023b565b005b6200014e62000161366004620005f9565b62000258565b600154620000ef906001600160a01b031681565b6200014e620002aa565b600054620000ef906001600160a01b031681565b4262000111565b6200014e620001b1366004620005c2565b6200030a565b600354620000ef906001600160a01b031681565b620000ef620001dc3660046200072c565b62000327565b6200011160045481565b6200014e620001fd366004620007e2565b620004d1565b6200014e62000214366004620007e2565b620004f7565b600681600381106200022b57600080fd5b01546001600160a01b0316905081565b6000546001600160a01b031633146200025357600080fd5b600555565b6000546001600160a01b031633146200027057600080fd5b806006836003811062000287576200028762000807565b0180546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b03163314620002c257600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000546001600160a01b031633146200032257600080fd5b600455565b604085810151815180830183526020868101518252868401518183015283518085018552818a01516001600160a01b039081168252600254168183015284516060808201875289518252808a01518285015260808a0151828801528651808801885289815260045481860152875191820190975287518152600096879695948c9493929081018a6001602002015181526020016005548152506040518060400160405280600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020018f6003600481106200040e576200040e62000807565b60200201516001600160a01b031690526040516006906200042f90620005a0565b62000443999897969594939291906200089b565b604051809103906000f08015801562000460573d6000803e3d6000fd5b50875160405163f2fde38b60e01b81529192506001600160a01b0383169163f2fde38b916200049291600401620005ae565b600060405180830381600087803b158015620004ad57600080fd5b505af1158015620004c2573d6000803e3d6000fd5b50929998505050505050505050565b6000546001600160a01b03163314620004e957600080fd5b620004f48162000531565b50565b6000546001600160a01b031633146200050f57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166200054557600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b615628806200095983390190565b6001600160a01b0391909116815260200190565b600060208284031215620005d557600080fd5b5035919050565b80356001600160a01b0381168114620005f457600080fd5b919050565b600080604083850312156200060d57600080fd5b823591506200061f60208401620005dc565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000663576200066362000628565b60405290565b600082601f8301126200067b57600080fd5b604080519081016001600160401b0381118282101715620006a057620006a062000628565b8060405250806040840185811115620006b857600080fd5b845b81811015620006d4578035835260209283019201620006ba565b509195945050505050565b600082601f830112620006f157600080fd5b60405160a081016001600160401b038111828210171562000716576200071662000628565b6040528060a0840185811115620006b857600080fd5b60008060008060006101c086880312156200074657600080fd5b86601f8701126200075657600080fd5b620007606200063e565b8060808801898111156200077357600080fd5b885b8181101562000798576200078981620005dc565b84526020938401930162000775565b50819750620007a88a8262000669565b9650505050620007bc8760c08801620006df565b92506101608601359150620007d687610180880162000669565b90509295509295909350565b600060208284031215620007f557600080fd5b6200080082620005dc565b9392505050565b634e487b7160e01b600052603260045260246000fd5b8060005b60028110156200084257815184526020938401939091019060010162000821565b50505050565b8060005b6002811015620008425781516001600160a01b03168452602093840193909101906001016200084c565b8060005b6003811015620008425781518452602093840193909101906001016200087a565b6001600160a01b038a811682526102808201906020620008be8185018d6200081d565b620008cd606085018c6200081d565b620008dc60a085018b62000848565b620008eb60e085018a62000876565b620008fb6101408501896200081d565b6200090b61018085018862000876565b6200091b6101e085018762000848565b61022084018560005b60038110156200094557815485168352918301916001918201910162000924565b50505050509a995050505050505050505056fe60c0604052600a60809081526908c8292a49882aa9c86960b31b60a0526002906200002b9082620003c1565b50600060125560026014556014601555610258601c55610258601d556064602e55604051806040016040528060018152602001600160fd1b81525060399081620000769190620003c1565b503480156200008457600080fd5b506040516200562838038062005628833981016040819052620000a791620005d3565b600080546001600160a01b03191633179055604080518082019091526020868101518252810186600260200201519052620000e790601690600262000277565b5084516018558651601955602087810151601a55601e80546001600160a01b038c81166001600160a01b03199283161790925560408801516021558851602a805491841691831691909117905588830151602b805491909316911617905584810151601481905585516025558951602655908901516027556064906200016e908262000713565b60275460265462000180919062000713565b6200018c91906200072f565b62000198919062000749565b6028558251620001aa90606462000713565b602955602083810151602f5560408401516015558251603880546001600160a01b03199081166001600160a01b039384161790915591840151603080549093169116179055620001fe6031826003620002ba565b5060005b600381101562000267576001602d600060318460038110620002285762000228620006e7565b01546001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806200025e816200076c565b91505062000202565b5050505050505050505062000788565b8260028101928215620002a8579160200282015b82811115620002a85782518255916020019190600101906200028b565b50620002b692915062000305565b5090565b8260038101928215620002a8579160200282015b82811115620002a857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620002ce565b5b80821115620002b6576000815560010162000306565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd6200031c565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b0381168114620004a557600080fd5b919050565b604080519081016001600160401b0381118282101715620004cf57620004cf6200031c565b60405290565b604051606081016001600160401b0381118282101715620004cf57620004cf6200031c565b600082601f8301126200050c57600080fd5b62000516620004aa565b8060408401858111156200052957600080fd5b845b81811015620005455780518452602093840193016200052b565b509095945050505050565b600082601f8301126200056257600080fd5b6200056c620004aa565b8060408401858111156200057f57600080fd5b845b81811015620005455762000595816200048d565b84526020938401930162000581565b600082601f830112620005b657600080fd5b620005c0620004d5565b8060608401858111156200052957600080fd5b6000806000806000806000806000610280808b8d031215620005f457600080fd5b620005ff8b6200048d565b99506020620006118d828e01620004fa565b9950620006228d60608e01620004fa565b9850620006338d60a08e0162000550565b9750620006448d60e08e01620005a4565b9650620006568d6101408e01620004fa565b9550620006688d6101808e01620005a4565b94506200067a8d6101e08e0162000550565b93508c61023f8d01126200068d57600080fd5b62000697620004d5565b918c0191808e841115620006aa57600080fd5b6102208e015b84811015620006d257620006c4816200048d565b8352918301918301620006b0565b50809450505050509295985092959850929598565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115620007295762000729620006fd565b92915050565b8082028115828204841417620007295762000729620006fd565b6000826200076757634e487b7160e01b600052601260045260246000fd5b500490565b600060018201620007815762000781620006fd565b5060010190565b614e9080620007986000396000f3fe6080604052600436106104215760003560e01c806306e29712146105e45780630f98c9181461061a5780631096f46a1461063e57806310ef82c51461065e5780631265d6e7146106745780631515bc2b146106965780631ab8f864146106b95780631bd49653146106cf5780631dfaced4146106e55780631e12353e146107055780631edd40ae1461073b5780631f4ba804146107505780631f6d494214610766578063249b7c1914610793578063252a02eb146107a85780632698d707146107de5780632a592e9f146107f35780632fc9b686146108205780633197cbb6146108505780633675f29b1461086657806337ce1647146108865780633bff8ed7146108a75780633cb650d0146108d45780634042b66f146108e9578063422099b2146108ff57806346c96aac1461091457806348c54b9d146109345780634c4a386f146109495780634d2a90731461096a5780634de64b811461098a5780634e4153bb146109aa57806351229077146109c057806351fb012d146109e25780635a0e779b146109fc5780635bff9a2714610a1d5780635f9bae3214610a335780636008405914610a4957806361644ca814610a6957806361c533b414610a8d57806363c1805814610aa35780636ac8d0c214610ab85780636e27607a14610ad8578063715018a614610af957806371beb4e114610b0e5780637313ee5a14610b2457806378e2df0e14610b3a57806378e9792514610b505780637d3d652214610b665780637f87bbd614610b805780638190eefd14610ba157806382efbbec14610bbb578063844faace14610bd157806386c5ae2f14610bfe5780638ab1d68114610c1e5780638b6ea1cf14610c3e5780638d4e408314610c5e5780638da5cb5b14610c7d5780639774748014610c9d57806397993fd914610cb2578063995c5e9d14610cd25780639b19251a14610d025780639b33d9d114610d325780639fe4cb9414610d47578063a82524b214610d67578063b138d50014610d7c578063b444e16214610d92578063b5545a3c14610da8578063b7a871c914610dbd578063b89918e014610ded578063b94a6dfe14610e02578063bc2eae0c14610e22578063be11ce2f14610e38578063be5ef81a14610e4d578063bf3f15bf14610e6d578063c3abb76614610e83578063cdfb2b4e14610ea3578063ce7dadd014610eb8578063d6b0f48414610ece578063db37ceec14610ee3578063dc1df26414610ef8578063e132db4114610f1b578063e43252d714610f30578063e4c21cf214610f50578063e5658e1a14610f65578063e580b2b014610696578063ecfd892814610f92578063ef67a5e214610fa8578063f2fde38b14610fc8578063f6e99c0d14610fe8578063fb7f21eb14611008578063fc0c546a1461101d578063fc37987b1461103d578063fcb3747314611053578063fe67a1891461106957600080fd5b366105df57601f5442116104505760405162461bcd60e51b81526004016104479061449c565b60405180910390fd5b336000908152600a602052604090205460ff16156104805760405162461bcd60e51b8152600401610447906144d3565b600c5460ff16156104ba57336000908152600b602052604090205460ff166104ba5760405162461bcd60e51b815260040161044790614506565b346021546104c8919061454a565b3360009081526003602052604090205411156105265760405162461bcd60e51b815260206004820152601d60248201527f636f6e747269627574696f6e206f766572206d617820616c6c6f7765640000006044820152606401610447565b61052f3361107f565b336000908152600360205260408120805434929061054e90849061455d565b9091555050336000908152600460205260408120805434929061057290849061455d565b90915550503360009081526009602052604090205460ff166105dd57600d8054600090815260086020908152604080832080546001600160a01b03191633908117909155835260099091528120805460ff19166001179055815491906105d783614570565b91905055505b005b600080fd5b3480156105f057600080fd5b50602b54610604906001600160a01b031681565b6040516106119190614589565b60405180910390f35b34801561062657600080fd5b5061063060255481565b604051908152602001610611565b34801561064a57600080fd5b50603654610604906001600160a01b031681565b34801561066a57600080fd5b5061063060285481565b34801561068057600080fd5b50610689611227565b60405161061191906145e3565b3480156106a257600080fd5b50601a5442115b6040519015158152602001610611565b3480156106c557600080fd5b5061063060155481565b3480156106db57600080fd5b5061063060375481565b3480156106f157600080fd5b506106046107003660046145f6565b6112b5565b34801561071157600080fd5b506106046107203660046145f6565b6010602052600090815260409020546001600160a01b031681565b34801561074757600080fd5b506105dd6112d5565b34801561075c57600080fd5b5061063060295481565b34801561077257600080fd5b50610630610781366004614624565b60036020526000908152604090205481565b34801561079f57600080fd5b50601a54610630565b3480156107b457600080fd5b506106046107c33660046145f6565b6008602052600090815260409020546001600160a01b031681565b3480156107ea57600080fd5b50601b54610630565b3480156107ff57600080fd5b5061063061080e366004614624565b60056020526000908152604090205481565b34801561082c57600080fd5b506106a961083b366004614624565b600a6020526000908152604090205460ff1681565b34801561085c57600080fd5b50610630601a5481565b34801561087257600080fd5b50603554610604906001600160a01b031681565b34801561089257600080fd5b506036546106a990600160a01b900460ff1681565b3480156108b357600080fd5b506106306108c2366004614624565b60066020526000908152604090205481565b3480156108e057600080fd5b506105dd6114c2565b3480156108f557600080fd5b50610630601b5481565b34801561090b57600080fd5b506105dd611564565b34801561092057600080fd5b50600154610604906001600160a01b031681565b34801561094057600080fd5b506105dd611617565b34801561095557600080fd5b506020546106a990600160201b900460ff1681565b34801561097657600080fd5b50610630610985366004614695565b6117f0565b34801561099657600080fd5b506106306109a5366004614736565b611962565b3480156109b657600080fd5b5061063060125481565b3480156109cc57600080fd5b506109d5611a89565b60405161061191906147a6565b3480156109ee57600080fd5b50600c546106a99060ff1681565b348015610a0857600080fd5b506035546106a990600160a01b900460ff1681565b348015610a2957600080fd5b50610630602e5481565b348015610a3f57600080fd5b50610630601f5481565b348015610a5557600080fd5b506105dd610a64366004614624565b611bae565b348015610a7557600080fd5b50610a7e611cdf565b604051610611939291906147b9565b348015610a9957600080fd5b50610630602f5481565b348015610aaf57600080fd5b506105dd611e58565b348015610ac457600080fd5b506020546106a99062010000900460ff1681565b348015610ae457600080fd5b506020546106a990600160281b900460ff1681565b348015610b0557600080fd5b506105dd612049565b348015610b1a57600080fd5b5061063060215481565b348015610b3057600080fd5b5061063060245481565b348015610b4657600080fd5b5061063060185481565b348015610b5c57600080fd5b5061063060195481565b348015610b7257600080fd5b50601854601b5410156106a9565b348015610b8c57600080fd5b506020546106a9906301000000900460ff1681565b348015610bad57600080fd5b506020546106a99060ff1681565b348015610bc757600080fd5b50610630600e5481565b348015610bdd57600080fd5b50610630610bec366004614624565b60076020526000908152604090205481565b348015610c0a57600080fd5b50610604610c193660046145f6565b6120a8565b348015610c2a57600080fd5b506105dd610c39366004614624565b6120d2565b348015610c4a57600080fd5b50602c54610604906001600160a01b031681565b348015610c6a57600080fd5b506020546106a990610100900460ff1681565b348015610c8957600080fd5b50600054610604906001600160a01b031681565b348015610ca957600080fd5b506105dd61217b565b348015610cbe57600080fd5b50610630610ccd36600461482e565b6121de565b348015610cde57600080fd5b506106a9610ced366004614624565b60096020526000908152604090205460ff1681565b348015610d0e57600080fd5b506106a9610d1d366004614624565b600b6020526000908152604090205460ff1681565b348015610d3e57600080fd5b5061060461229e565b348015610d5357600080fd5b50603454610604906001600160a01b031681565b348015610d7357600080fd5b50601954610630565b348015610d8857600080fd5b5061063060265481565b348015610d9e57600080fd5b50610630601d5481565b348015610db457600080fd5b506105dd612311565b348015610dc957600080fd5b506106a9610dd8366004614624565b602d6020526000908152604090205460ff1681565b348015610df957600080fd5b506105dd6123d2565b348015610e0e57600080fd5b50603054610604906001600160a01b031681565b348015610e2e57600080fd5b50610630600f5481565b348015610e4457600080fd5b506106306127b7565b348015610e5957600080fd5b506105dd610e683660046148c4565b6127c4565b348015610e7957600080fd5b5061063060225481565b348015610e8f57600080fd5b50603854610604906001600160a01b031681565b348015610eaf57600080fd5b506105dd61295b565b348015610ec457600080fd5b5061063060275481565b348015610eda57600080fd5b506105dd6129d0565b348015610eef57600080fd5b50610630612a5f565b348015610f0457600080fd5b50610f0d612a6a565b6040516106119291906148e6565b348015610f2757600080fd5b50601354610630565b348015610f3c57600080fd5b506105dd610f4b366004614624565b612ba9565b348015610f5c57600080fd5b50601854610630565b348015610f7157600080fd5b50610630610f80366004614624565b60046020526000908152604090205481565b348015610f9e57600080fd5b50610630600d5481565b348015610fb457600080fd5b50602a54610604906001600160a01b031681565b348015610fd457600080fd5b506105dd610fe3366004614624565b612c12565b348015610ff457600080fd5b506106a961100336600461493d565b612c32565b34801561101457600080fd5b50610689612e6c565b34801561102957600080fd5b50601e54610604906001600160a01b031681565b34801561104957600080fd5b5061063060135481565b34801561105f57600080fd5b50610630601c5481565b34801561107557600080fd5b5061063060235481565b3332146110ce5760405162461bcd60e51b815260206004820152601e60248201527f63616e277420636f6e747269627574652076696120636f6e74726163747300006044820152606401610447565b601f5442116110ef5760405162461bcd60e51b81526004016104479061449c565b60195442101580156111025750601a5442105b6111435760405162461bcd60e51b815260206004820152601260248201527170726573616c65206e6f742061637469766560701b6044820152606401610447565b336000908152600a602052604090205460ff16156111735760405162461bcd60e51b8152600401610447906144d3565b600c5460ff16156111ad57336000908152600b602052604090205460ff166111ad5760405162461bcd60e51b815260040161044790614506565b346111b88282612e79565b60006111c382612ebb565b905081601b60008282546111d7919061455d565b909155505060408051838152602081018390526001600160a01b0385169133917f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a3505050565b6002805461123490614990565b80601f016020809104026020016040519081016040528092919081815260200182805461126090614990565b80156112ad5780601f10611282576101008083540402835291602001916112ad565b820191906000526020600020905b81548152906001019060200180831161129057829003601f168201915b505050505081565b603181600381106112c557600080fd5b01546001600160a01b0316905081565b336000908152600a602052604090205460ff16156113295760405162461bcd60e51b8152602060048201526011602482015270616c726561647920726566756e6465642160781b6044820152606401610447565b33600090815260036020526040902054806113795760405162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b6044820152606401610447565b602054610100900460ff16156113c65760405162461bcd60e51b8152602060048201526012602482015271616c72656164792066696e616c697a65642160701b6044820152606401610447565b60205462010000900460ff161561141f5760405162461bcd60e51b815260206004820152601d60248201527f616c72656164792073756363657366756c6c792066696e616c697a65640000006044820152606401610447565b601d54601a5461142e91612ede565b42106114795760405162461bcd60e51b815260206004820152601a6024820152797769746864726177616c2077696e646f7720657870697265642160301b6044820152606401610447565b336000908152600660205260409020819055601b546114989082612ede565b601b55336000818152600a60205260409020805460ff191660011790556114bf9082612f01565b50565b602a546001600160a01b031633146114d957600080fd5b6020546301000000900460ff1661152d5760405162461bcd60e51b81526020600482015260186024820152771d995cdd1a5b99c8185b1c9958591e48191a5cd8589b195960421b6044820152606401610447565b602054610100900460ff16156115555760405162461bcd60e51b8152600401610447906149c4565b6020805463ff00000019169055565b602a546001600160a01b0316331461158e5760405162461bcd60e51b8152600401610447906149f7565b602054610100900460ff16156115e35760405162461bcd60e51b815260206004820152601a60248201527970726573616c6520616c72656164792066696e616c697a65642160301b6044820152606401610447565b6020805460ff60281b1916600160281b179055601554601454600a9161160891614a2e565b6116129190614a45565b601455565b602054600160201b900460ff16156116415760405162461bcd60e51b815260040161044790614a67565b6020546301000000900460ff16156116a65760405162461bcd60e51b815260206004820152602260248201527f706c65617365207573652076657374696e67206d6574686f6420746f20636c61604482015261696d60f01b6064820152608401610447565b602054610100900460ff166116cd5760405162461bcd60e51b815260040161044790614a95565b60205462010000900460ff166116f55760405162461bcd60e51b815260040161044790614ac1565b3360009081526003602052604081205490036117235760405162461bcd60e51b815260040161044790614aea565b60135433600090815260036020526040812054909161175691670de0b6b3a7640000916117509190613092565b906130c8565b3360008181526003602052604080822091909155601e54905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb9161179a918590600401614b2b565b6020604051808303816000875af11580156117b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dd9190614b44565b5033600090815260056020526040902055565b600080546001600160a01b0316331461180857600080fd5b602054610100900460ff16156118545760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e48199a5b985b1a5e9959607a1b6044820152606401610447565b601a5442116118925760405162461bcd60e51b815260206004820152600a6024820152691b9bdd0818db1bdcd95960b21b6044820152606401610447565b8351602c80546001600160a01b03199081166001600160a01b0393841617909155602080870151602a80549093169316929092179055805462ff000019166201000084151502179055601854601b54108015906118f7575060205462010000900460ff165b15611926576119046130d4565b602a54602c54611921916001600160a01b039081169116856130fb565b61192e565b61192e613459565b42602355604051600080516020614e3b83398151915290600090a1506020805461ff00191661010017905560019392505050565b6040805160028082526060808301845260009390928492839260208301908036833701905050905061199261229e565b816000815181106119a5576119a5614b61565b60200260200101906001600160a01b031690816001600160a01b03168152505085816001815181106119d9576119d9614b61565b6001600160a01b03928316602091820292909201015260305460405163d06ca61f60e01b815291169063d06ca61f90611a189088908590600401614b77565b600060405180830381865afa158015611a35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a5d9190810190614b98565b925082600181518110611a7257611a72614b61565b602002602001015191508193505050505b92915050565b60606000600e546001600160401b03811115611aa757611aa7614641565b604051908082528060200260200182016040528015611ad0578160200160208202803683370190505b50905060005b600e54811015611ba8576000818152601060209081526040808320546001600160a01b03168352600b90915290205460ff1615611b615760008181526010602052604090205482516001600160a01b0390911690839083908110611b3c57611b3c614b61565b60200260200101906001600160a01b031690816001600160a01b031681525050611b96565b6000828281518110611b7557611b75614b61565b60200260200101906001600160a01b031690816001600160a01b0316815250505b80611ba081614570565b915050611ad6565b50919050565b6001600160a01b038116611c035760405162461bcd60e51b815260206004820152601c60248201527b31bab93932b731bc9031b0b73737ba103132902d32b9379030b2323960211b6044820152606401610447565b6001600160a01b0381166000908152602d602052604090205460ff16611c645760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a5908185cdcd95d081cd95b1958dd195960521b6044820152606401610447565b603554600160a01b900460ff1615611c8e5760405162461bcd60e51b815260040161044790614c3d565b602a546001600160a01b03163314611cb85760405162461bcd60e51b815260040161044790614c71565b603680546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b611ce761445f565b611cef61447e565b6060611cf961445f565b611d0161447e565b50506040805161014081018252601854815260265460208083019190915260165482840152601754606080840191909152601954608080850191909152601a5460a0850152601b5460c085015260135460e08501526027546101008086019190915260255461012086015285519182018652835490810460ff908116151583526201000082048116151594830194909452630100000081048416151595820195909552600160201b90940490911615159083015260028054919291839183918190611dcb90614990565b80601f0160208091040260200160405190810160405280929190818152602001828054611df790614990565b8015611e445780601f10611e1957610100808354040283529160200191611e44565b820191906000526020600020905b815481529060010190602001808311611e2757829003601f168201915b505050505090509450945094505050909192565b602a546001600160a01b03163314611e825760405162461bcd60e51b8152600401610447906149f7565b602054610100900460ff16611ed25760405162461bcd60e51b815260206004820152601660248201527570726573616c65206e6f742066696e616c697a65642160501b6044820152606401610447565b60205462010000900460ff1615611f205760405162461bcd60e51b8152602060048201526012602482015271199a5b985b1a5e99481dd85cc81d985b1a5960721b6044820152606401610447565b601e54602a546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a0823190611f5d903090600401614589565b602060405180830381865afa158015611f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9e9190614ca2565b6040518363ffffffff1660e01b8152600401611fbb929190614b2b565b6020604051808303816000875af1158015611fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffe9190614b44565b6120475760405162461bcd60e51b815260206004820152601a60248201527963616e6e6f74207472616e7366657220746f6b656e206261636b60301b6044820152606401610447565b565b6000546001600160a01b0316331461206057600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b601181815481106120b857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146120e957600080fd5b6001600160a01b0381166000908152600b602052604090205460ff166121455760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e2077686974656c6973742160781b6044820152606401610447565b6001600160a01b0381166000908152600b60205260408120805460ff19169055600f80549161217383614570565b919050555050565b603554600160a01b900460ff16156121a55760405162461bcd60e51b815260040161044790614c3d565b602a546001600160a01b031633146121cf5760405162461bcd60e51b815260040161044790614c71565b6036805460ff60a01b19169055565b600080546001600160a01b031633146121f657600080fd5b602054610100900460ff161561221e5760405162461bcd60e51b8152600401610447906149c4565b8251602c80546001600160a01b03199081166001600160a01b0393841617909155602080860151602a80549093169316929092179055805462ff00001916620100008415150217905561226f613459565b604051600080516020614e3b83398151915290600090a1506020805461ff001916610100179055600192915050565b603054604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156122e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230c9190614cbb565b905090565b602054610100900460ff166123585760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd08199a5b985b1a5e9959609a1b6044820152606401610447565b601854601b541080612373575060205462010000900460ff16155b6123c95760405162461bcd60e51b815260206004820152602160248201527f676f616c2072656163686564206f722070726573616c652073756363656564656044820152601960fa1b6064820152608401610447565b61204733613497565b602054600160201b900460ff16156123fc5760405162461bcd60e51b815260040161044790614a67565b6020546301000000900460ff1661244b5760405162461bcd60e51b81526020600482015260136024820152721d995cdd1a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610447565b602054610100900460ff166124725760405162461bcd60e51b815260040161044790614a95565b60205462010000900460ff1661249a5760405162461bcd60e51b815260040161044790614ac1565b3360009081526003602052604081205490036124c85760405162461bcd60e51b815260040161044790614aea565b602254336000908152600760205260409020541061251c5760405162461bcd60e51b8152602060048201526011602482015270185b1b081d1bdad95b9cc81d995cdd1959607a1b6044820152606401610447565b6000612544600161253e60245461175060235442612ede90919063ffffffff16565b90613633565b9050602254811061255457506022545b3360009081526007602052604081205461256f908390612ede565b905060008111801561258357506022548111155b6125ca5760405162461bcd60e51b81526020600482015260186024820152776e6f7420696e207573657220636c61696d2077696e646f7760401b6044820152606401610447565b3360009081526007602090815260408083208590556022546013546004909352908320546126149261175091869161260e91670de0b6b3a764000091859190613092565b90613092565b601354336000908152600360205260408120549293509161264291670de0b6b3a76400009161175091613092565b9050808211156126945760405162461bcd60e51b815260206004820152601d60248201527f63616e277420636c61696d206d6f7265207468616e20616c6c6f7765640000006044820152606401610447565b6022543360009081526004602052604081205490916126b7916117509087613092565b3360009081526003602052604090205490915081106126e55733600090815260036020526040812055612710565b336000908152600360205260409020546126ff9082612ede565b336000908152600360205260409020555b601e5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906127429033908790600401614b2b565b6020604051808303816000875af1158015612761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127859190614b44565b50336000908152600560205260409020546127a09084613633565b336000908152600560205260409020555050505050565b60006016815b0154905090565b6001821161281e5760405162461bcd60e51b815260206004820152602160248201527f6e756d206f6620766573742068617320746f2062652067727472207468616e206044820152603160f81b6064820152608401610447565b600081116128675760405162461bcd60e51b81526020600482015260166024820152751d995cdd1a5b99c81c195c9a5bd9081a5b9d985b1a5960521b6044820152606401610447565b60195461287690610258612ede565b42106128d25760405162461bcd60e51b815260206004820152602560248201527f63616e277420656e61626c6520766573742061667465722070726573616c65206044820152641cdd185c9d60da1b6064820152608401610447565b6020546301000000900460ff16156129265760405162461bcd60e51b81526020600482015260176024820152761d995cdd1a5b99c8185b1c9958591e48195b98589b1959604a1b6044820152606401610447565b602a546001600160a01b0316331461293d57600080fd5b6020805463ff00000019166301000000179055602291909155602455565b6000546001600160a01b0316331461297257600080fd5b600c5460ff16156129c15760405162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd08185b1c9958591e48195b98589b1959603a1b6044820152606401610447565b600c805460ff19166001179055565b6000546001600160a01b031633146129e757600080fd5b600c5460ff16612a365760405162461bcd60e51b815260206004820152601a6024820152791dda1a5d195b1a5cdd08185b1c9958591e48191a5cd8589b195960321b6044820152606401610447565b600c805460ff19169055601c54612a4d904261455d565b601f556020805460ff19166001179055565b6000601660016127bd565b6060806000600d546001600160401b03811115612a8957612a89614641565b604051908082528060200260200182016040528015612ab2578160200160208202803683370190505b5090506000600d546001600160401b03811115612ad157612ad1614641565b604051908082528060200260200182016040528015612afa578160200160208202803683370190505b50905060005b600d54811015612b9f5760008181526008602052604090205483516001600160a01b0390911690849083908110612b3957612b39614b61565b6001600160a01b039283166020918202929092018101919091526000838152600882526040808220549093168152600390915220548251839083908110612b8257612b82614b61565b602090810291909101015280612b9781614570565b915050612b00565b5090939092509050565b6000546001600160a01b03163314612bc057600080fd5b6001600160a01b0381166000818152600b60209081526040808320805460ff19166001179055600e805484526010909252822080546001600160a01b0319169093179092558154919061217383614570565b6000546001600160a01b03163314612c2957600080fd5b6114bf81613651565b600080546001600160a01b03163314612c4a57600080fd5b602054600160281b900460ff16612e61576001600160a01b038516612cae5760405162461bcd60e51b815260206004820152601a602482015279706c6174666f726d20616464722063616e74206265207a65726f60301b6044820152606401610447565b60006064601454602654612cc29190614a2e565b612ccc9190614a45565b905060008315612de7576064612ce28684614a2e565b612cec9190614a45565b601e549091506001600160a01b031663a9059cbb88612d0b848661454a565b6040518363ffffffff1660e01b8152600401612d28929190614b2b565b6020604051808303816000875af1158015612d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6b9190614b44565b50601e5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612d9e9089908590600401614b2b565b6020604051808303816000875af1158015612dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de19190614b44565b50612e5e565b601e5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612e19908a908690600401614b2b565b6020604051808303816000875af1158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190614b44565b505b50505b506001949350505050565b6039805461123490614990565b601654341015612e8857600080fd5b601754341115612e9757600080fd5b6001600160a01b038216612eaa57600080fd5b80600003612eb757600080fd5b5050565b6000670de0b6b3a764000060135483612ed49190614a2e565b611a839190614a45565b600082821115612ef057612ef0614cd8565b612efa828461454a565b9392505050565b6000612f136064611750846014613092565b90506000612f218383612ede565b6001600160a01b0385811660009081526003602090815260408083208390556004909152808220829055602b549051939450909291169084908381818185875af1925050503d8060008114612f92576040519150601f19603f3d011682016040523d82523d6000602084013e612f97565b606091505b505090506000856001600160a01b03168360405160006040518083038185875af1925050503d8060008114612fe8576040519150601f19603f3d011682016040523d82523d6000602084013e612fed565b606091505b50509050818015612ffb5750805b6130475760405162461bcd60e51b815260206004820181905260248201527f616e7974696d6520726566756e64206661696c6564206174207061796d656e746044820152606401610447565b856001600160a01b03167f7e77c11526f6439d832e432cabb72ef2aaa7e1677ca8b9509c14df61fba190d28660405161308291815260200190565b60405180910390a2505050505050565b6000826000036130a457506000611a83565b6130ae8284614a2e565b9050816130bb8483614a45565b14611a8357611a83614cd8565b6000612efa8284614a45565b601b546026546130ec90670de0b6b3a7640000614a2e565b6130f69190614a45565b601355565b602054610100900460ff16156131235760405162461bcd60e51b8152600401610447906149c4565b6040517f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a90600090a1600061316860646117506014544761309290919063ffffffff16565b9050811561329657600061318160646117508486613092565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d80600081146131d0576040519150601f19603f3d011682016040523d82523d6000602084013e6131d5565b606091505b5050602b549091506000906001600160a01b03166131f38585612ede565b604051600081818185875af1925050503d806000811461322f576040519150601f19603f3d011682016040523d82523d6000602084013e613234565b606091505b505090508180156132425750805b61328e5760405162461bcd60e51b815260206004820181905260248201527f756e61626c6520746f2070726f6365737320726566206f7220666565207061796044820152606401610447565b505050613337565b602b546040516000916001600160a01b03169083908381818185875af1925050503d80600081146132e3576040519150601f19603f3d011682016040523d82523d6000602084013e6132e8565b606091505b50509050806133355760405162461bcd60e51b8152602060048201526019602482015278756e61626c6520746f2070726f63657373206665652070617960381b6044820152606401610447565b505b600061335360646117506025544761309290919063ffffffff16565b9050804710156133a35760405162461bcd60e51b815260206004820152601b60248201527a2737ba1022b737bab3b410233ab732103a37902a3930b739b332b960291b6044820152606401610447565b6133af602754826136bf565b4715613452576000856001600160a01b03164760405160006040518083038185875af1925050503d8060008114613402576040519150601f19603f3d011682016040523d82523d6000602084013e613407565b606091505b50509050806134505760405162461bcd60e51b81526020600482015260156024820152743ab730b13632903a37903830bc9031b932b0ba37b960591b6044820152606401610447565b505b5050505050565b6020805460ff60201b1916600160201b1790556040517f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8990600090a1565b602054600160201b900460ff166134e55760405162461bcd60e51b81526020600482015260126024820152711c99599d5b99081b9bdd08195b98589b195960721b6044820152606401610447565b6001600160a01b0381166000908152600360205260409020548061354b5760405162461bcd60e51b815260206004820152601f60248201527f5573657220686173206e6f20696e766573746d656e7420746f20636c61696d006044820152606401610447565b6001600160a01b0382166000818152600360205260408082208290555190919083908381818185875af1925050503d80600081146135a5576040519150601f19603f3d011682016040523d82523d6000602084013e6135aa565b606091505b50509050806135eb5760405162461bcd60e51b815260206004820152600d60248201526c1c99599d5b990819985a5b1959609a1b6044820152606401610447565b826001600160a01b03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518360405161362691815260200190565b60405180910390a2505050565b600061363f828461455d565b905082811015611a8357611a83614cd8565b6001600160a01b03811661366457600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80600060646136cf83600a614a2e565b6136d99190614a45565b6136e3908361454a565b905083600060646136f583600a614a2e565b6136ff9190614a45565b613709908361454a565b90506000806000603660149054906101000a900460ff161561384d5761372e88613e89565b601e5460365461374a916001600160a01b039081169116614081565b603480546001600160a01b0319166001600160a01b039283169081179091556036546040516370a0823160e01b81529216916370a082319161378e91600401614589565b602060405180830381865afa1580156137ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cf9190614ca2565b601e546034546040516370a0823160e01b81529295506001600160a01b03918216926370a0823192613805921690600401614589565b602060405180830381865afa158015613822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138469190614ca2565b915061397e565b601e5461386a906001600160a01b031661386561229e565b614081565b603480546001600160a01b0319166001600160a01b039290921691909117905561389261229e565b6034546040516370a0823160e01b81526001600160a01b03928316926370a08231926138c392911690600401614589565b602060405180830381865afa1580156138e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139049190614ca2565b601e546034546040516370a0823160e01b81529295506001600160a01b03918216926370a082319261393a921690600401614589565b602060405180830381865afa158015613957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397b9190614ca2565b91505b6034546001600160a01b0316158015906139a157506000831180156139a1575081155b15613aa057866139b18487614a2e565b6139bb9190614a45565b601e5460345460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926139f39216908590600401614b2b565b6020604051808303816000875af1158015613a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a369190614b44565b50603460009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613a8757600080fd5b505af1158015613a9b573d6000803e3d6000fd5b505050505b601e54613ab5906001600160a01b031661432f565b50603654600160a01b900460ff1615613c8657603054601e546036546040516370a0823160e01b81526001600160a01b039384169363e8e337009381169216908d9082906370a0823190613b0d903090600401614589565b602060405180830381865afa158015613b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4e9190614ca2565b8e603660009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401613b909190614589565b602060405180830381865afa158015613bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd19190614ca2565b30613bde4261012c61455d565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1158015613c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7e9190614cee565b505050613d47565b603054601e546001600160a01b039182169163f305d719918a911688888b30613cb14261012c61455d565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015613d1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d439190614cee565b5050505b6035805460ff60a01b1916600160a01b179055603454603854613d76916001600160a01b0390811691166143cf565b50603854603454602f546040516370a0823160e01b81526001600160a01b0393841693638a4e6e569316919060399083906370a0823190613dbb903090600401614589565b602060405180830381865afa158015613dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dfc9190614ca2565b6040518563ffffffff1660e01b8152600401613e1b9493929190614d1c565b6020604051808303816000875af1158015613e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5e9190614cbb565b603580546001600160a01b0319166001600160a01b0392909216919091179055505050505050505050565b603654600160a01b900460ff16613ede5760405162461bcd60e51b8152602060048201526019602482015278185b1d0818dd5c9c995b98de481b9bdd081cd95b1958dd1959603a1b6044820152606401610447565b604080516002808252606082018352600092602083019080368337019050509050613f0761229e565b81600081518110613f1a57613f1a614b61565b6001600160a01b039283166020918202929092010152603654825191169082906001908110613f4b57613f4b614b61565b6001600160a01b039283166020918202929092010152603654613f6e911661432f565b506030546036546001600160a01b0391821691637ff36ab5918591613f94911682611962565b8430613fa24261012c61455d565b6040518663ffffffff1660e01b8152600401613fc19493929190614deb565b60006040518083038185885af1158015613fdf573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526140089190810190614b98565b506036546040516370a0823160e01b81526001600160a01b03909116906370a0823190614039903090600401614589565b602060405180830381865afa158015614056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407a9190614ca2565b6037555050565b6000806001600160a01b0316603060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141049190614cbb565b6001600160a01b031663e6a4390585856040518363ffffffff1660e01b8152600401614131929190614e20565b602060405180830381865afa15801561414e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141729190614cbb565b6001600160a01b03161461426c57603060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f79190614cbb565b6001600160a01b031663e6a4390584846040518363ffffffff1660e01b8152600401614224929190614e20565b602060405180830381865afa158015614241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142659190614cbb565b9050611a83565b603060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e39190614cbb565b6001600160a01b031663c9c6539684846040518363ffffffff1660e01b8152600401614310929190614e20565b6020604051808303816000875af1158015614241573d6000803e3d6000fd5b60305460405163095ea7b360e01b81526000917606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b916001600160a01b038581169263095ea7b39261438292909116908590600401614b2b565b6020604051808303816000875af11580156143a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c59190614b44565b5060019392505050565b60405163095ea7b360e01b81526000907606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b906001600160a01b0385169063095ea7b39061441c9086908590600401614b2b565b6020604051808303816000875af115801561443b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e619190614b44565b604051806101400160405280600a906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6020808252601e908201527f496e2077686974656c6973742064697361626c656420636f6f6c204f66660000604082015260600190565b60208082526019908201527855736572207573656420616e7974696d6520726566756e642160381b604082015260600190565b6020808252601490820152731d5cd95c881b9bdd081dda1a5d195b1a5cdd195960621b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a8357611a83614534565b80820180821115611a8357611a83614534565b60006001820161458257614582614534565b5060010190565b6001600160a01b0391909116815260200190565b6000815180845260005b818110156145c3576020818501810151868301820152016145a7565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612efa602083018461459d565b60006020828403121561460857600080fd5b5035919050565b6001600160a01b03811681146114bf57600080fd5b60006020828403121561463657600080fd5b8135612efa8161460f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561467f5761467f614641565b604052919050565b80151581146114bf57600080fd5b6000806000608084860312156146aa57600080fd5b84601f8501126146b957600080fd5b604080519081016001600160401b03811182821017156146db576146db614641565b80604052508060408601878111156146f257600080fd5b865b818110156147155780356147078161460f565b8352602092830192016146f4565b5091945050359150606084013561472b81614687565b809150509250925092565b6000806040838503121561474957600080fd5b82356147548161460f565b946020939093013593505050565b600081518084526020808501945080840160005b8381101561479b5781516001600160a01b031687529582019590820190600101614776565b509495945050505050565b602081526000612efa6020830184614762565b60006101e08286835b600a8110156147e15781518352602092830192909101906001016147c2565b50505061014083018560005b600481101561480e57815115158352602092830192909101906001016147ed565b505050806101c08401526148248184018561459d565b9695505050505050565b6000806080838503121561484157600080fd5b83601f84011261485057600080fd5b604051606081016001600160401b038111828210171561487257614872614641565b60405280606085018681111561488757600080fd5b855b818110156148aa57803561489c8161460f565b835260209283019201614889565b5091935050356148b981614687565b809150509250929050565b600080604083850312156148d757600080fd5b50508035926020909101359150565b6040815260006148f96040830185614762565b82810360208481019190915284518083528582019282019060005b8181101561493057845183529383019391830191600101614914565b5090979650505050505050565b6000806000806080858703121561495357600080fd5b843561495e8161460f565b9350602085013561496e8161460f565b925060408501359150606085013561498581614687565b939692955090935050565b600181811c908216806149a457607f821691505b602082108103611ba857634e487b7160e01b600052602260045260246000fd5b6020808252601990820152781c1c995cd85b1948185b1c9958591e48199a5b985b1a5e9959603a1b604082015260600190565b6020808252601f908201527f696e69746961746f72206973206e6f742070726573616c65206f776e65722100604082015260600190565b8082028115828204841417611a8357611a83614534565b600082614a6257634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601490820152731c1c995cd85b19481dd85cc81c99599d5b99195960621b604082015260600190565b6020808252601290820152714e6f742046696e616c697a6564207965742160701b604082015260600190565b6020808252600f908201526e70726573616c65204661696c65642160881b604082015260600190565b60208082526021908201527f7573657220686173206e6f206d6f726520746f6b656e7320746f20636c61696d6040820152602160f81b606082015260800190565b6001600160a01b03929092168252602082015260400190565b600060208284031215614b5657600080fd5b8151612efa81614687565b634e487b7160e01b600052603260045260246000fd5b828152604060208201526000614b906040830184614762565b949350505050565b60006020808385031215614bab57600080fd5b82516001600160401b0380821115614bc257600080fd5b818501915085601f830112614bd657600080fd5b815181811115614be857614be8614641565b8060051b9150614bf9848301614657565b8181529183018401918481019088841115614c1357600080fd5b938501935b83851015614c3157845182529385019390850190614c18565b98975050505050505050565b6020808252601a90820152794c697175696469747920697320616464656420616c726561647960301b604082015260600190565b6020808252601790820152763737ba103a343290383932b9b0b6329031b932b0ba37b960491b604082015260600190565b600060208284031215614cb457600080fd5b5051919050565b600060208284031215614ccd57600080fd5b8151612efa8161460f565b634e487b7160e01b600052600160045260246000fd5b600080600060608486031215614d0357600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03851681526020808201859052608060408301528354600091908290600181811c9082811680614d5457607f831692505b8583108103614d7157634e487b7160e01b85526022600452602485fd5b6080880183905260a08801818015614d905760018114614da657614dd1565b60ff198616825284151560051b82019650614dd1565b60008c81526020902060005b86811015614dcb57815484820152908501908901614db2565b83019750505b505050505050809250505082606083015295945050505050565b848152608060208201526000614e046080830186614762565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b039283168152911660208201526040019056fe6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b17681a26469706673582212207a8f82111da54d62d44b739c96232a35a95b62d7dffb748c060e859c3960488864736f6c63430008110033a26469706673582212206c51ac8ce2ad14960f65cc81caeeb948315c970a9abb233f6572aad73066792264736f6c634300081100330000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef000000000000000000000000a27ea368c4198a288eb552d642b1e5acc29912d400000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620000d65760003560e01c806306e2971214620000db5780631ab8f86414620001075780631dfaced4146200012057806325cfdf5e1462000137578063417d4add146200015057806346c96aac1462000167578063715018a6146200017b5780638da5cb5b1462000185578063accef1fa1462000199578063acedf07c14620001a0578063c3abb76614620001b7578063d48f502914620001cb578063d7c94efd14620001e2578063f2fde38b14620001ec578063fc006a8a1462000203575b600080fd5b600254620000ef906001600160a01b031681565b604051620000fe9190620005ae565b60405180910390f35b6200011160055481565b604051908152602001620000fe565b620000ef62000131366004620005c2565b6200021a565b6200014e62000148366004620005c2565b6200023b565b005b6200014e62000161366004620005f9565b62000258565b600154620000ef906001600160a01b031681565b6200014e620002aa565b600054620000ef906001600160a01b031681565b4262000111565b6200014e620001b1366004620005c2565b6200030a565b600354620000ef906001600160a01b031681565b620000ef620001dc3660046200072c565b62000327565b6200011160045481565b6200014e620001fd366004620007e2565b620004d1565b6200014e62000214366004620007e2565b620004f7565b600681600381106200022b57600080fd5b01546001600160a01b0316905081565b6000546001600160a01b031633146200025357600080fd5b600555565b6000546001600160a01b031633146200027057600080fd5b806006836003811062000287576200028762000807565b0180546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b03163314620002c257600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000546001600160a01b031633146200032257600080fd5b600455565b604085810151815180830183526020868101518252868401518183015283518085018552818a01516001600160a01b039081168252600254168183015284516060808201875289518252808a01518285015260808a0151828801528651808801885289815260045481860152875191820190975287518152600096879695948c9493929081018a6001602002015181526020016005548152506040518060400160405280600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020018f6003600481106200040e576200040e62000807565b60200201516001600160a01b031690526040516006906200042f90620005a0565b62000443999897969594939291906200089b565b604051809103906000f08015801562000460573d6000803e3d6000fd5b50875160405163f2fde38b60e01b81529192506001600160a01b0383169163f2fde38b916200049291600401620005ae565b600060405180830381600087803b158015620004ad57600080fd5b505af1158015620004c2573d6000803e3d6000fd5b50929998505050505050505050565b6000546001600160a01b03163314620004e957600080fd5b620004f48162000531565b50565b6000546001600160a01b031633146200050f57600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166200054557600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b615628806200095983390190565b6001600160a01b0391909116815260200190565b600060208284031215620005d557600080fd5b5035919050565b80356001600160a01b0381168114620005f457600080fd5b919050565b600080604083850312156200060d57600080fd5b823591506200061f60208401620005dc565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171562000663576200066362000628565b60405290565b600082601f8301126200067b57600080fd5b604080519081016001600160401b0381118282101715620006a057620006a062000628565b8060405250806040840185811115620006b857600080fd5b845b81811015620006d4578035835260209283019201620006ba565b509195945050505050565b600082601f830112620006f157600080fd5b60405160a081016001600160401b038111828210171562000716576200071662000628565b6040528060a0840185811115620006b857600080fd5b60008060008060006101c086880312156200074657600080fd5b86601f8701126200075657600080fd5b620007606200063e565b8060808801898111156200077357600080fd5b885b8181101562000798576200078981620005dc565b84526020938401930162000775565b50819750620007a88a8262000669565b9650505050620007bc8760c08801620006df565b92506101608601359150620007d687610180880162000669565b90509295509295909350565b600060208284031215620007f557600080fd5b6200080082620005dc565b9392505050565b634e487b7160e01b600052603260045260246000fd5b8060005b60028110156200084257815184526020938401939091019060010162000821565b50505050565b8060005b6002811015620008425781516001600160a01b03168452602093840193909101906001016200084c565b8060005b6003811015620008425781518452602093840193909101906001016200087a565b6001600160a01b038a811682526102808201906020620008be8185018d6200081d565b620008cd606085018c6200081d565b620008dc60a085018b62000848565b620008eb60e085018a62000876565b620008fb6101408501896200081d565b6200090b61018085018862000876565b6200091b6101e085018762000848565b61022084018560005b60038110156200094557815485168352918301916001918201910162000924565b50505050509a995050505050505050505056fe60c0604052600a60809081526908c8292a49882aa9c86960b31b60a0526002906200002b9082620003c1565b50600060125560026014556014601555610258601c55610258601d556064602e55604051806040016040528060018152602001600160fd1b81525060399081620000769190620003c1565b503480156200008457600080fd5b506040516200562838038062005628833981016040819052620000a791620005d3565b600080546001600160a01b03191633179055604080518082019091526020868101518252810186600260200201519052620000e790601690600262000277565b5084516018558651601955602087810151601a55601e80546001600160a01b038c81166001600160a01b03199283161790925560408801516021558851602a805491841691831691909117905588830151602b805491909316911617905584810151601481905585516025558951602655908901516027556064906200016e908262000713565b60275460265462000180919062000713565b6200018c91906200072f565b62000198919062000749565b6028558251620001aa90606462000713565b602955602083810151602f5560408401516015558251603880546001600160a01b03199081166001600160a01b039384161790915591840151603080549093169116179055620001fe6031826003620002ba565b5060005b600381101562000267576001602d600060318460038110620002285762000228620006e7565b01546001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806200025e816200076c565b91505062000202565b5050505050505050505062000788565b8260028101928215620002a8579160200282015b82811115620002a85782518255916020019190600101906200028b565b50620002b692915062000305565b5090565b8260038101928215620002a8579160200282015b82811115620002a857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620002ce565b5b80821115620002b6576000815560010162000306565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200034757607f821691505b6020821081036200036857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003bc57600081815260208120601f850160051c81016020861015620003975750805b601f850160051c820191505b81811015620003b857828155600101620003a3565b5050505b505050565b81516001600160401b03811115620003dd57620003dd6200031c565b620003f581620003ee845462000332565b846200036e565b602080601f8311600181146200042d5760008415620004145750858301515b600019600386901b1c1916600185901b178555620003b8565b600085815260208120601f198616915b828110156200045e578886015182559484019460019091019084016200043d565b50858210156200047d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b0381168114620004a557600080fd5b919050565b604080519081016001600160401b0381118282101715620004cf57620004cf6200031c565b60405290565b604051606081016001600160401b0381118282101715620004cf57620004cf6200031c565b600082601f8301126200050c57600080fd5b62000516620004aa565b8060408401858111156200052957600080fd5b845b81811015620005455780518452602093840193016200052b565b509095945050505050565b600082601f8301126200056257600080fd5b6200056c620004aa565b8060408401858111156200057f57600080fd5b845b81811015620005455762000595816200048d565b84526020938401930162000581565b600082601f830112620005b657600080fd5b620005c0620004d5565b8060608401858111156200052957600080fd5b6000806000806000806000806000610280808b8d031215620005f457600080fd5b620005ff8b6200048d565b99506020620006118d828e01620004fa565b9950620006228d60608e01620004fa565b9850620006338d60a08e0162000550565b9750620006448d60e08e01620005a4565b9650620006568d6101408e01620004fa565b9550620006688d6101808e01620005a4565b94506200067a8d6101e08e0162000550565b93508c61023f8d01126200068d57600080fd5b62000697620004d5565b918c0191808e841115620006aa57600080fd5b6102208e015b84811015620006d257620006c4816200048d565b8352918301918301620006b0565b50809450505050509295985092959850929598565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115620007295762000729620006fd565b92915050565b8082028115828204841417620007295762000729620006fd565b6000826200076757634e487b7160e01b600052601260045260246000fd5b500490565b600060018201620007815762000781620006fd565b5060010190565b614e9080620007986000396000f3fe6080604052600436106104215760003560e01c806306e29712146105e45780630f98c9181461061a5780631096f46a1461063e57806310ef82c51461065e5780631265d6e7146106745780631515bc2b146106965780631ab8f864146106b95780631bd49653146106cf5780631dfaced4146106e55780631e12353e146107055780631edd40ae1461073b5780631f4ba804146107505780631f6d494214610766578063249b7c1914610793578063252a02eb146107a85780632698d707146107de5780632a592e9f146107f35780632fc9b686146108205780633197cbb6146108505780633675f29b1461086657806337ce1647146108865780633bff8ed7146108a75780633cb650d0146108d45780634042b66f146108e9578063422099b2146108ff57806346c96aac1461091457806348c54b9d146109345780634c4a386f146109495780634d2a90731461096a5780634de64b811461098a5780634e4153bb146109aa57806351229077146109c057806351fb012d146109e25780635a0e779b146109fc5780635bff9a2714610a1d5780635f9bae3214610a335780636008405914610a4957806361644ca814610a6957806361c533b414610a8d57806363c1805814610aa35780636ac8d0c214610ab85780636e27607a14610ad8578063715018a614610af957806371beb4e114610b0e5780637313ee5a14610b2457806378e2df0e14610b3a57806378e9792514610b505780637d3d652214610b665780637f87bbd614610b805780638190eefd14610ba157806382efbbec14610bbb578063844faace14610bd157806386c5ae2f14610bfe5780638ab1d68114610c1e5780638b6ea1cf14610c3e5780638d4e408314610c5e5780638da5cb5b14610c7d5780639774748014610c9d57806397993fd914610cb2578063995c5e9d14610cd25780639b19251a14610d025780639b33d9d114610d325780639fe4cb9414610d47578063a82524b214610d67578063b138d50014610d7c578063b444e16214610d92578063b5545a3c14610da8578063b7a871c914610dbd578063b89918e014610ded578063b94a6dfe14610e02578063bc2eae0c14610e22578063be11ce2f14610e38578063be5ef81a14610e4d578063bf3f15bf14610e6d578063c3abb76614610e83578063cdfb2b4e14610ea3578063ce7dadd014610eb8578063d6b0f48414610ece578063db37ceec14610ee3578063dc1df26414610ef8578063e132db4114610f1b578063e43252d714610f30578063e4c21cf214610f50578063e5658e1a14610f65578063e580b2b014610696578063ecfd892814610f92578063ef67a5e214610fa8578063f2fde38b14610fc8578063f6e99c0d14610fe8578063fb7f21eb14611008578063fc0c546a1461101d578063fc37987b1461103d578063fcb3747314611053578063fe67a1891461106957600080fd5b366105df57601f5442116104505760405162461bcd60e51b81526004016104479061449c565b60405180910390fd5b336000908152600a602052604090205460ff16156104805760405162461bcd60e51b8152600401610447906144d3565b600c5460ff16156104ba57336000908152600b602052604090205460ff166104ba5760405162461bcd60e51b815260040161044790614506565b346021546104c8919061454a565b3360009081526003602052604090205411156105265760405162461bcd60e51b815260206004820152601d60248201527f636f6e747269627574696f6e206f766572206d617820616c6c6f7765640000006044820152606401610447565b61052f3361107f565b336000908152600360205260408120805434929061054e90849061455d565b9091555050336000908152600460205260408120805434929061057290849061455d565b90915550503360009081526009602052604090205460ff166105dd57600d8054600090815260086020908152604080832080546001600160a01b03191633908117909155835260099091528120805460ff19166001179055815491906105d783614570565b91905055505b005b600080fd5b3480156105f057600080fd5b50602b54610604906001600160a01b031681565b6040516106119190614589565b60405180910390f35b34801561062657600080fd5b5061063060255481565b604051908152602001610611565b34801561064a57600080fd5b50603654610604906001600160a01b031681565b34801561066a57600080fd5b5061063060285481565b34801561068057600080fd5b50610689611227565b60405161061191906145e3565b3480156106a257600080fd5b50601a5442115b6040519015158152602001610611565b3480156106c557600080fd5b5061063060155481565b3480156106db57600080fd5b5061063060375481565b3480156106f157600080fd5b506106046107003660046145f6565b6112b5565b34801561071157600080fd5b506106046107203660046145f6565b6010602052600090815260409020546001600160a01b031681565b34801561074757600080fd5b506105dd6112d5565b34801561075c57600080fd5b5061063060295481565b34801561077257600080fd5b50610630610781366004614624565b60036020526000908152604090205481565b34801561079f57600080fd5b50601a54610630565b3480156107b457600080fd5b506106046107c33660046145f6565b6008602052600090815260409020546001600160a01b031681565b3480156107ea57600080fd5b50601b54610630565b3480156107ff57600080fd5b5061063061080e366004614624565b60056020526000908152604090205481565b34801561082c57600080fd5b506106a961083b366004614624565b600a6020526000908152604090205460ff1681565b34801561085c57600080fd5b50610630601a5481565b34801561087257600080fd5b50603554610604906001600160a01b031681565b34801561089257600080fd5b506036546106a990600160a01b900460ff1681565b3480156108b357600080fd5b506106306108c2366004614624565b60066020526000908152604090205481565b3480156108e057600080fd5b506105dd6114c2565b3480156108f557600080fd5b50610630601b5481565b34801561090b57600080fd5b506105dd611564565b34801561092057600080fd5b50600154610604906001600160a01b031681565b34801561094057600080fd5b506105dd611617565b34801561095557600080fd5b506020546106a990600160201b900460ff1681565b34801561097657600080fd5b50610630610985366004614695565b6117f0565b34801561099657600080fd5b506106306109a5366004614736565b611962565b3480156109b657600080fd5b5061063060125481565b3480156109cc57600080fd5b506109d5611a89565b60405161061191906147a6565b3480156109ee57600080fd5b50600c546106a99060ff1681565b348015610a0857600080fd5b506035546106a990600160a01b900460ff1681565b348015610a2957600080fd5b50610630602e5481565b348015610a3f57600080fd5b50610630601f5481565b348015610a5557600080fd5b506105dd610a64366004614624565b611bae565b348015610a7557600080fd5b50610a7e611cdf565b604051610611939291906147b9565b348015610a9957600080fd5b50610630602f5481565b348015610aaf57600080fd5b506105dd611e58565b348015610ac457600080fd5b506020546106a99062010000900460ff1681565b348015610ae457600080fd5b506020546106a990600160281b900460ff1681565b348015610b0557600080fd5b506105dd612049565b348015610b1a57600080fd5b5061063060215481565b348015610b3057600080fd5b5061063060245481565b348015610b4657600080fd5b5061063060185481565b348015610b5c57600080fd5b5061063060195481565b348015610b7257600080fd5b50601854601b5410156106a9565b348015610b8c57600080fd5b506020546106a9906301000000900460ff1681565b348015610bad57600080fd5b506020546106a99060ff1681565b348015610bc757600080fd5b50610630600e5481565b348015610bdd57600080fd5b50610630610bec366004614624565b60076020526000908152604090205481565b348015610c0a57600080fd5b50610604610c193660046145f6565b6120a8565b348015610c2a57600080fd5b506105dd610c39366004614624565b6120d2565b348015610c4a57600080fd5b50602c54610604906001600160a01b031681565b348015610c6a57600080fd5b506020546106a990610100900460ff1681565b348015610c8957600080fd5b50600054610604906001600160a01b031681565b348015610ca957600080fd5b506105dd61217b565b348015610cbe57600080fd5b50610630610ccd36600461482e565b6121de565b348015610cde57600080fd5b506106a9610ced366004614624565b60096020526000908152604090205460ff1681565b348015610d0e57600080fd5b506106a9610d1d366004614624565b600b6020526000908152604090205460ff1681565b348015610d3e57600080fd5b5061060461229e565b348015610d5357600080fd5b50603454610604906001600160a01b031681565b348015610d7357600080fd5b50601954610630565b348015610d8857600080fd5b5061063060265481565b348015610d9e57600080fd5b50610630601d5481565b348015610db457600080fd5b506105dd612311565b348015610dc957600080fd5b506106a9610dd8366004614624565b602d6020526000908152604090205460ff1681565b348015610df957600080fd5b506105dd6123d2565b348015610e0e57600080fd5b50603054610604906001600160a01b031681565b348015610e2e57600080fd5b50610630600f5481565b348015610e4457600080fd5b506106306127b7565b348015610e5957600080fd5b506105dd610e683660046148c4565b6127c4565b348015610e7957600080fd5b5061063060225481565b348015610e8f57600080fd5b50603854610604906001600160a01b031681565b348015610eaf57600080fd5b506105dd61295b565b348015610ec457600080fd5b5061063060275481565b348015610eda57600080fd5b506105dd6129d0565b348015610eef57600080fd5b50610630612a5f565b348015610f0457600080fd5b50610f0d612a6a565b6040516106119291906148e6565b348015610f2757600080fd5b50601354610630565b348015610f3c57600080fd5b506105dd610f4b366004614624565b612ba9565b348015610f5c57600080fd5b50601854610630565b348015610f7157600080fd5b50610630610f80366004614624565b60046020526000908152604090205481565b348015610f9e57600080fd5b50610630600d5481565b348015610fb457600080fd5b50602a54610604906001600160a01b031681565b348015610fd457600080fd5b506105dd610fe3366004614624565b612c12565b348015610ff457600080fd5b506106a961100336600461493d565b612c32565b34801561101457600080fd5b50610689612e6c565b34801561102957600080fd5b50601e54610604906001600160a01b031681565b34801561104957600080fd5b5061063060135481565b34801561105f57600080fd5b50610630601c5481565b34801561107557600080fd5b5061063060235481565b3332146110ce5760405162461bcd60e51b815260206004820152601e60248201527f63616e277420636f6e747269627574652076696120636f6e74726163747300006044820152606401610447565b601f5442116110ef5760405162461bcd60e51b81526004016104479061449c565b60195442101580156111025750601a5442105b6111435760405162461bcd60e51b815260206004820152601260248201527170726573616c65206e6f742061637469766560701b6044820152606401610447565b336000908152600a602052604090205460ff16156111735760405162461bcd60e51b8152600401610447906144d3565b600c5460ff16156111ad57336000908152600b602052604090205460ff166111ad5760405162461bcd60e51b815260040161044790614506565b346111b88282612e79565b60006111c382612ebb565b905081601b60008282546111d7919061455d565b909155505060408051838152602081018390526001600160a01b0385169133917f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a3505050565b6002805461123490614990565b80601f016020809104026020016040519081016040528092919081815260200182805461126090614990565b80156112ad5780601f10611282576101008083540402835291602001916112ad565b820191906000526020600020905b81548152906001019060200180831161129057829003601f168201915b505050505081565b603181600381106112c557600080fd5b01546001600160a01b0316905081565b336000908152600a602052604090205460ff16156113295760405162461bcd60e51b8152602060048201526011602482015270616c726561647920726566756e6465642160781b6044820152606401610447565b33600090815260036020526040902054806113795760405162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b6044820152606401610447565b602054610100900460ff16156113c65760405162461bcd60e51b8152602060048201526012602482015271616c72656164792066696e616c697a65642160701b6044820152606401610447565b60205462010000900460ff161561141f5760405162461bcd60e51b815260206004820152601d60248201527f616c72656164792073756363657366756c6c792066696e616c697a65640000006044820152606401610447565b601d54601a5461142e91612ede565b42106114795760405162461bcd60e51b815260206004820152601a6024820152797769746864726177616c2077696e646f7720657870697265642160301b6044820152606401610447565b336000908152600660205260409020819055601b546114989082612ede565b601b55336000818152600a60205260409020805460ff191660011790556114bf9082612f01565b50565b602a546001600160a01b031633146114d957600080fd5b6020546301000000900460ff1661152d5760405162461bcd60e51b81526020600482015260186024820152771d995cdd1a5b99c8185b1c9958591e48191a5cd8589b195960421b6044820152606401610447565b602054610100900460ff16156115555760405162461bcd60e51b8152600401610447906149c4565b6020805463ff00000019169055565b602a546001600160a01b0316331461158e5760405162461bcd60e51b8152600401610447906149f7565b602054610100900460ff16156115e35760405162461bcd60e51b815260206004820152601a60248201527970726573616c6520616c72656164792066696e616c697a65642160301b6044820152606401610447565b6020805460ff60281b1916600160281b179055601554601454600a9161160891614a2e565b6116129190614a45565b601455565b602054600160201b900460ff16156116415760405162461bcd60e51b815260040161044790614a67565b6020546301000000900460ff16156116a65760405162461bcd60e51b815260206004820152602260248201527f706c65617365207573652076657374696e67206d6574686f6420746f20636c61604482015261696d60f01b6064820152608401610447565b602054610100900460ff166116cd5760405162461bcd60e51b815260040161044790614a95565b60205462010000900460ff166116f55760405162461bcd60e51b815260040161044790614ac1565b3360009081526003602052604081205490036117235760405162461bcd60e51b815260040161044790614aea565b60135433600090815260036020526040812054909161175691670de0b6b3a7640000916117509190613092565b906130c8565b3360008181526003602052604080822091909155601e54905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb9161179a918590600401614b2b565b6020604051808303816000875af11580156117b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dd9190614b44565b5033600090815260056020526040902055565b600080546001600160a01b0316331461180857600080fd5b602054610100900460ff16156118545760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e48199a5b985b1a5e9959607a1b6044820152606401610447565b601a5442116118925760405162461bcd60e51b815260206004820152600a6024820152691b9bdd0818db1bdcd95960b21b6044820152606401610447565b8351602c80546001600160a01b03199081166001600160a01b0393841617909155602080870151602a80549093169316929092179055805462ff000019166201000084151502179055601854601b54108015906118f7575060205462010000900460ff165b15611926576119046130d4565b602a54602c54611921916001600160a01b039081169116856130fb565b61192e565b61192e613459565b42602355604051600080516020614e3b83398151915290600090a1506020805461ff00191661010017905560019392505050565b6040805160028082526060808301845260009390928492839260208301908036833701905050905061199261229e565b816000815181106119a5576119a5614b61565b60200260200101906001600160a01b031690816001600160a01b03168152505085816001815181106119d9576119d9614b61565b6001600160a01b03928316602091820292909201015260305460405163d06ca61f60e01b815291169063d06ca61f90611a189088908590600401614b77565b600060405180830381865afa158015611a35573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a5d9190810190614b98565b925082600181518110611a7257611a72614b61565b602002602001015191508193505050505b92915050565b60606000600e546001600160401b03811115611aa757611aa7614641565b604051908082528060200260200182016040528015611ad0578160200160208202803683370190505b50905060005b600e54811015611ba8576000818152601060209081526040808320546001600160a01b03168352600b90915290205460ff1615611b615760008181526010602052604090205482516001600160a01b0390911690839083908110611b3c57611b3c614b61565b60200260200101906001600160a01b031690816001600160a01b031681525050611b96565b6000828281518110611b7557611b75614b61565b60200260200101906001600160a01b031690816001600160a01b0316815250505b80611ba081614570565b915050611ad6565b50919050565b6001600160a01b038116611c035760405162461bcd60e51b815260206004820152601c60248201527b31bab93932b731bc9031b0b73737ba103132902d32b9379030b2323960211b6044820152606401610447565b6001600160a01b0381166000908152602d602052604090205460ff16611c645760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a5908185cdcd95d081cd95b1958dd195960521b6044820152606401610447565b603554600160a01b900460ff1615611c8e5760405162461bcd60e51b815260040161044790614c3d565b602a546001600160a01b03163314611cb85760405162461bcd60e51b815260040161044790614c71565b603680546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b611ce761445f565b611cef61447e565b6060611cf961445f565b611d0161447e565b50506040805161014081018252601854815260265460208083019190915260165482840152601754606080840191909152601954608080850191909152601a5460a0850152601b5460c085015260135460e08501526027546101008086019190915260255461012086015285519182018652835490810460ff908116151583526201000082048116151594830194909452630100000081048416151595820195909552600160201b90940490911615159083015260028054919291839183918190611dcb90614990565b80601f0160208091040260200160405190810160405280929190818152602001828054611df790614990565b8015611e445780601f10611e1957610100808354040283529160200191611e44565b820191906000526020600020905b815481529060010190602001808311611e2757829003601f168201915b505050505090509450945094505050909192565b602a546001600160a01b03163314611e825760405162461bcd60e51b8152600401610447906149f7565b602054610100900460ff16611ed25760405162461bcd60e51b815260206004820152601660248201527570726573616c65206e6f742066696e616c697a65642160501b6044820152606401610447565b60205462010000900460ff1615611f205760405162461bcd60e51b8152602060048201526012602482015271199a5b985b1a5e99481dd85cc81d985b1a5960721b6044820152606401610447565b601e54602a546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a0823190611f5d903090600401614589565b602060405180830381865afa158015611f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9e9190614ca2565b6040518363ffffffff1660e01b8152600401611fbb929190614b2b565b6020604051808303816000875af1158015611fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffe9190614b44565b6120475760405162461bcd60e51b815260206004820152601a60248201527963616e6e6f74207472616e7366657220746f6b656e206261636b60301b6044820152606401610447565b565b6000546001600160a01b0316331461206057600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b601181815481106120b857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146120e957600080fd5b6001600160a01b0381166000908152600b602052604090205460ff166121455760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e2077686974656c6973742160781b6044820152606401610447565b6001600160a01b0381166000908152600b60205260408120805460ff19169055600f80549161217383614570565b919050555050565b603554600160a01b900460ff16156121a55760405162461bcd60e51b815260040161044790614c3d565b602a546001600160a01b031633146121cf5760405162461bcd60e51b815260040161044790614c71565b6036805460ff60a01b19169055565b600080546001600160a01b031633146121f657600080fd5b602054610100900460ff161561221e5760405162461bcd60e51b8152600401610447906149c4565b8251602c80546001600160a01b03199081166001600160a01b0393841617909155602080860151602a80549093169316929092179055805462ff00001916620100008415150217905561226f613459565b604051600080516020614e3b83398151915290600090a1506020805461ff001916610100179055600192915050565b603054604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156122e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230c9190614cbb565b905090565b602054610100900460ff166123585760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd08199a5b985b1a5e9959609a1b6044820152606401610447565b601854601b541080612373575060205462010000900460ff16155b6123c95760405162461bcd60e51b815260206004820152602160248201527f676f616c2072656163686564206f722070726573616c652073756363656564656044820152601960fa1b6064820152608401610447565b61204733613497565b602054600160201b900460ff16156123fc5760405162461bcd60e51b815260040161044790614a67565b6020546301000000900460ff1661244b5760405162461bcd60e51b81526020600482015260136024820152721d995cdd1a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610447565b602054610100900460ff166124725760405162461bcd60e51b815260040161044790614a95565b60205462010000900460ff1661249a5760405162461bcd60e51b815260040161044790614ac1565b3360009081526003602052604081205490036124c85760405162461bcd60e51b815260040161044790614aea565b602254336000908152600760205260409020541061251c5760405162461bcd60e51b8152602060048201526011602482015270185b1b081d1bdad95b9cc81d995cdd1959607a1b6044820152606401610447565b6000612544600161253e60245461175060235442612ede90919063ffffffff16565b90613633565b9050602254811061255457506022545b3360009081526007602052604081205461256f908390612ede565b905060008111801561258357506022548111155b6125ca5760405162461bcd60e51b81526020600482015260186024820152776e6f7420696e207573657220636c61696d2077696e646f7760401b6044820152606401610447565b3360009081526007602090815260408083208590556022546013546004909352908320546126149261175091869161260e91670de0b6b3a764000091859190613092565b90613092565b601354336000908152600360205260408120549293509161264291670de0b6b3a76400009161175091613092565b9050808211156126945760405162461bcd60e51b815260206004820152601d60248201527f63616e277420636c61696d206d6f7265207468616e20616c6c6f7765640000006044820152606401610447565b6022543360009081526004602052604081205490916126b7916117509087613092565b3360009081526003602052604090205490915081106126e55733600090815260036020526040812055612710565b336000908152600360205260409020546126ff9082612ede565b336000908152600360205260409020555b601e5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906127429033908790600401614b2b565b6020604051808303816000875af1158015612761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127859190614b44565b50336000908152600560205260409020546127a09084613633565b336000908152600560205260409020555050505050565b60006016815b0154905090565b6001821161281e5760405162461bcd60e51b815260206004820152602160248201527f6e756d206f6620766573742068617320746f2062652067727472207468616e206044820152603160f81b6064820152608401610447565b600081116128675760405162461bcd60e51b81526020600482015260166024820152751d995cdd1a5b99c81c195c9a5bd9081a5b9d985b1a5960521b6044820152606401610447565b60195461287690610258612ede565b42106128d25760405162461bcd60e51b815260206004820152602560248201527f63616e277420656e61626c6520766573742061667465722070726573616c65206044820152641cdd185c9d60da1b6064820152608401610447565b6020546301000000900460ff16156129265760405162461bcd60e51b81526020600482015260176024820152761d995cdd1a5b99c8185b1c9958591e48195b98589b1959604a1b6044820152606401610447565b602a546001600160a01b0316331461293d57600080fd5b6020805463ff00000019166301000000179055602291909155602455565b6000546001600160a01b0316331461297257600080fd5b600c5460ff16156129c15760405162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd08185b1c9958591e48195b98589b1959603a1b6044820152606401610447565b600c805460ff19166001179055565b6000546001600160a01b031633146129e757600080fd5b600c5460ff16612a365760405162461bcd60e51b815260206004820152601a6024820152791dda1a5d195b1a5cdd08185b1c9958591e48191a5cd8589b195960321b6044820152606401610447565b600c805460ff19169055601c54612a4d904261455d565b601f556020805460ff19166001179055565b6000601660016127bd565b6060806000600d546001600160401b03811115612a8957612a89614641565b604051908082528060200260200182016040528015612ab2578160200160208202803683370190505b5090506000600d546001600160401b03811115612ad157612ad1614641565b604051908082528060200260200182016040528015612afa578160200160208202803683370190505b50905060005b600d54811015612b9f5760008181526008602052604090205483516001600160a01b0390911690849083908110612b3957612b39614b61565b6001600160a01b039283166020918202929092018101919091526000838152600882526040808220549093168152600390915220548251839083908110612b8257612b82614b61565b602090810291909101015280612b9781614570565b915050612b00565b5090939092509050565b6000546001600160a01b03163314612bc057600080fd5b6001600160a01b0381166000818152600b60209081526040808320805460ff19166001179055600e805484526010909252822080546001600160a01b0319169093179092558154919061217383614570565b6000546001600160a01b03163314612c2957600080fd5b6114bf81613651565b600080546001600160a01b03163314612c4a57600080fd5b602054600160281b900460ff16612e61576001600160a01b038516612cae5760405162461bcd60e51b815260206004820152601a602482015279706c6174666f726d20616464722063616e74206265207a65726f60301b6044820152606401610447565b60006064601454602654612cc29190614a2e565b612ccc9190614a45565b905060008315612de7576064612ce28684614a2e565b612cec9190614a45565b601e549091506001600160a01b031663a9059cbb88612d0b848661454a565b6040518363ffffffff1660e01b8152600401612d28929190614b2b565b6020604051808303816000875af1158015612d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6b9190614b44565b50601e5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612d9e9089908590600401614b2b565b6020604051808303816000875af1158015612dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de19190614b44565b50612e5e565b601e5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612e19908a908690600401614b2b565b6020604051808303816000875af1158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190614b44565b505b50505b506001949350505050565b6039805461123490614990565b601654341015612e8857600080fd5b601754341115612e9757600080fd5b6001600160a01b038216612eaa57600080fd5b80600003612eb757600080fd5b5050565b6000670de0b6b3a764000060135483612ed49190614a2e565b611a839190614a45565b600082821115612ef057612ef0614cd8565b612efa828461454a565b9392505050565b6000612f136064611750846014613092565b90506000612f218383612ede565b6001600160a01b0385811660009081526003602090815260408083208390556004909152808220829055602b549051939450909291169084908381818185875af1925050503d8060008114612f92576040519150601f19603f3d011682016040523d82523d6000602084013e612f97565b606091505b505090506000856001600160a01b03168360405160006040518083038185875af1925050503d8060008114612fe8576040519150601f19603f3d011682016040523d82523d6000602084013e612fed565b606091505b50509050818015612ffb5750805b6130475760405162461bcd60e51b815260206004820181905260248201527f616e7974696d6520726566756e64206661696c6564206174207061796d656e746044820152606401610447565b856001600160a01b03167f7e77c11526f6439d832e432cabb72ef2aaa7e1677ca8b9509c14df61fba190d28660405161308291815260200190565b60405180910390a2505050505050565b6000826000036130a457506000611a83565b6130ae8284614a2e565b9050816130bb8483614a45565b14611a8357611a83614cd8565b6000612efa8284614a45565b601b546026546130ec90670de0b6b3a7640000614a2e565b6130f69190614a45565b601355565b602054610100900460ff16156131235760405162461bcd60e51b8152600401610447906149c4565b6040517f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a90600090a1600061316860646117506014544761309290919063ffffffff16565b9050811561329657600061318160646117508486613092565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d80600081146131d0576040519150601f19603f3d011682016040523d82523d6000602084013e6131d5565b606091505b5050602b549091506000906001600160a01b03166131f38585612ede565b604051600081818185875af1925050503d806000811461322f576040519150601f19603f3d011682016040523d82523d6000602084013e613234565b606091505b505090508180156132425750805b61328e5760405162461bcd60e51b815260206004820181905260248201527f756e61626c6520746f2070726f6365737320726566206f7220666565207061796044820152606401610447565b505050613337565b602b546040516000916001600160a01b03169083908381818185875af1925050503d80600081146132e3576040519150601f19603f3d011682016040523d82523d6000602084013e6132e8565b606091505b50509050806133355760405162461bcd60e51b8152602060048201526019602482015278756e61626c6520746f2070726f63657373206665652070617960381b6044820152606401610447565b505b600061335360646117506025544761309290919063ffffffff16565b9050804710156133a35760405162461bcd60e51b815260206004820152601b60248201527a2737ba1022b737bab3b410233ab732103a37902a3930b739b332b960291b6044820152606401610447565b6133af602754826136bf565b4715613452576000856001600160a01b03164760405160006040518083038185875af1925050503d8060008114613402576040519150601f19603f3d011682016040523d82523d6000602084013e613407565b606091505b50509050806134505760405162461bcd60e51b81526020600482015260156024820152743ab730b13632903a37903830bc9031b932b0ba37b960591b6044820152606401610447565b505b5050505050565b6020805460ff60201b1916600160201b1790556040517f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8990600090a1565b602054600160201b900460ff166134e55760405162461bcd60e51b81526020600482015260126024820152711c99599d5b99081b9bdd08195b98589b195960721b6044820152606401610447565b6001600160a01b0381166000908152600360205260409020548061354b5760405162461bcd60e51b815260206004820152601f60248201527f5573657220686173206e6f20696e766573746d656e7420746f20636c61696d006044820152606401610447565b6001600160a01b0382166000818152600360205260408082208290555190919083908381818185875af1925050503d80600081146135a5576040519150601f19603f3d011682016040523d82523d6000602084013e6135aa565b606091505b50509050806135eb5760405162461bcd60e51b815260206004820152600d60248201526c1c99599d5b990819985a5b1959609a1b6044820152606401610447565b826001600160a01b03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518360405161362691815260200190565b60405180910390a2505050565b600061363f828461455d565b905082811015611a8357611a83614cd8565b6001600160a01b03811661366457600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80600060646136cf83600a614a2e565b6136d99190614a45565b6136e3908361454a565b905083600060646136f583600a614a2e565b6136ff9190614a45565b613709908361454a565b90506000806000603660149054906101000a900460ff161561384d5761372e88613e89565b601e5460365461374a916001600160a01b039081169116614081565b603480546001600160a01b0319166001600160a01b039283169081179091556036546040516370a0823160e01b81529216916370a082319161378e91600401614589565b602060405180830381865afa1580156137ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cf9190614ca2565b601e546034546040516370a0823160e01b81529295506001600160a01b03918216926370a0823192613805921690600401614589565b602060405180830381865afa158015613822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138469190614ca2565b915061397e565b601e5461386a906001600160a01b031661386561229e565b614081565b603480546001600160a01b0319166001600160a01b039290921691909117905561389261229e565b6034546040516370a0823160e01b81526001600160a01b03928316926370a08231926138c392911690600401614589565b602060405180830381865afa1580156138e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139049190614ca2565b601e546034546040516370a0823160e01b81529295506001600160a01b03918216926370a082319261393a921690600401614589565b602060405180830381865afa158015613957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397b9190614ca2565b91505b6034546001600160a01b0316158015906139a157506000831180156139a1575081155b15613aa057866139b18487614a2e565b6139bb9190614a45565b601e5460345460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926139f39216908590600401614b2b565b6020604051808303816000875af1158015613a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a369190614b44565b50603460009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613a8757600080fd5b505af1158015613a9b573d6000803e3d6000fd5b505050505b601e54613ab5906001600160a01b031661432f565b50603654600160a01b900460ff1615613c8657603054601e546036546040516370a0823160e01b81526001600160a01b039384169363e8e337009381169216908d9082906370a0823190613b0d903090600401614589565b602060405180830381865afa158015613b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4e9190614ca2565b8e603660009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401613b909190614589565b602060405180830381865afa158015613bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd19190614ca2565b30613bde4261012c61455d565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1158015613c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7e9190614cee565b505050613d47565b603054601e546001600160a01b039182169163f305d719918a911688888b30613cb14261012c61455d565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015613d1e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d439190614cee565b5050505b6035805460ff60a01b1916600160a01b179055603454603854613d76916001600160a01b0390811691166143cf565b50603854603454602f546040516370a0823160e01b81526001600160a01b0393841693638a4e6e569316919060399083906370a0823190613dbb903090600401614589565b602060405180830381865afa158015613dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dfc9190614ca2565b6040518563ffffffff1660e01b8152600401613e1b9493929190614d1c565b6020604051808303816000875af1158015613e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5e9190614cbb565b603580546001600160a01b0319166001600160a01b0392909216919091179055505050505050505050565b603654600160a01b900460ff16613ede5760405162461bcd60e51b8152602060048201526019602482015278185b1d0818dd5c9c995b98de481b9bdd081cd95b1958dd1959603a1b6044820152606401610447565b604080516002808252606082018352600092602083019080368337019050509050613f0761229e565b81600081518110613f1a57613f1a614b61565b6001600160a01b039283166020918202929092010152603654825191169082906001908110613f4b57613f4b614b61565b6001600160a01b039283166020918202929092010152603654613f6e911661432f565b506030546036546001600160a01b0391821691637ff36ab5918591613f94911682611962565b8430613fa24261012c61455d565b6040518663ffffffff1660e01b8152600401613fc19493929190614deb565b60006040518083038185885af1158015613fdf573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526140089190810190614b98565b506036546040516370a0823160e01b81526001600160a01b03909116906370a0823190614039903090600401614589565b602060405180830381865afa158015614056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407a9190614ca2565b6037555050565b6000806001600160a01b0316603060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141049190614cbb565b6001600160a01b031663e6a4390585856040518363ffffffff1660e01b8152600401614131929190614e20565b602060405180830381865afa15801561414e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141729190614cbb565b6001600160a01b03161461426c57603060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f79190614cbb565b6001600160a01b031663e6a4390584846040518363ffffffff1660e01b8152600401614224929190614e20565b602060405180830381865afa158015614241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142659190614cbb565b9050611a83565b603060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e39190614cbb565b6001600160a01b031663c9c6539684846040518363ffffffff1660e01b8152600401614310929190614e20565b6020604051808303816000875af1158015614241573d6000803e3d6000fd5b60305460405163095ea7b360e01b81526000917606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b916001600160a01b038581169263095ea7b39261438292909116908590600401614b2b565b6020604051808303816000875af11580156143a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143c59190614b44565b5060019392505050565b60405163095ea7b360e01b81526000907606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b906001600160a01b0385169063095ea7b39061441c9086908590600401614b2b565b6020604051808303816000875af115801561443b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e619190614b44565b604051806101400160405280600a906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6020808252601e908201527f496e2077686974656c6973742064697361626c656420636f6f6c204f66660000604082015260600190565b60208082526019908201527855736572207573656420616e7974696d6520726566756e642160381b604082015260600190565b6020808252601490820152731d5cd95c881b9bdd081dda1a5d195b1a5cdd195960621b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a8357611a83614534565b80820180821115611a8357611a83614534565b60006001820161458257614582614534565b5060010190565b6001600160a01b0391909116815260200190565b6000815180845260005b818110156145c3576020818501810151868301820152016145a7565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612efa602083018461459d565b60006020828403121561460857600080fd5b5035919050565b6001600160a01b03811681146114bf57600080fd5b60006020828403121561463657600080fd5b8135612efa8161460f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561467f5761467f614641565b604052919050565b80151581146114bf57600080fd5b6000806000608084860312156146aa57600080fd5b84601f8501126146b957600080fd5b604080519081016001600160401b03811182821017156146db576146db614641565b80604052508060408601878111156146f257600080fd5b865b818110156147155780356147078161460f565b8352602092830192016146f4565b5091945050359150606084013561472b81614687565b809150509250925092565b6000806040838503121561474957600080fd5b82356147548161460f565b946020939093013593505050565b600081518084526020808501945080840160005b8381101561479b5781516001600160a01b031687529582019590820190600101614776565b509495945050505050565b602081526000612efa6020830184614762565b60006101e08286835b600a8110156147e15781518352602092830192909101906001016147c2565b50505061014083018560005b600481101561480e57815115158352602092830192909101906001016147ed565b505050806101c08401526148248184018561459d565b9695505050505050565b6000806080838503121561484157600080fd5b83601f84011261485057600080fd5b604051606081016001600160401b038111828210171561487257614872614641565b60405280606085018681111561488757600080fd5b855b818110156148aa57803561489c8161460f565b835260209283019201614889565b5091935050356148b981614687565b809150509250929050565b600080604083850312156148d757600080fd5b50508035926020909101359150565b6040815260006148f96040830185614762565b82810360208481019190915284518083528582019282019060005b8181101561493057845183529383019391830191600101614914565b5090979650505050505050565b6000806000806080858703121561495357600080fd5b843561495e8161460f565b9350602085013561496e8161460f565b925060408501359150606085013561498581614687565b939692955090935050565b600181811c908216806149a457607f821691505b602082108103611ba857634e487b7160e01b600052602260045260246000fd5b6020808252601990820152781c1c995cd85b1948185b1c9958591e48199a5b985b1a5e9959603a1b604082015260600190565b6020808252601f908201527f696e69746961746f72206973206e6f742070726573616c65206f776e65722100604082015260600190565b8082028115828204841417611a8357611a83614534565b600082614a6257634e487b7160e01b600052601260045260246000fd5b500490565b6020808252601490820152731c1c995cd85b19481dd85cc81c99599d5b99195960621b604082015260600190565b6020808252601290820152714e6f742046696e616c697a6564207965742160701b604082015260600190565b6020808252600f908201526e70726573616c65204661696c65642160881b604082015260600190565b60208082526021908201527f7573657220686173206e6f206d6f726520746f6b656e7320746f20636c61696d6040820152602160f81b606082015260800190565b6001600160a01b03929092168252602082015260400190565b600060208284031215614b5657600080fd5b8151612efa81614687565b634e487b7160e01b600052603260045260246000fd5b828152604060208201526000614b906040830184614762565b949350505050565b60006020808385031215614bab57600080fd5b82516001600160401b0380821115614bc257600080fd5b818501915085601f830112614bd657600080fd5b815181811115614be857614be8614641565b8060051b9150614bf9848301614657565b8181529183018401918481019088841115614c1357600080fd5b938501935b83851015614c3157845182529385019390850190614c18565b98975050505050505050565b6020808252601a90820152794c697175696469747920697320616464656420616c726561647960301b604082015260600190565b6020808252601790820152763737ba103a343290383932b9b0b6329031b932b0ba37b960491b604082015260600190565b600060208284031215614cb457600080fd5b5051919050565b600060208284031215614ccd57600080fd5b8151612efa8161460f565b634e487b7160e01b600052600160045260246000fd5b600080600060608486031215614d0357600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03851681526020808201859052608060408301528354600091908290600181811c9082811680614d5457607f831692505b8583108103614d7157634e487b7160e01b85526022600452602485fd5b6080880183905260a08801818015614d905760018114614da657614dd1565b60ff198616825284151560051b82019650614dd1565b60008c81526020902060005b86811015614dcb57815484820152908501908901614db2565b83019750505b505050505050809250505082606083015295945050505050565b848152608060208201526000614e046080830186614762565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b039283168152911660208201526040019056fe6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b17681a26469706673582212207a8f82111da54d62d44b739c96232a35a95b62d7dffb748c060e859c3960488864736f6c63430008110033a26469706673582212206c51ac8ce2ad14960f65cc81caeeb948315c970a9abb233f6572aad73066792264736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef000000000000000000000000a27ea368c4198a288eb552d642b1e5acc29912d400000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
-----Decoded View---------------
Arg [0] : _feeContract (address): 0x0FEbB541Ef3632925cD67DAf9e82CdC8Ec7a71ef
Arg [1] : _lpLockDeployer (address): 0xa27eA368c4198a288eb552D642B1E5aCc29912D4
Arg [2] : _altAssets (address[3]): 0x29219dd400f2Bf60E5a23d13Be72B486D4038894,0x29219dd400f2Bf60E5a23d13Be72B486D4038894,0x29219dd400f2Bf60E5a23d13Be72B486D4038894
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef
Arg [1] : 000000000000000000000000a27ea368c4198a288eb552d642b1e5acc29912d4
Arg [2] : 00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Arg [3] : 00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Arg [4] : 00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.