ETH Price: $2,623.78 (+1.30%)

Token

HEDGE (HAIR)
 

Overview

Max Total Supply

5,577.706747623037066834 HAIR

Holders

34

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.49427537216632374 HAIR

Value
$0.00
0x12a584dbd41d53f84673e4266481d6afbb8fac46
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HEDGE

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-28
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

// $MULLET
// - 1 billion supply
// - no contract owner
// - 100% of tokens in initial LP
// - LP locked in contract permanently
// - V3 LP with a 5 ETH initial market cap
// - 1,000,000 token max transfer for 5 minutes
// https://mullet.capital

// $HAIR
// - fully liquid without the need for a DEX
// - 10% buy/sell tax
// - tax distributed to token holders in the form of ETH
// - referral link, own 100 $HAIR or more to get 3% of referred buys/reinvests
// https://hedge.mullet.capital


interface Callable {
	function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool);
}

interface Router {
	struct ExactInputSingleParams {
		address tokenIn;
		address tokenOut;
		uint24 fee;
		address recipient;
		uint256 amountIn;
		uint256 amountOutMinimum;
		uint160 sqrtPriceLimitX96;
	}
	function factory() external view returns (address);
	function positionManager() external view returns (address);
	function WETH9() external view returns (address);
	function exactInputSingle(ExactInputSingleParams calldata) external payable returns (uint256);
}

interface Factory {
	function createPool(address _tokenA, address _tokenB, uint24 _fee) external returns (address);
}

interface Pool {
	function initialize(uint160 _sqrtPriceX96) external;
}

interface PositionManager {
	struct MintParams {
		address token0;
		address token1;
		uint24 fee;
		int24 tickLower;
		int24 tickUpper;
		uint256 amount0Desired;
		uint256 amount1Desired;
		uint256 amount0Min;
		uint256 amount1Min;
		address recipient;
		uint256 deadline;
	}
	struct CollectParams {
		uint256 tokenId;
		address recipient;
		uint128 amount0Max;
		uint128 amount1Max;
	}
	function mint(MintParams calldata) external payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);
	function collect(CollectParams calldata) external payable returns (uint256 amount0, uint256 amount1);
}

interface ERC20 {
	function balanceOf(address) external view returns (uint256);
	function transfer(address, uint256) external returns (bool);
}

interface WETH is ERC20 {
	function withdraw(uint256) external;
}


contract HEDGE {

	uint256 constant private FLOAT_SCALAR = 2**64;
	uint256 constant private BUY_TAX = 10;
	uint256 constant private SELL_TAX = 10;
	uint256 constant private TEAM_TAX = 1;
	uint256 constant private REF_TAX = 3;
	uint256 constant private REF_REQUIREMENT = 1e20; // 100 HAIR
	uint256 constant private STARTING_PRICE = 0.001 ether;
	uint256 constant private INCREMENT = 1e10; // 10 Gwei
	address constant private BUYBACK_ADDRESS = 0xA093Ea0904250084411F98d9195567e8b4406696;

	string constant public name = "HEDGE";
	string constant public symbol = "HAIR";
	uint8 constant public decimals = 18;

	struct User {
		uint256 balance;
		mapping(address => uint256) allowance;
		int256 scaledPayout;
		address ref;
	}

	struct Info {
		uint256 totalSupply;
		mapping(address => User) users;
		uint256 scaledEthPerToken;
		address team;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);
	event Buy(address indexed buyer, uint256 amountSpent, uint256 tokensReceived);
	event Sell(address indexed seller, uint256 tokensSpent, uint256 amountReceived);
	event Withdraw(address indexed user, uint256 amount);
	event Reinvest(address indexed user, uint256 amount);


	constructor() {
		info.team = msg.sender;
	}
	
	receive() external payable {
		buy();
	}
	
	function buy() public payable returns (uint256) {
		return buy(address(0x0));
	}
	
	function buy(address _ref) public payable returns (uint256) {
		require(msg.value > 0);
		if (_ref != address(0x0) && _ref != msg.sender && _ref != refOf(msg.sender)) {
			info.users[msg.sender].ref = _ref;
		}
		return _buy(msg.value);
	}

	function sell(uint256 _tokens) external returns (uint256) {
		return _sell(_tokens);
	}

	function withdraw() external returns (uint256) {
		uint256 _rewards = rewardsOf(msg.sender);
		require(_rewards >= 0);
		info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR);
		payable(msg.sender).transfer(_rewards);
		emit Withdraw(msg.sender, _rewards);
		return _rewards;
	}

	function reinvest() external returns (uint256) {
		uint256 _rewards = rewardsOf(msg.sender);
		require(_rewards >= 0);
		info.users[msg.sender].scaledPayout += int256(_rewards * FLOAT_SCALAR);
		emit Reinvest(msg.sender, _rewards);
		return _buy(_rewards);
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		return _transfer(msg.sender, _to, _tokens);
	}

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		info.users[msg.sender].allowance[_spender] = _tokens;
		emit Approval(msg.sender, _spender, _tokens);
		return true;
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		require(allowance(_from, msg.sender) >= _tokens);
		info.users[_from].allowance[msg.sender] -= _tokens;
		return _transfer(_from, _to, _tokens);
	}

	function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
		_transfer(msg.sender, _to, _tokens);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Callable(_to).tokenCallback(msg.sender, _tokens, _data));
		}
		return true;
	}


	function team() public view returns (address) {
		return info.team;
	}

	function buybackAddress() public pure returns (address) {
		return BUYBACK_ADDRESS;
	}

	function totalSupply() public view returns (uint256) {
		return info.totalSupply;
	}

	function currentPrices() public view returns (uint256 truePrice, uint256 buyPrice, uint256 sellPrice) {
		truePrice = STARTING_PRICE + INCREMENT * totalSupply() / 1e18;
		buyPrice = truePrice * 100 / (100 - BUY_TAX);
		sellPrice = truePrice * (100 - SELL_TAX) / 100;
	}

	function refOf(address _user) public view returns (address) {
		return info.users[_user].ref;
	}

	function balanceOf(address _user) public view returns (uint256) {
		return info.users[_user].balance;
	}

	function rewardsOf(address _user) public view returns (uint256) {
		return uint256(int256(info.scaledEthPerToken * balanceOf(_user)) - info.users[_user].scaledPayout) / FLOAT_SCALAR;
	}

	function allInfoFor(address _user) public view returns (uint256 contractBalance, uint256 totalTokenSupply, uint256 truePrice, uint256 buyPrice, uint256 sellPrice, uint256 userETH, uint256 userBalance, uint256 userRewards, uint256 userLiquidValue, address userRef) {
		contractBalance = address(this).balance;
		totalTokenSupply = totalSupply();
		(truePrice, buyPrice, sellPrice) = currentPrices();
		userETH = _user.balance;
		userBalance = balanceOf(_user);
		userRewards = rewardsOf(_user);
		userLiquidValue = calculateResult(userBalance, false, false) + userRewards;
		userRef = refOf(_user);
	}

	function allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

	function calculateResult(uint256 _amount, bool _isBuy, bool _inverse) public view returns (uint256) {
		unchecked {
			uint256 _buyPrice;
			uint256 _sellPrice;
			( , _buyPrice, _sellPrice) = currentPrices();
			uint256 _rate = (_isBuy ? _buyPrice : _sellPrice);
			uint256 _increment = INCREMENT * (_isBuy ? 100 : (100 - SELL_TAX)) / (_isBuy ? (100 - BUY_TAX) : 100);
			if ((_isBuy && !_inverse) || (!_isBuy && _inverse)) {
				if (_inverse) {
					return (2 * _rate - _sqrt(4 * _rate * _rate + _increment * _increment - 4 * _rate * _increment - 8 * _amount * _increment) - _increment) * 1e18 / (2 * _increment);
				} else {
					return (_sqrt((_increment + 2 * _rate) * (_increment + 2 * _rate) + 8 * _amount * _increment) - _increment - 2 * _rate) * 1e18 / (2 * _increment);
				}
			} else {
				if (_inverse) {
					return (_rate * _amount + (_increment * (_amount + 1e18) / 2e18) * _amount) / 1e18;
				} else {
					return (_rate * _amount - (_increment * (_amount + 1e18) / 2e18) * _amount) / 1e18;
				}
			}
		}
	}


	function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) {
		require(balanceOf(_from) >= _tokens);
		info.users[_from].balance -= _tokens;
		info.users[_from].scaledPayout -= int256(_tokens * info.scaledEthPerToken);
		info.users[_to].balance += _tokens;
		info.users[_to].scaledPayout += int256(_tokens * info.scaledEthPerToken);
		emit Transfer(_from, _to, _tokens);
		return true;
	}

	function _buy(uint256 _amount) internal returns (uint256 tokens) {
		uint256 _tax = _amount * BUY_TAX / 100;
		tokens = calculateResult(_amount, true, false);
		info.totalSupply += tokens;
		info.users[msg.sender].balance += tokens;
		info.users[msg.sender].scaledPayout += int256(tokens * info.scaledEthPerToken);
		uint256 _teamTax = _amount * TEAM_TAX / 100;
		info.users[team()].scaledPayout -= int256(_teamTax * FLOAT_SCALAR);
		uint256 _refTax = _amount * REF_TAX / 100;
		address _ref = refOf(msg.sender);
		if (_ref != address(0x0) && balanceOf(_ref) >= REF_REQUIREMENT) {
			info.users[_ref].scaledPayout -= int256(_refTax * FLOAT_SCALAR);
		} else {
			info.users[buybackAddress()].scaledPayout -= int256(_refTax * FLOAT_SCALAR);
		}
		info.scaledEthPerToken += (_tax - _teamTax - _refTax) * FLOAT_SCALAR / info.totalSupply;
		emit Transfer(address(0x0), msg.sender, tokens);
		emit Buy(msg.sender, _amount, tokens);
	}

	function _sell(uint256 _tokens) internal returns (uint256 amount) {
		require(balanceOf(msg.sender) >= _tokens);
		amount = calculateResult(_tokens, false, false);
		uint256 _tax = amount * SELL_TAX / (100 - SELL_TAX);
		info.totalSupply -= _tokens;
		info.users[msg.sender].balance -= _tokens;
		info.users[msg.sender].scaledPayout -= int256(_tokens * info.scaledEthPerToken);
		uint256 _teamTax = amount * TEAM_TAX / (100 - SELL_TAX);
		info.users[team()].scaledPayout -= int256(_teamTax * FLOAT_SCALAR);
		info.scaledEthPerToken += (_tax - _teamTax) * FLOAT_SCALAR / info.totalSupply;
		payable(msg.sender).transfer(amount);
		emit Transfer(msg.sender, address(0x0), _tokens);
		emit Sell(msg.sender, _tokens, amount);
	}


	function _sqrt(uint256 _n) internal pure returns (uint256 result) {
		unchecked {
			uint256 _tmp = (_n + 1) / 2;
			result = _n;
			while (_tmp < result) {
				result = _tmp;
				_tmp = (_n / _tmp + _tmp) / 2;
			}
		}
	}
}


contract Team {

	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);

	struct Share {
		address payable user;
		uint256 shares;
	}
	Share[] public shares;
	uint256 public totalShares;
	ERC20 immutable public token;
	HEDGE immutable public hedge;


	constructor() {
		token = ERC20(msg.sender);
		hedge = new HEDGE();
		_addShare(0x7178523CD70c5E96C079701fE46Cda3E1799b4Ce, 9);
		_addShare(0xc61D594dff6D253142C7Fa83F41D318F157B018a, 9);
		_addShare(0x2000Af01b455C4cd3E65AED180eC3EE52BD6C264, 2);
	}

	receive() external payable {}

	function withdrawETH() public {
		uint256 _balance = address(this).balance;
		if (_balance > 0) {
			for (uint256 i = 0; i < shares.length; i++) {
				Share memory _share = shares[i];
				!_share.user.send(_balance * _share.shares / totalShares);
			}
		}
	}

	function withdrawHAIR() external {
		hedge.withdraw();
		withdrawETH();
	}

	function withdrawToken(ERC20 _token) public {
		WETH _weth = WETH(ROUTER.WETH9());
		if (address(_token) == address(_weth)) {
			_weth.withdraw(_weth.balanceOf(address(this)));
			withdrawETH();
		} else {
			uint256 _balance = _token.balanceOf(address(this));
			if (_balance > 0) {
				for (uint256 i = 0; i < shares.length; i++) {
					Share memory _share = shares[i];
					_token.transfer(_share.user, _balance * _share.shares / totalShares);
				}
			}
		}
	}

	function withdrawWETH() public {
		withdrawToken(ERC20(ROUTER.WETH9()));
	}

	function withdrawFees() external {
		withdrawWETH();
		withdrawToken(token);
	}


	function _addShare(address _user, uint256 _shares) internal {
		shares.push(Share(payable(_user), _shares));
		totalShares += _shares;
	}
}


contract Ambassadors {

	struct Share {
		address payable user;
		uint256 shares;
	}
	Share[] public shares;
	uint256 public totalShares;
	ERC20 immutable public token;


	constructor() {
		token = ERC20(msg.sender);
		_addShare(0x1427798f129b92F19927931a964D17bd6C2F5253, 10);
		_addShare(0x9D756A1848Ee62db36C17f000699f65BfEF9bf11, 7);
		_addShare(0x1248E5Ce0dB0F869A9A934b1677bd5A17e5B8DFe, 7);
		_addShare(0x6A5da854d5a3A0Fc4A760Bc6A9062D2A8e36431a, 7);
		_addShare(0x5a02FbCE3B19E9508F5Cc7F351f671795c1a81a4, 7);
		_addShare(0x1B1B694c797904D9B84ed636661C32C4DcaA17d9, 7);
		_addShare(0x492bb59126d7F06C2c5B13cD50caD209a43eA326, 7);
		_addShare(0x60d5567d7f8d05C899C89e63E00E4f6ca396ec13, 7);
		_addShare(0xBaE44b530f65Aa9A97bb0d17b4eafb07Ac67259C, 7);
		_addShare(0xe6eD771d0deC3a1F5B1A9bBc90fF9353E7Ec9c56, 7);
		_addShare(0xc44241b85051E5837B522289B2559d70496B16dC, 7);
		_addShare(0x0539480eE00A547974e7E38c1A9c8b046d767F22, 7);
		_addShare(0x7a3DD779b524C80e464B23AfCA6906539Df958D0, 7);
		_addShare(0xDfCE959d59F3E34c4f018cd91E4A5B9453Ff2D7d, 7);
		_addShare(0xAc537fcf993fAbCA3e795658B5b1a06c5DEC1e85, 7);
		_addShare(0x0d9997acB3f204fe3A09aCB1Fd594F906bCc88BB, 7);
		_addShare(0x6a49351D350245cFA979c1EBce7D18ADa46406d5, 7);
		_addShare(0x8E44aF6308e52b94157Ec9A898eC9f31cc1B0E16, 7);
		_addShare(0xf939FDa6330984F3E84EB32701bd404dACc27D50, 7);
		_addShare(0x29f3536D4E2a790f11d5827490390Dd1dca3e9b1, 7);
		_addShare(0xA4C501D7Cd0914fCfDb9E2bf367cC224a4531fAc, 7);
		_addShare(0x5dBFEAcf8f26e83314790f3Ee91eEAB97617F734, 7);
		_addShare(0xEBf184353dD81C21AAaB257143346584d75d1537, 7);
		_addShare(0xdAf028effC6e75307c54899a433b40514fEBB936, 7);
		_addShare(0xC4be049c2835D5F42c3B11a44c775F8A4909bd5F, 7);
		_addShare(0xD89eF44a1fBeA729912Fc40CAcF7d0CAe2A49841, 7);
		_addShare(0x5E056D473F95eA7Ef9660a46310297b2D457cAaD, 7);
		_addShare(0xb592016Dc145aFBA2aeE5B35e2Dfe0629BF83A36, 4);
		_addShare(0x95f572bD843b74C0d582b1BE5AF2583293ad2255, 2);
	}

	function distribute() external {
		uint256 _balance = token.balanceOf(address(this));
		if (_balance > 0) {
			for (uint256 i = 0; i < shares.length; i++) {
				Share memory _share = shares[i];
				token.transfer(_share.user, _balance * _share.shares / totalShares);
			}
		}
	}


	function _addShare(address _user, uint256 _shares) internal {
		shares.push(Share(payable(_user), _shares));
		totalShares += _shares;
	}
}


contract MULLET {

	uint256 constant private UINT_MAX = type(uint256).max;
	uint128 constant private UINT128_MAX = type(uint128).max;
	uint256 constant private INITIAL_SUPPLY = 1e27; // 1 billion
	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);
	uint256 constant private INITIAL_ETH_MC = 5 ether; // 5 ETH initial market cap price
	uint256 constant private UPPER_ETH_MC = 1e6 ether; // 1,000,000 ETH max market cap price
	uint256 constant private LIMIT_TIME = 5 minutes;
	uint256 constant private TOKEN_LIMIT = (INITIAL_SUPPLY / 1000); // max buy of 1m tokens, approx. 0.005 ETH, for 5 minutes

	int24 constant private MIN_TICK = -887272;
	int24 constant private MAX_TICK = -MIN_TICK;
	uint160 constant private MIN_SQRT_RATIO = 4295128739;
	uint160 constant private MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;

	string constant public name = "Mullet Money Mission";
	string constant public symbol = "MULLET";
	uint8 constant public decimals = 18;

	struct User {
		uint256 balance;
		mapping(address => uint256) allowance;
	}

	struct Info {
		Team team;
		address pool;
		uint256 totalSupply;
		mapping(address => User) users;
		uint128 positionId;
		uint128 startTime;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);


	constructor() payable {
		require(msg.value > 0);
		info.team = new Team();
		address _this = address(this);
		address _weth = ROUTER.WETH9();
		(uint160 _initialSqrtPrice, ) = _getPriceAndTickFromValues(_weth < _this, INITIAL_SUPPLY, INITIAL_ETH_MC);
		info.pool = Factory(ROUTER.factory()).createPool(_this, _weth, 10000);
		Pool(pool()).initialize(_initialSqrtPrice);
	}
	
	function initialize() external {
		require(totalSupply() == 0);
		address _this = address(this);
		address _weth = ROUTER.WETH9();
		bool _weth0 = _weth < _this;
		PositionManager _pm = PositionManager(ROUTER.positionManager());
		info.totalSupply = INITIAL_SUPPLY;
		info.users[_this].balance = INITIAL_SUPPLY;
		emit Transfer(address(0x0), _this, INITIAL_SUPPLY);
		_approve(_this, address(_pm), INITIAL_SUPPLY);
		( , int24 _minTick) = _getPriceAndTickFromValues(_weth0, INITIAL_SUPPLY, INITIAL_ETH_MC);
		( , int24 _maxTick) = _getPriceAndTickFromValues(_weth0, INITIAL_SUPPLY, UPPER_ETH_MC);
		(uint256 _positionId, , , ) = _pm.mint(PositionManager.MintParams({
			token0: _weth0 ? _weth : _this,
			token1: !_weth0 ? _weth : _this,
			fee: 10000,
			tickLower: _weth0 ? _maxTick : _minTick,
			tickUpper: !_weth0 ? _maxTick : _minTick,
			amount0Desired: _weth0 ? 0 : INITIAL_SUPPLY,
			amount1Desired: !_weth0 ? 0 : INITIAL_SUPPLY,
			amount0Min: 0,
			amount1Min: 0,
			recipient: _this,
			deadline: block.timestamp
		}));
		info.positionId = uint128(_positionId);
		Ambassadors _ambassadors = new Ambassadors();
		ROUTER.exactInputSingle{value:_this.balance}(Router.ExactInputSingleParams({
			tokenIn: _weth,
			tokenOut: _this,
			fee: 10000,
			recipient: address(_ambassadors),
			amountIn: _this.balance,
			amountOutMinimum: 0,
			sqrtPriceLimitX96: 0
		}));
		_ambassadors.distribute();
		info.startTime = uint128(block.timestamp);
	}

	function collectTradingFees() external {
		PositionManager(ROUTER.positionManager()).collect(PositionManager.CollectParams({
			tokenId: position(),
			recipient: team(),
			amount0Max: UINT128_MAX,
			amount1Max: UINT128_MAX
		}));
		info.team.withdrawFees();
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		return _transfer(msg.sender, _to, _tokens);
	}

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		return _approve(msg.sender, _spender, _tokens);
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		uint256 _allowance = allowance(_from, msg.sender);
		require(_allowance >= _tokens);
		if (_allowance != UINT_MAX) {
			info.users[_from].allowance[msg.sender] -= _tokens;
		}
		return _transfer(_from, _to, _tokens);
	}

	function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
		_transfer(msg.sender, _to, _tokens);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Callable(_to).tokenCallback(msg.sender, _tokens, _data));
		}
		return true;
	}
	

	function team() public view returns (address) {
		return address(info.team);
	}

	function pool() public view returns (address) {
		return info.pool;
	}

	function totalSupply() public view returns (uint256) {
		return info.totalSupply;
	}

	function balanceOf(address _user) public view returns (uint256) {
		return info.users[_user].balance;
	}

	function allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

	function position() public view returns (uint256) {
		return info.positionId;
	}


	function _approve(address _owner, address _spender, uint256 _tokens) internal returns (bool) {
		info.users[_owner].allowance[_spender] = _tokens;
		emit Approval(_owner, _spender, _tokens);
		return true;
	}
	
	function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) {
		unchecked {
			if (block.timestamp < info.startTime + LIMIT_TIME) {
				require(_tokens <= TOKEN_LIMIT);
			}
			require(balanceOf(_from) >= _tokens);
			info.users[_from].balance -= _tokens;
			info.users[_to].balance += _tokens;
			emit Transfer(_from, _to, _tokens);
			return true;
		}
	}


	function _getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {
		unchecked {
			uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));
			require(absTick <= uint256(int256(MAX_TICK)), 'T');

			uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;
			if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;
			if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;
			if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;
			if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;
			if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;
			if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;
			if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;
			if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;
			if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;
			if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;
			if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;
			if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;
			if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;
			if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;
			if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;
			if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;
			if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;
			if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;
			if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;

			if (tick > 0) ratio = type(uint256).max / ratio;

			sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));
		}
	}

	function _getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {
		unchecked {
			require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');
			uint256 ratio = uint256(sqrtPriceX96) << 32;

			uint256 r = ratio;
			uint256 msb = 0;

			assembly {
				let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(5, gt(r, 0xFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(4, gt(r, 0xFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(3, gt(r, 0xFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(2, gt(r, 0xF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(1, gt(r, 0x3))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := gt(r, 0x1)
				msb := or(msb, f)
			}

			if (msb >= 128) r = ratio >> (msb - 127);
			else r = ratio << (127 - msb);

			int256 log_2 = (int256(msb) - 128) << 64;

			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(63, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(62, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(61, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(60, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(59, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(58, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(57, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(56, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(55, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(54, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(53, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(52, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(51, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(50, f))
			}

			int256 log_sqrt10001 = log_2 * 255738958999603826347141;

			int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);
			int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);

			tick = tickLow == tickHi ? tickLow : _getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;
		}
	}

	function _sqrt(uint256 _n) internal pure returns (uint256 result) {
		unchecked {
			uint256 _tmp = (_n + 1) / 2;
			result = _n;
			while (_tmp < result) {
				result = _tmp;
				_tmp = (_n / _tmp + _tmp) / 2;
			}
		}
	}

	function _getPriceAndTickFromValues(bool _weth0, uint256 _tokens, uint256 _weth) internal pure returns (uint160 price, int24 tick) {
		uint160 _tmpPrice = uint160(_sqrt(2**192 / (!_weth0 ? _tokens : _weth) * (_weth0 ? _tokens : _weth)));
		tick = _getTickAtSqrtRatio(_tmpPrice);
		tick = tick - (tick % 200);
		price = _getSqrtRatioAtTick(tick);
	}
}


contract Deploy {
	MULLET immutable public mullet;
	HEDGE immutable public hedge;
	constructor() payable {
		mullet = new MULLET{value:msg.value}();
		mullet.initialize();
		hedge = HEDGE(Team(payable(mullet.team())).hedge());
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSpent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensReceived","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSpent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountReceived","type":"uint256"}],"name":"Sell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"allInfoFor","outputs":[{"internalType":"uint256","name":"contractBalance","type":"uint256"},{"internalType":"uint256","name":"totalTokenSupply","type":"uint256"},{"internalType":"uint256","name":"truePrice","type":"uint256"},{"internalType":"uint256","name":"buyPrice","type":"uint256"},{"internalType":"uint256","name":"sellPrice","type":"uint256"},{"internalType":"uint256","name":"userETH","type":"uint256"},{"internalType":"uint256","name":"userBalance","type":"uint256"},{"internalType":"uint256","name":"userRewards","type":"uint256"},{"internalType":"uint256","name":"userLiquidValue","type":"uint256"},{"internalType":"address","name":"userRef","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_ref","type":"address"}],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buybackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_isBuy","type":"bool"},{"internalType":"bool","name":"_inverse","type":"bool"}],"name":"calculateResult","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPrices","outputs":[{"internalType":"uint256","name":"truePrice","type":"uint256"},{"internalType":"uint256","name":"buyPrice","type":"uint256"},{"internalType":"uint256","name":"sellPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"refOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reinvest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"rewardsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561000f575f80fd5b50600380546001600160a01b031916331790556114b58061002f5f395ff3fe608060405260043610610134575f3560e01c806370a08231116100a8578063c6c28fd01161006d578063c6c28fd0146103eb578063cc2fbd661461040a578063dd62ed3e14610430578063e4849b3214610475578063f088d54714610494578063fdb5a03e146104a7575f80fd5b806370a082311461033057806385f2aef21461036457806395d89b4114610395578063a6f2ae3a146103c4578063a9059cbb146103cc575f80fd5b8063313ce567116100f9578063313ce567146102275780633472956c1461024d5780633ccfd60b1461026c5780634000aea014610280578063479ba7ae1461029f57806357f6b812146102be575f80fd5b806306fdde0314610147578063095ea7b31461018d57806318160ddd146101bc57806323b872dd146101d9578063259bfdd7146101f8575f80fd5b36610143576101416104bb565b005b5f80fd5b348015610152575f80fd5b5061017760405180604001604052806005815260200164484544474560d81b81525081565b6040516101849190611155565b60405180910390f35b348015610198575f80fd5b506101ac6101a73660046111bb565b6104ca565b6040519015158152602001610184565b3480156101c7575f80fd5b505f545b604051908152602001610184565b3480156101e4575f80fd5b506101ac6101f33660046111e3565b61052f565b348015610203575f80fd5b5061020c6105ae565b60408051938452602084019290925290820152606001610184565b348015610232575f80fd5b5061023b601281565b60405160ff9091168152602001610184565b348015610258575f80fd5b506101cb61026736600461122c565b610639565b348015610277575f80fd5b506101cb610788565b34801561028b575f80fd5b506101ac61029a36600461126b565b61082e565b3480156102aa575f80fd5b506101cb6102b93660046112eb565b6108cf565b3480156102c9575f80fd5b506102dd6102d83660046112eb565b610915565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526001600160a01b031661012082015261014001610184565b34801561033b575f80fd5b506101cb61034a3660046112eb565b6001600160a01b03165f9081526001602052604090205490565b34801561036f575f80fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610184565b3480156103a0575f80fd5b50610177604051806040016040528060048152602001632420a4a960e11b81525081565b6101cb6104bb565b3480156103d7575f80fd5b506101ac6103e63660046111bb565b610991565b3480156103f6575f80fd5b5061037d6104053660046112eb565b61099d565b348015610415575f80fd5b5073a093ea0904250084411f98d9195567e8b440669661037d565b34801561043b575f80fd5b506101cb61044a366004611304565b6001600160a01b039182165f9081526001602081815260408084209490951683529201909152205490565b348015610480575f80fd5b506101cb61048f366004611335565b6109bd565b6101cb6104a23660046112eb565b6109c7565b3480156104b2575f80fd5b506101cb610a53565b5f6104c55f6109c7565b905090565b335f8181526001602081815260408084206001600160a01b0388168086529301825280842086905551858152929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6001600160a01b0383165f908152600160208181526040808420338552909201905281205482111561055f575f80fd5b6001600160a01b0384165f908152600160208181526040808420338552909201905281208054849290610593908490611360565b909155506105a49050848484610ad8565b90505b9392505050565b5f805f670de0b6b3a76400006105c25f5490565b6105d1906402540be400611373565b6105db919061139e565b6105ec9066038d7ea4c680006113bd565b92506105fa600a6064611360565b610605846064611373565b61060f919061139e565b9150606461061e600a82611360565b6106289085611373565b610632919061139e565b9050909192565b5f805f6106446105ae565b90935091505f9050856106575781610659565b825b90505f8661066857606461066b565b605a5b8761067757605a61067a565b60645b6402540be400028161068e5761068e61138a565b04905086801561069c575085155b806106ad5750861580156106ad5750855b1561073c5785156107065780600202816106dd838b60080202848660040202858602878860040202010303610c24565b846002020303670de0b6b3a764000002816106fa576106fa61138a565b049450505050506105a7565b60028082029083028261072382820180028c830260080201610c24565b0303670de0b6b3a764000002816106fa576106fa61138a565b851561076557670de0b6b3a7640000828902671bc16d674ec800008a83018402048a02016106fa565b670de0b6b3a7640000671bc16d674ec800008982018302048902838a02036106fa565b5f80610793336108cf565b90506107a3600160401b82611373565b335f90815260016020526040812060020180549091906107c49084906113d0565b9091555050604051339082156108fc029083905f818181858888f193505050501580156107f3573d5f803e3d5ffd5b5060405181815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a2919050565b5f61083a338686610ad8565b50843b63ffffffff8116156108c357604051636be32e7360e01b81526001600160a01b03871690636be32e739061087b9033908990899089906004016113f7565b6020604051808303815f875af1158015610897573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bb919061143e565b6108c3575f80fd5b50600195945050505050565b6001600160a01b0381165f90815260016020526040812060028101549054600160401b91906002546109019190611373565b61090b9190611459565b610529919061139e565b475f80808080808080806109275f5490565b98506109316105ae565b6001600160a01b038e165f81815260016020526040902054939b509199509750319550935061095f8b6108cf565b92508261096d855f80610639565b61097791906113bd565b91506109828b61099d565b90509193959799509193959799565b5f6105a7338484610ad8565b6001600160a01b039081165f908152600160205260409020600301541690565b5f61052982610c67565b5f8034116109d3575f80fd5b6001600160a01b038216158015906109f457506001600160a01b0382163314155b8015610a1a5750610a043361099d565b6001600160a01b0316826001600160a01b031614155b15610a4a57335f90815260016020526040902060030180546001600160a01b0319166001600160a01b0384161790555b61052934610e7b565b5f80610a5e336108cf565b9050610a6e600160401b82611373565b335f9081526001602052604081206002018054909190610a8f9084906113d0565b909155505060405181815233907fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b879060200160405180910390a2610ad281610e7b565b91505090565b6001600160a01b0383165f90815260016020526040812054821115610afb575f80fd5b6001600160a01b0384165f9081526001602052604081208054849290610b22908490611360565b9091555050600254610b349083611373565b6001600160a01b0385165f9081526001602052604081206002018054909190610b5e908490611459565b90915550506001600160a01b0383165f9081526001602052604081208054849290610b8a9084906113bd565b9091555050600254610b9c9083611373565b6001600160a01b0384165f9081526001602052604081206002018054909190610bc69084906113d0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c1291815260200190565b60405180910390a35060019392505050565b80600260018201045b81811015610c6157809150600281828581610c4a57610c4a61138a565b040181610c5957610c5961138a565b049050610c2d565b50919050565b335f90815260016020526040812054821115610c81575f80fd5b610c8c825f80610639565b90505f610c9b600a6064611360565b610ca6600a84611373565b610cb0919061139e565b9050825f80015f828254610cc49190611360565b9091555050335f9081526001602052604081208054859290610ce7908490611360565b9091555050600254610cf99084611373565b335f9081526001602052604081206002018054909190610d1a908490611459565b909155505f9050610d2d600a6064611360565b610d38600185611373565b610d42919061139e565b9050610d52600160401b82611373565b60015f610d676003546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f206002015f828254610d979190611459565b90915550505f54600160401b610dad8385611360565b610db79190611373565b610dc1919061139e565b600280545f90610dd29084906113bd565b9091555050604051339084156108fc029085905f818181858888f19350505050158015610e01573d5f803e3d5ffd5b506040518481525f9033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518581526020810185905233917fed7a144fad14804d5c249145e3e0e2b63a9eb455b76aee5bc92d711e9bba3e4a910160405180910390a25050919050565b5f806064610e8a600a85611373565b610e94919061139e565b9050610ea28360015f610639565b9150815f80015f828254610eb691906113bd565b9091555050335f9081526001602052604081208054849290610ed99084906113bd565b9091555050600254610eeb9083611373565b335f9081526001602052604081206002018054909190610f0c9084906113d0565b909155505f90506064610f20600186611373565b610f2a919061139e565b9050610f3a600160401b82611373565b60015f610f4f6003546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f206002015f828254610f7f9190611459565b909155505f90506064610f93600387611373565b610f9d919061139e565b90505f610fa93361099d565b90506001600160a01b03811615801590610fe9575068056bc75e2d63100000610fe6826001600160a01b03165f9081526001602052604090205490565b10155b1561103157610ffc600160401b83611373565b6001600160a01b0382165f9081526001602052604081206002018054909190611026908490611459565b909155506110949050565b61103f600160401b83611373565b73a093ea0904250084411f98d9195567e8b44066965f90815260016020527f9d025699c06daf25b0e2685b09612a9ecf0b64407fd10444aa5e288db0ee799d805490919061108e908490611459565b90915550505b5f54600160401b836110a68688611360565b6110b09190611360565b6110ba9190611373565b6110c4919061139e565b600280545f906110d59084906113bd565b909155505060405185815233905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518781526020810187905233917f1cbc5ab135991bd2b6a4b034a04aa2aa086dac1371cb9b16b8b5e2ed6b036bed910160405180910390a250505050919050565b5f6020808352835180828501525f5b8181101561118057858101830151858201604001528201611164565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111b6575f80fd5b919050565b5f80604083850312156111cc575f80fd5b6111d5836111a0565b946020939093013593505050565b5f805f606084860312156111f5575f80fd5b6111fe846111a0565b925061120c602085016111a0565b9150604084013590509250925092565b8015158114611229575f80fd5b50565b5f805f6060848603121561123e575f80fd5b8335925060208401356112508161121c565b915060408401356112608161121c565b809150509250925092565b5f805f806060858703121561127e575f80fd5b611287856111a0565b935060208501359250604085013567ffffffffffffffff808211156112aa575f80fd5b818701915087601f8301126112bd575f80fd5b8135818111156112cb575f80fd5b8860208285010111156112dc575f80fd5b95989497505060200194505050565b5f602082840312156112fb575f80fd5b6105a7826111a0565b5f8060408385031215611315575f80fd5b61131e836111a0565b915061132c602084016111a0565b90509250929050565b5f60208284031215611345575f80fd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105295761052961134c565b80820281158282048414176105295761052961134c565b634e487b7160e01b5f52601260045260245ffd5b5f826113b857634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105295761052961134c565b8082018281125f8312801582168215821617156113ef576113ef61134c565b505092915050565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f6020828403121561144e575f80fd5b81516105a78161121c565b8181035f8312801583831316838312821617156114785761147861134c565b509291505056fea2646970667358221220d4996163bb350842839b008fe49e9d1e61a43bef38996ab98d1324871b55048164736f6c63430008150033

Deployed Bytecode

0x608060405260043610610134575f3560e01c806370a08231116100a8578063c6c28fd01161006d578063c6c28fd0146103eb578063cc2fbd661461040a578063dd62ed3e14610430578063e4849b3214610475578063f088d54714610494578063fdb5a03e146104a7575f80fd5b806370a082311461033057806385f2aef21461036457806395d89b4114610395578063a6f2ae3a146103c4578063a9059cbb146103cc575f80fd5b8063313ce567116100f9578063313ce567146102275780633472956c1461024d5780633ccfd60b1461026c5780634000aea014610280578063479ba7ae1461029f57806357f6b812146102be575f80fd5b806306fdde0314610147578063095ea7b31461018d57806318160ddd146101bc57806323b872dd146101d9578063259bfdd7146101f8575f80fd5b36610143576101416104bb565b005b5f80fd5b348015610152575f80fd5b5061017760405180604001604052806005815260200164484544474560d81b81525081565b6040516101849190611155565b60405180910390f35b348015610198575f80fd5b506101ac6101a73660046111bb565b6104ca565b6040519015158152602001610184565b3480156101c7575f80fd5b505f545b604051908152602001610184565b3480156101e4575f80fd5b506101ac6101f33660046111e3565b61052f565b348015610203575f80fd5b5061020c6105ae565b60408051938452602084019290925290820152606001610184565b348015610232575f80fd5b5061023b601281565b60405160ff9091168152602001610184565b348015610258575f80fd5b506101cb61026736600461122c565b610639565b348015610277575f80fd5b506101cb610788565b34801561028b575f80fd5b506101ac61029a36600461126b565b61082e565b3480156102aa575f80fd5b506101cb6102b93660046112eb565b6108cf565b3480156102c9575f80fd5b506102dd6102d83660046112eb565b610915565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526001600160a01b031661012082015261014001610184565b34801561033b575f80fd5b506101cb61034a3660046112eb565b6001600160a01b03165f9081526001602052604090205490565b34801561036f575f80fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610184565b3480156103a0575f80fd5b50610177604051806040016040528060048152602001632420a4a960e11b81525081565b6101cb6104bb565b3480156103d7575f80fd5b506101ac6103e63660046111bb565b610991565b3480156103f6575f80fd5b5061037d6104053660046112eb565b61099d565b348015610415575f80fd5b5073a093ea0904250084411f98d9195567e8b440669661037d565b34801561043b575f80fd5b506101cb61044a366004611304565b6001600160a01b039182165f9081526001602081815260408084209490951683529201909152205490565b348015610480575f80fd5b506101cb61048f366004611335565b6109bd565b6101cb6104a23660046112eb565b6109c7565b3480156104b2575f80fd5b506101cb610a53565b5f6104c55f6109c7565b905090565b335f8181526001602081815260408084206001600160a01b0388168086529301825280842086905551858152929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6001600160a01b0383165f908152600160208181526040808420338552909201905281205482111561055f575f80fd5b6001600160a01b0384165f908152600160208181526040808420338552909201905281208054849290610593908490611360565b909155506105a49050848484610ad8565b90505b9392505050565b5f805f670de0b6b3a76400006105c25f5490565b6105d1906402540be400611373565b6105db919061139e565b6105ec9066038d7ea4c680006113bd565b92506105fa600a6064611360565b610605846064611373565b61060f919061139e565b9150606461061e600a82611360565b6106289085611373565b610632919061139e565b9050909192565b5f805f6106446105ae565b90935091505f9050856106575781610659565b825b90505f8661066857606461066b565b605a5b8761067757605a61067a565b60645b6402540be400028161068e5761068e61138a565b04905086801561069c575085155b806106ad5750861580156106ad5750855b1561073c5785156107065780600202816106dd838b60080202848660040202858602878860040202010303610c24565b846002020303670de0b6b3a764000002816106fa576106fa61138a565b049450505050506105a7565b60028082029083028261072382820180028c830260080201610c24565b0303670de0b6b3a764000002816106fa576106fa61138a565b851561076557670de0b6b3a7640000828902671bc16d674ec800008a83018402048a02016106fa565b670de0b6b3a7640000671bc16d674ec800008982018302048902838a02036106fa565b5f80610793336108cf565b90506107a3600160401b82611373565b335f90815260016020526040812060020180549091906107c49084906113d0565b9091555050604051339082156108fc029083905f818181858888f193505050501580156107f3573d5f803e3d5ffd5b5060405181815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a2919050565b5f61083a338686610ad8565b50843b63ffffffff8116156108c357604051636be32e7360e01b81526001600160a01b03871690636be32e739061087b9033908990899089906004016113f7565b6020604051808303815f875af1158015610897573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bb919061143e565b6108c3575f80fd5b50600195945050505050565b6001600160a01b0381165f90815260016020526040812060028101549054600160401b91906002546109019190611373565b61090b9190611459565b610529919061139e565b475f80808080808080806109275f5490565b98506109316105ae565b6001600160a01b038e165f81815260016020526040902054939b509199509750319550935061095f8b6108cf565b92508261096d855f80610639565b61097791906113bd565b91506109828b61099d565b90509193959799509193959799565b5f6105a7338484610ad8565b6001600160a01b039081165f908152600160205260409020600301541690565b5f61052982610c67565b5f8034116109d3575f80fd5b6001600160a01b038216158015906109f457506001600160a01b0382163314155b8015610a1a5750610a043361099d565b6001600160a01b0316826001600160a01b031614155b15610a4a57335f90815260016020526040902060030180546001600160a01b0319166001600160a01b0384161790555b61052934610e7b565b5f80610a5e336108cf565b9050610a6e600160401b82611373565b335f9081526001602052604081206002018054909190610a8f9084906113d0565b909155505060405181815233907fbd654390d0d973e8c8376ed6053be8658870df892687852cc5c914d700291b879060200160405180910390a2610ad281610e7b565b91505090565b6001600160a01b0383165f90815260016020526040812054821115610afb575f80fd5b6001600160a01b0384165f9081526001602052604081208054849290610b22908490611360565b9091555050600254610b349083611373565b6001600160a01b0385165f9081526001602052604081206002018054909190610b5e908490611459565b90915550506001600160a01b0383165f9081526001602052604081208054849290610b8a9084906113bd565b9091555050600254610b9c9083611373565b6001600160a01b0384165f9081526001602052604081206002018054909190610bc69084906113d0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c1291815260200190565b60405180910390a35060019392505050565b80600260018201045b81811015610c6157809150600281828581610c4a57610c4a61138a565b040181610c5957610c5961138a565b049050610c2d565b50919050565b335f90815260016020526040812054821115610c81575f80fd5b610c8c825f80610639565b90505f610c9b600a6064611360565b610ca6600a84611373565b610cb0919061139e565b9050825f80015f828254610cc49190611360565b9091555050335f9081526001602052604081208054859290610ce7908490611360565b9091555050600254610cf99084611373565b335f9081526001602052604081206002018054909190610d1a908490611459565b909155505f9050610d2d600a6064611360565b610d38600185611373565b610d42919061139e565b9050610d52600160401b82611373565b60015f610d676003546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f206002015f828254610d979190611459565b90915550505f54600160401b610dad8385611360565b610db79190611373565b610dc1919061139e565b600280545f90610dd29084906113bd565b9091555050604051339084156108fc029085905f818181858888f19350505050158015610e01573d5f803e3d5ffd5b506040518481525f9033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518581526020810185905233917fed7a144fad14804d5c249145e3e0e2b63a9eb455b76aee5bc92d711e9bba3e4a910160405180910390a25050919050565b5f806064610e8a600a85611373565b610e94919061139e565b9050610ea28360015f610639565b9150815f80015f828254610eb691906113bd565b9091555050335f9081526001602052604081208054849290610ed99084906113bd565b9091555050600254610eeb9083611373565b335f9081526001602052604081206002018054909190610f0c9084906113d0565b909155505f90506064610f20600186611373565b610f2a919061139e565b9050610f3a600160401b82611373565b60015f610f4f6003546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f206002015f828254610f7f9190611459565b909155505f90506064610f93600387611373565b610f9d919061139e565b90505f610fa93361099d565b90506001600160a01b03811615801590610fe9575068056bc75e2d63100000610fe6826001600160a01b03165f9081526001602052604090205490565b10155b1561103157610ffc600160401b83611373565b6001600160a01b0382165f9081526001602052604081206002018054909190611026908490611459565b909155506110949050565b61103f600160401b83611373565b73a093ea0904250084411f98d9195567e8b44066965f90815260016020527f9d025699c06daf25b0e2685b09612a9ecf0b64407fd10444aa5e288db0ee799d805490919061108e908490611459565b90915550505b5f54600160401b836110a68688611360565b6110b09190611360565b6110ba9190611373565b6110c4919061139e565b600280545f906110d59084906113bd565b909155505060405185815233905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3604080518781526020810187905233917f1cbc5ab135991bd2b6a4b034a04aa2aa086dac1371cb9b16b8b5e2ed6b036bed910160405180910390a250505050919050565b5f6020808352835180828501525f5b8181101561118057858101830151858201604001528201611164565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111b6575f80fd5b919050565b5f80604083850312156111cc575f80fd5b6111d5836111a0565b946020939093013593505050565b5f805f606084860312156111f5575f80fd5b6111fe846111a0565b925061120c602085016111a0565b9150604084013590509250925092565b8015158114611229575f80fd5b50565b5f805f6060848603121561123e575f80fd5b8335925060208401356112508161121c565b915060408401356112608161121c565b809150509250925092565b5f805f806060858703121561127e575f80fd5b611287856111a0565b935060208501359250604085013567ffffffffffffffff808211156112aa575f80fd5b818701915087601f8301126112bd575f80fd5b8135818111156112cb575f80fd5b8860208285010111156112dc575f80fd5b95989497505060200194505050565b5f602082840312156112fb575f80fd5b6105a7826111a0565b5f8060408385031215611315575f80fd5b61131e836111a0565b915061132c602084016111a0565b90509250929050565b5f60208284031215611345575f80fd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105295761052961134c565b80820281158282048414176105295761052961134c565b634e487b7160e01b5f52601260045260245ffd5b5f826113b857634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105295761052961134c565b8082018281125f8312801582168215821617156113ef576113ef61134c565b505092915050565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f6020828403121561144e575f80fd5b81516105a78161121c565b8181035f8312801583831316838312821617156114785761147861134c565b509291505056fea2646970667358221220d4996163bb350842839b008fe49e9d1e61a43bef38996ab98d1324871b55048164736f6c63430008150033

Deployed Bytecode Sourcemap

2263:8480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3685:5;:3;:5::i;:::-;;2263:8480;;;;2764:37;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2764:37:0;;;;;;;;;;;;:::i;:::-;;;;;;;;4839:203;;;;;;;;;;-1:-1:-1;4839:203:0;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;4839:203:0;1004:187:1;5798:86:0;;;;;;;;;;-1:-1:-1;5842:7:0;5863:16;5798:86;;;1342:25:1;;;1330:2;1315:18;5798:86:0;1196:177:1;5047:246:0;;;;;;;;;;-1:-1:-1;5047:246:0;;;;;:::i;:::-;;:::i;5889:273::-;;;;;;;;;;;;;:::i;:::-;;;;1913:25:1;;;1969:2;1954:18;;1947:34;;;;1997:18;;;1990:34;1901:2;1886:18;5889:273:0;1711:319:1;2847:35:0;;;;;;;;;;;;2880:2;2847:35;;;;;2207:4:1;2195:17;;;2177:36;;2165:2;2150:18;2847:35:0;2035:184:1;7328:1048:0;;;;;;;;;;-1:-1:-1;7328:1048:0;;;;;:::i;:::-;;:::i;4133:302::-;;;;;;;;;;;;;:::i;5298:323::-;;;;;;;;;;-1:-1:-1;5298:323:0;;;;;:::i;:::-;;:::i;6381:187::-;;;;;;;;;;-1:-1:-1;6381:187:0;;;;;:::i;:::-;;:::i;6573:609::-;;;;;;;;;;-1:-1:-1;6573:609:0;;;;;:::i;:::-;;:::i;:::-;;;;4124:25:1;;;4180:2;4165:18;;4158:34;;;;4208:18;;;4201:34;;;;4266:2;4251:18;;4244:34;;;;4309:3;4294:19;;4287:35;;;;4353:3;4338:19;;4331:35;4397:3;4382:19;;4375:35;4441:3;4426:19;;4419:35;4485:3;4470:19;;4463:35;-1:-1:-1;;;;;4535:32:1;4529:3;4514:19;;4507:61;4111:3;4096:19;6573:609:0;3725:849:1;6270:106:0;;;;;;;;;;-1:-1:-1;6270:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;6346:17:0;6325:7;6346:17;;;:10;:17;;;;;:25;;6270:106;5628:72;;;;;;;;;;-1:-1:-1;5686:9:0;;-1:-1:-1;;;;;5686:9:0;5628:72;;;-1:-1:-1;;;;;4743:32:1;;;4725:51;;4713:2;4698:18;5628:72:0;4579:203:1;2805:38:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2805:38:0;;;;;3701:82;;;:::i;4710:124::-;;;;;;;;;;-1:-1:-1;4710:124:0;;;;;:::i;:::-;;:::i;6167:98::-;;;;;;;;;;-1:-1:-1;6167:98:0;;;;;:::i;:::-;;:::i;5705:88::-;;;;;;;;;;-1:-1:-1;2716:42:0;5705:88;;7187:136;;;;;;;;;;-1:-1:-1;7187:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;7281:17:0;;;7260:7;7281:17;;;:10;:17;;;;;;;;:37;;;;;;:27;;:37;;;;;;7187:136;4039:89;;;;;;;;;;-1:-1:-1;4039:89:0;;;;;:::i;:::-;;:::i;3789:245::-;;;;;;:::i;:::-;;:::i;4440:265::-;;;;;;;;;;;;;:::i;3701:82::-;3740:7;3761:17;3773:3;3761;:17::i;:::-;3754:24;;3701:82;:::o;4839:203::-;4931:10;4909:4;4920:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;4920:42:0;;;;;:32;;:42;;;;;:52;;;4982:39;1342:25:1;;;4909:4:0;;4920:42;;4982:39;;1315:18:1;4982:39:0;;;;;;;-1:-1:-1;5033:4:0;4839:203;;;;;:::o;5047:246::-;-1:-1:-1;;;;;7281:17:0;;5132:4;7281:17;;;:10;:17;;;;;;;;5168:10;7281:37;;:27;;;:37;;;;;5183:7;-1:-1:-1;5151:39:0;5143:48;;;;;;-1:-1:-1;;;;;5196:17:0;;:4;:17;;;:10;:17;;;;;;;;5224:10;5196:39;;:27;;;:39;;;;:50;;5239:7;;5196:4;:50;;5239:7;;5196:50;:::i;:::-;;;;-1:-1:-1;5258:30:0;;-1:-1:-1;5268:5:0;5275:3;5280:7;5258:9;:30::i;:::-;5251:37;;5047:246;;;;;;:::o;5889:273::-;5935:17;5954:16;5972:17;6053:4;6037:13;5842:7;5863:16;;5798:86;6037:13;6025:25;;2654:4;6025:25;:::i;:::-;:32;;;;:::i;:::-;6008:49;;2602:11;6008:49;:::i;:::-;5996:61;-1:-1:-1;6092:13:0;2368:2;6092:3;:13;:::i;:::-;6073:15;:9;6085:3;6073:15;:::i;:::-;:33;;;;:::i;:::-;6062:44;-1:-1:-1;6154:3:0;6136:14;2410:2;6154:3;6136:14;:::i;:::-;6123:28;;:9;:28;:::i;:::-;:34;;;;:::i;:::-;6111:46;;5889:273;;;:::o;7328:1048::-;7419:7;7449:17;7472:18;7525:15;:13;:15::i;:::-;7496:44;;-1:-1:-1;7496:44:0;-1:-1:-1;7546:13:0;;-1:-1:-1;7563:6:0;:31;;7584:10;7563:31;;;7572:9;7563:31;7546:49;;7601:18;7671:6;:30;;7698:3;7671:30;;;7681:13;7671:30;7635:6;:31;;7651:14;7635:31;;;7644:3;7635:31;2654:4;7622:45;:80;;;;;:::i;:::-;;7601:101;;7713:6;:19;;;;;7724:8;7723:9;7713:19;7712:46;;;;7739:6;7738:7;:19;;;;;7749:8;7738:19;7708:659;;;7771:8;7767:359;;;7940:10;7936:1;:14;7914:10;7809:102;7900:10;7890:7;7886:1;:11;:24;7873:10;7865:5;7861:1;:9;:22;7848:10;7835;:23;7827:5;7819;7815:1;:9;:17;:43;:68;:95;7809:5;:102::i;:::-;7801:5;7797:1;:9;:114;:127;7928:4;7796:136;:155;;;;;:::i;:::-;;7789:162;;;;;;;;7767:359;8103:1;:14;;;;8082:9;;8107:10;7981:85;8015:22;;;7987:51;;8041:24;;;:1;:24;7987:78;7981:5;:85::i;:::-;:98;:110;8095:4;7980:119;:138;;;;;:::i;7708:659::-;8149:8;8145:216;;;8245:4;8175:15;;;8226:4;8208:14;;;8194:29;;:36;8193:48;;8175:66;8174:75;;8145:216;8349:4;8330;8312:14;;;8298:29;;:36;8297:48;;8279:15;;;:66;8278:75;;4133:302;4171:7;4185:16;4204:21;4214:10;4204:9;:21::i;:::-;4185:40;-1:-1:-1;4303:23:0;-1:-1:-1;;;4303:8:0;:23;:::i;:::-;4268:10;4257:4;:22;;;:10;:22;;;;;:35;;:70;;:35;;:4;:70;;;;;:::i;:::-;;;;-1:-1:-1;;4332:38:0;;4340:10;;4332:38;;;;;4361:8;;4332:38;;;;4361:8;4340:10;4332:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4380:30:0;;1342:25:1;;;4389:10:0;;4380:30;;1330:2:1;1315:18;4380:30:0;;;;;;;4422:8;4133:302;-1:-1:-1;4133:302:0:o;5298:323::-;5393:4;5404:35;5414:10;5426:3;5431:7;5404:9;:35::i;:::-;-1:-1:-1;5485:16:0;;5514:9;;;;5510:91;;5539:55;;-1:-1:-1;;;5539:55:0;;-1:-1:-1;;;;;5539:27:0;;;;;:55;;5567:10;;5579:7;;5588:5;;;;5539:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5531:64;;;;;;-1:-1:-1;5612:4:0;;5298:323;-1:-1:-1;;;;;5298:323:0:o;6381:187::-;-1:-1:-1;;;;;6517:17:0;;6436:7;6517:17;;;:10;:17;;;;;:30;;;;6346:25;;-1:-1:-1;;;2324:5:0;6517:30;6472:22;;:41;;;;:::i;:::-;6465:82;;;;:::i;:::-;6457:106;;;;:::i;6573:609::-;6860:21;6629:23;;;;;;;;;6905:13;5842:7;5863:16;;5798:86;6905:13;6886:32;;6958:15;:13;:15::i;:::-;-1:-1:-1;;;;;6988:13:0;;6325:7;6346:17;;;:10;:17;;;;;:25;6923:50;;-1:-1:-1;6923:50:0;;-1:-1:-1;6923:50:0;-1:-1:-1;6988:13:0;;-1:-1:-1;7006:30:0;;7055:16;7065:5;7055:9;:16::i;:::-;7041:30;;7139:11;7094:42;7110:11;7123:5;7130;7094:15;:42::i;:::-;:56;;;;:::i;:::-;7076:74;;7165:12;7171:5;7165;:12::i;:::-;7155:22;;6573:609;;;;;;;;;;;:::o;4710:124::-;4776:4;4794:35;4804:10;4816:3;4821:7;4794:9;:35::i;6167:98::-;-1:-1:-1;;;;;6239:17:0;;;6218:7;6239:17;;;:10;:17;;;;;:21;;;;;6167:98::o;4039:89::-;4088:7;4109:14;4115:7;4109:5;:14::i;3789:245::-;3840:7;3874:1;3862:9;:13;3854:22;;;;;;-1:-1:-1;;;;;3885:20:0;;;;;;:42;;-1:-1:-1;;;;;;3909:18:0;;3917:10;3909:18;;3885:42;:71;;;;;3939:17;3945:10;3939:5;:17::i;:::-;-1:-1:-1;;;;;3931:25:0;:4;-1:-1:-1;;;;;3931:25:0;;;3885:71;3881:122;;;3975:10;3964:4;:22;;;:10;:22;;;;;:26;;:33;;-1:-1:-1;;;;;;3964:33:0;-1:-1:-1;;;;;3964:33:0;;;;;3881:122;4014:15;4019:9;4014:4;:15::i;4440:265::-;4478:7;4492:16;4511:21;4521:10;4511:9;:21::i;:::-;4492:40;-1:-1:-1;4610:23:0;-1:-1:-1;;;4610:8:0;:23;:::i;:::-;4575:10;4564:4;:22;;;:10;:22;;;;;:35;;:70;;:35;;:4;:70;;;;;:::i;:::-;;;;-1:-1:-1;;4644:30:0;;1342:25:1;;;4653:10:0;;4644:30;;1330:2:1;1315:18;4644:30:0;;;;;;;4686:14;4691:8;4686:4;:14::i;:::-;4679:21;;;4440:265;:::o;8383:425::-;-1:-1:-1;;;;;6346:17:0;;8465:4;6346:17;;;:10;:17;;;;;:25;8504:7;-1:-1:-1;8484:27:0;8476:36;;;;;;-1:-1:-1;;;;;8517:17:0;;:4;:17;;;:10;:17;;;;;:36;;8546:7;;8517:4;:36;;8546:7;;8517:36;:::i;:::-;;;;-1:-1:-1;;8609:22:0;;8599:32;;:7;:32;:::i;:::-;-1:-1:-1;;;;;8558:17:0;;:4;:17;;;:10;:17;;;;;:30;;:74;;:30;;:4;:74;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8637:15:0;;:4;:15;;;:10;:15;;;;;:34;;8664:7;;8637:4;:34;;8664:7;;8637:34;:::i;:::-;;;;-1:-1:-1;;8725:22:0;;8715:32;;:7;:32;:::i;:::-;-1:-1:-1;;;;;8676:15:0;;:4;:15;;;:10;:15;;;;;:28;;:72;;:28;;:4;:72;;;;;:::i;:::-;;;;;;;;8774:3;-1:-1:-1;;;;;8758:29:0;8767:5;-1:-1:-1;;;;;8758:29:0;;8779:7;8758:29;;;;1342:25:1;;1330:2;1315:18;;1196:177;8758:29:0;;;;;;;;-1:-1:-1;8799:4:0;8383:425;;;;;:::o;10509:231::-;10612:6;10622:1;10617;10612:6;;10611:12;10646:85;10660:6;10653:4;:13;10646:85;;;10684:4;10675:13;;10723:1;10715:4;10708;10703:2;:9;;;;;:::i;:::-;;:16;10702:22;;;;;:::i;:::-;;10695:29;;10646:85;;;10580:156;10509:231;;;:::o;9765:737::-;9854:10;9815:14;6346:17;;;:10;:17;;;;;:25;9869:7;-1:-1:-1;9844:32:0;9836:41;;;;;;9891:38;9907:7;9916:5;9923;9891:15;:38::i;:::-;9882:47;-1:-1:-1;9934:12:0;9970:14;2410:2;9970:3;:14;:::i;:::-;9949:17;2410:2;9949:6;:17;:::i;:::-;:36;;;;:::i;:::-;9934:51;;10010:7;9990:4;:16;;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;10033:10:0;10022:4;:22;;;:10;:22;;;;;:41;;10056:7;;10022:4;:41;;10056:7;;10022:41;:::i;:::-;;;;-1:-1:-1;;10124:22:0;;10114:32;;:7;:32;:::i;:::-;10079:10;10068:4;:22;;;:10;:22;;;;;:35;;:79;;:35;;:4;:79;;;;;:::i;:::-;;;;-1:-1:-1;10152:16:0;;-1:-1:-1;10192:14:0;2410:2;10192:3;:14;:::i;:::-;10171:17;2452:1;10171:6;:17;:::i;:::-;:36;;;;:::i;:::-;10152:55;-1:-1:-1;10254:23:0;-1:-1:-1;;;10152:55:0;10254:23;:::i;:::-;10212:10;:4;10223:6;5686:9;;-1:-1:-1;;;;;5686:9:0;;5628:72;10223:6;-1:-1:-1;;;;;10212:18:0;-1:-1:-1;;;;;10212:18:0;;;;;;;;;;;;:31;;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;10344:4:0;:16;-1:-1:-1;;;10310:15:0;10317:8;10310:4;:15;:::i;:::-;10309:32;;;;:::i;:::-;:51;;;;:::i;:::-;10283:22;:77;;:4;;:77;;;;;:::i;:::-;;;;-1:-1:-1;;10365:36:0;;10373:10;;10365:36;;;;;10394:6;;10365:36;;;;10394:6;10373:10;10365:36;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10411:43:0;;1342:25:1;;;10440:3:0;;10420:10;;10411:43;;1330:2:1;1315:18;10411:43:0;;;;;;;10464:33;;;7573:25:1;;;7629:2;7614:18;;7607:34;;;10469:10:0;;10464:33;;7546:18:1;10464:33:0;;;;;;;9831:671;;9765:737;;;:::o;8813:947::-;8862:14;;8918:3;8898:17;2368:2;8898:7;:17;:::i;:::-;:23;;;;:::i;:::-;8883:38;;8935:37;8951:7;8960:4;8966:5;8935:15;:37::i;:::-;8926:46;;8997:6;8977:4;:16;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;9019:10:0;9008:4;:22;;;:10;:22;;;;;:40;;9042:6;;9008:4;:40;;9042:6;;9008:40;:::i;:::-;;;;-1:-1:-1;;9108:22:0;;9099:31;;:6;:31;:::i;:::-;9064:10;9053:4;:22;;;:10;:22;;;;;:35;;:78;;:35;;:4;:78;;;;;:::i;:::-;;;;-1:-1:-1;9136:16:0;;-1:-1:-1;9176:3:0;9155:18;2452:1;9155:7;:18;:::i;:::-;:24;;;;:::i;:::-;9136:43;-1:-1:-1;9226:23:0;-1:-1:-1;;;9136:43:0;9226:23;:::i;:::-;9184:10;:4;9195:6;5686:9;;-1:-1:-1;;;;;5686:9:0;;5628:72;9195:6;-1:-1:-1;;;;;9184:18:0;-1:-1:-1;;;;;9184:18:0;;;;;;;;;;;;:31;;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;9255:15:0;;-1:-1:-1;9293:3:0;9273:17;2492:1;9273:7;:17;:::i;:::-;:23;;;;:::i;:::-;9255:41;;9301:12;9316:17;9322:10;9316:5;:17::i;:::-;9301:32;-1:-1:-1;;;;;;9342:20:0;;;;;;:58;;;2540:4;9366:15;9376:4;-1:-1:-1;;;;;6346:17:0;6325:7;6346:17;;;:10;:17;;;;;:25;;6270:106;9366:15;:34;;9342:58;9338:232;;;9448:22;-1:-1:-1;;;9448:7:0;:22;:::i;:::-;-1:-1:-1;;;;;9408:16:0;;:4;:16;;;:10;:16;;;;;:29;;:63;;:29;;:4;:63;;;;;:::i;:::-;;;;-1:-1:-1;9338:232:0;;-1:-1:-1;9338:232:0;;9541:22;-1:-1:-1;;;9541:7:0;:22;:::i;:::-;2716:42;9489:4;:28;;;:10;:28;;:41;:75;;:41;;:4;:75;;;;;:::i;:::-;;;;-1:-1:-1;;9338:232:0;9645:4;:16;-1:-1:-1;;;9619:7:0;9601:15;9608:8;9601:4;:15;:::i;:::-;:25;;;;:::i;:::-;9600:42;;;;:::i;:::-;:61;;;;:::i;:::-;9574:22;:87;;:4;;:87;;;;;:::i;:::-;;;;-1:-1:-1;;9671:42:0;;1342:25:1;;;9694:10:0;;9688:3;;9671:42;;1330:2:1;1315:18;9671:42:0;;;;;;;9723:32;;;7573:25:1;;;7629:2;7614:18;;7607:34;;;9727:10:0;;9723:32;;7546:18:1;9723:32:0;;;;;;;8878:882;;;;8813:947;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;2224:118::-;2310:5;2303:13;2296:21;2289:5;2286:32;2276:60;;2332:1;2329;2322:12;2276:60;2224:118;:::o;2347:444::-;2418:6;2426;2434;2487:2;2475:9;2466:7;2462:23;2458:32;2455:52;;;2503:1;2500;2493:12;2455:52;2539:9;2526:23;2516:33;;2599:2;2588:9;2584:18;2571:32;2612:28;2634:5;2612:28;:::i;:::-;2659:5;-1:-1:-1;2716:2:1;2701:18;;2688:32;2729:30;2688:32;2729:30;:::i;:::-;2778:7;2768:17;;;2347:444;;;;;:::o;2796:733::-;2884:6;2892;2900;2908;2961:2;2949:9;2940:7;2936:23;2932:32;2929:52;;;2977:1;2974;2967:12;2929:52;3000:29;3019:9;3000:29;:::i;:::-;2990:39;;3076:2;3065:9;3061:18;3048:32;3038:42;;3131:2;3120:9;3116:18;3103:32;3154:18;3195:2;3187:6;3184:14;3181:34;;;3211:1;3208;3201:12;3181:34;3249:6;3238:9;3234:22;3224:32;;3294:7;3287:4;3283:2;3279:13;3275:27;3265:55;;3316:1;3313;3306:12;3265:55;3356:2;3343:16;3382:2;3374:6;3371:14;3368:34;;;3398:1;3395;3388:12;3368:34;3443:7;3438:2;3429:6;3425:2;3421:15;3417:24;3414:37;3411:57;;;3464:1;3461;3454:12;3411:57;2796:733;;;;-1:-1:-1;;3495:2:1;3487:11;;-1:-1:-1;;;2796:733:1:o;3534:186::-;3593:6;3646:2;3634:9;3625:7;3621:23;3617:32;3614:52;;;3662:1;3659;3652:12;3614:52;3685:29;3704:9;3685:29;:::i;4787:260::-;4855:6;4863;4916:2;4904:9;4895:7;4891:23;4887:32;4884:52;;;4932:1;4929;4922:12;4884:52;4955:29;4974:9;4955:29;:::i;:::-;4945:39;;5003:38;5037:2;5026:9;5022:18;5003:38;:::i;:::-;4993:48;;4787:260;;;;;:::o;5052:180::-;5111:6;5164:2;5152:9;5143:7;5139:23;5135:32;5132:52;;;5180:1;5177;5170:12;5132:52;-1:-1:-1;5203:23:1;;5052:180;-1:-1:-1;5052:180:1:o;5237:127::-;5298:10;5293:3;5289:20;5286:1;5279:31;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5369:128;5436:9;;;5457:11;;;5454:37;;;5471:18;;:::i;5502:168::-;5575:9;;;5606;;5623:15;;;5617:22;;5603:37;5593:71;;5644:18;;:::i;5675:127::-;5736:10;5731:3;5727:20;5724:1;5717:31;5767:4;5764:1;5757:15;5791:4;5788:1;5781:15;5807:217;5847:1;5873;5863:132;;5917:10;5912:3;5908:20;5905:1;5898:31;5952:4;5949:1;5942:15;5980:4;5977:1;5970:15;5863:132;-1:-1:-1;6009:9:1;;5807:217::o;6029:125::-;6094:9;;;6115:10;;;6112:36;;;6128:18;;:::i;6159:216::-;6223:9;;;6251:11;;;6198:3;6281:9;;6309:10;;6305:19;;6334:10;;6326:19;;6302:44;6299:70;;;6349:18;;:::i;:::-;6299:70;;6159:216;;;;:::o;6380:559::-;-1:-1:-1;;;;;6593:32:1;;6575:51;;6657:2;6642:18;;6635:34;;;6705:2;6700;6685:18;;6678:30;;;6724:18;;6717:34;;;6744:6;6794;6788:3;6773:19;;6760:49;6859:1;6829:22;;;6853:3;6825:32;;;6818:43;;;;6922:2;6901:15;;;-1:-1:-1;;6897:29:1;6882:45;6878:55;;6380:559;-1:-1:-1;;;6380:559:1:o;6944:245::-;7011:6;7064:2;7052:9;7043:7;7039:23;7035:32;7032:52;;;7080:1;7077;7070:12;7032:52;7112:9;7106:16;7131:28;7153:5;7131:28;:::i;7194:200::-;7260:9;;;7233:4;7288:9;;7316:10;;7328:12;;;7312:29;7351:12;;;7343:21;;7309:56;7306:82;;;7368:18;;:::i;:::-;7306:82;7194:200;;;;:::o

Swarm Source

ipfs://d4996163bb350842839b008fe49e9d1e61a43bef38996ab98d1324871b550481
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.