ERC-20
Overview
Max Total Supply
100,000,000,000 $Lunaku
Holders
28
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
112,896,878.966566521 $LunakuValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Lunaku
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
/** Luna goku : $Lunaku - Deflationary DeFi-as-a-Service (DaaS) Token, with 65% supply burned to 0x0dEaD - Our advisors will bootstrap the investments in our initial phase. We invest on multiple chains and return the profits to $Lunaku holders. Tokenomics: - Buy Tax / Sell Tax: 14% - 4% of each buy goes to ETH reflections - 4% of each sell to treasury wallet - 4% to the liquidity pool. Website: http://lunaku.net Telegram: https://t.me/lunagoku Twitter: https://twitter.com/Lunagokuoffical */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Ownable.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; import "./IUniswapV2Factory.sol"; import "./IUniswapV2Pair.sol"; import "./IUniswapV2Router02.sol"; interface IDividendDistributor { function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _minimumTokenBalanceForDividends) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function claimDividend(address holder) external; function manualSendDividend(uint256 amount, address holder) external; } contract SuperBrainCapitalDividendTracker is IDividendDistributor { using SafeMath for uint256; address _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 public minPeriod = 1 hours; uint256 public minDistribution = 200000000000000; // 0.0002 ETH minimum auto send uint256 public minimumTokenBalanceForDividends = 1000000 * (10**9); // Must hold 1000,000 token to receive ETH uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyToken() { require(msg.sender == _token); _; } constructor () { _token = msg.sender; } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _minimumTokenBalanceForDividends) external override onlyToken { minPeriod = _minPeriod; minDistribution = _minDistribution; minimumTokenBalanceForDividends = _minimumTokenBalanceForDividends; } function setShare(address shareholder, uint256 amount) external override onlyToken { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > minimumTokenBalanceForDividends && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount <= minimumTokenBalanceForDividends && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function manualSendDividend(uint256 amount, address holder) external override onlyToken { uint256 contractETHBalance = address(this).balance; payable(holder).transfer(amount > 0 ? amount : contractETHBalance); } function deposit() external payable override onlyToken { uint256 amount = msg.value; totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } // ********************** // *Code for auto reward* // ********************** // function process() external onlyToken { // uint256 gas = 500000; //can change this, but should not be too much // uint256 shareholderCount = shareholders.length; // if(shareholderCount == 0) { return; } // uint256 gasUsed = 0; // uint256 gasLeft = gasleft(); // uint256 iterations = 0; // while(gasUsed < gas && iterations < shareholderCount) { // if(currentIndex >= shareholderCount){ // currentIndex = 0; // } // if(shouldDistribute(shareholders[currentIndex])){ // distributeDividend(shareholders[currentIndex]); // } // gasUsed = gasUsed.add(gasLeft.sub(gasleft())); // gasLeft = gasleft(); // currentIndex++; // iterations++; // } // } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); payable(shareholder).transfer(amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } function getAccount(address _account) public view returns( address account, uint256 pendingReward, uint256 totalRealised, uint256 lastClaimTime, uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable, uint256 _totalDistributed){ account = _account; Share storage userInfo = shares[_account]; pendingReward = getUnpaidEarnings(account); totalRealised = shares[_account].totalRealised; lastClaimTime = shareholderClaims[_account]; nextClaimTime = lastClaimTime + minPeriod; secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0; _totalDistributed = totalDistributed; } // *********************** // *Code for claim reward* // *********************** function claimDividend(address holder) external override { distributeDividend(holder); } } contract Lunaku is Ownable, IERC20 { using SafeMath for uint256; struct FeeSet { uint256 reflectionFee; uint256 treasuryFee; uint256 liquidityFee; uint256 totalFee; } address WETH; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; string _name = "Luna Goku"; string _symbol = "$Lunaku"; uint8 constant _decimals = 9; uint256 public _totalSupply = 100000000000 * (10 ** _decimals); uint256 public _maxWallet = _totalSupply.mul(3).div(100); uint256 public _maxTxAmount = _totalSupply.mul(1).div(100); mapping (address => bool) excludeFee; mapping (address => bool) excludeMaxTxn; mapping (address => bool) excludeDividend; // ******************************* // *declare whitelist & blacklist* // ******************************* // mapping (address => bool) whitelist; // mapping (address => bool) blacklist; FeeSet public buyFees; FeeSet public sellFees; uint256 feeDenominator = 100; address treasuryWallet = address(0xd129063777fA8a7B56Ab67FA9AfB85DB9dFcC2Ce); //change this address liquidityWallet; IUniswapV2Router02 public router; address pair; SuperBrainCapitalDividendTracker public dividendTracker; uint256 lastSwap; uint256 interval = 5 minutes; bool public swapEnabled = true; bool ignoreLimit = true; bool isOpen = false; uint256 public swapThreshold = _totalSupply / 5000; // 0.02% bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } modifier open(address from, address to) { // ******************************* // *this check every transactions* // ******************************* require(isOpen || from == owner() || to == owner(), "Not Open"); // ************************************************ // *add whitelist,blacklist conditions (if needed)* // ************************************************ // require(isOpen || from == owner() || to == owner() || whitelist[from] || whitelist[to], "Not Open"); // require(!blacklist[from] && !blacklist[to],"Blacklisted"); _; } constructor () { router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); WETH = router.WETH(); pair = IUniswapV2Factory(router.factory()).createPair(WETH, address(this)); _allowances[address(this)][address(router)] = ~uint256(0); dividendTracker = new SuperBrainCapitalDividendTracker(); address owner_ = msg.sender; liquidityWallet = owner_; excludeFee[liquidityWallet] = true; excludeFee[owner_] = true; excludeFee[address(this)] = true; excludeMaxTxn[liquidityWallet] = true; excludeMaxTxn[owner_] = true; excludeMaxTxn[address(this)] = true; excludeDividend[pair] = true; excludeDividend[address(this)] = true; excludeDividend[DEAD] = true; // ************************************ // *add owner to whitelist (if needed)* // ************************************ //whitelist[msg.sender] = true; //whitelist[address(this)] = true; setBuyFees(4, 4, 4); setSellFees(4, 4, 4); _balances[owner_] = _totalSupply; emit Transfer(address(0), owner_, _totalSupply); } receive() external payable { } function setName(string memory newName, string memory newSymbol) public onlyOwner{ _name = newName; _symbol = newSymbol; } function totalSupply() external override view returns (uint256) { return _totalSupply; } function decimals() external pure returns (uint8) { return _decimals; } function symbol() external returns (string memory) { return _symbol; } function name() external returns (string memory) { return _name; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, ~uint256(0)); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != ~uint256(0)){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } //*********************************************** //*add a list of people to whitelist & blacklist* //*********************************************** // function addWhiteList(address[] calldata _users, bool exempt) external onlyOwner { // for(uint8 i = 0; i < _users.length; i++) { // whitelist[_users[i]] = exempt; // } // } // function addBlackList(address[] calldata _users, bool exempt) external onlyOwner { // for(uint8 i = 0; i < _users.length; i++) { // blacklist[_users[i]] = exempt; // } // } function openTrade() external onlyOwner { isOpen = true; } //********************************************************************************** //*could send a param to set isOpen to false as well, if need to block all transfer* //********************************************************************************** // function setOpenTrade(bool _isOpen) external onlyOwner { // isOpen = _isOpen; // } function _transferFrom(address sender, address recipient, uint256 amount) internal open(sender, recipient) returns (bool) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } checkTxLimit(sender, recipient, amount); if(lastSwap + interval <= block.timestamp){ if(canSwap()) swapBack(); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 amountReceived = takeFee(sender, recipient, amount); _balances[recipient] = _balances[recipient].add(amountReceived); if(!excludeDividend[sender]){ try dividendTracker.setShare(sender, _balances[sender]) {} catch {} } if(!excludeDividend[recipient]){ try dividendTracker.setShare(recipient, _balances[recipient]) {} catch {} } //******************** //*Enable auto reward* //******************** // try dividendTracker.process() {} catch {} emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function manualSendDividend(uint256 amount, address holder) external onlyOwner { dividendTracker.manualSendDividend(amount, holder); } function checkTxLimit(address sender, address recipient, uint256 amount) internal view { require(amount <= _maxTxAmount || excludeMaxTxn[sender], "TX Limit Exceeded"); if (sender != owner() && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != treasuryWallet && recipient != liquidityWallet){ uint256 currentBalance = balanceOf(recipient); require(excludeMaxTxn[recipient] || (currentBalance + amount <= _maxWallet)); } } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { if (excludeFee[sender] || excludeFee[recipient]) return amount; uint256 totalFee; if(sender == pair) totalFee = buyFees.totalFee; else totalFee = sellFees.totalFee; uint256 feeAmount = amount.mul(totalFee).div(feeDenominator); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function canSwap() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function swapBack() internal swapping { uint256 swapAmount = _balances[address(this)]; if(!ignoreLimit) swapAmount = swapThreshold; lastSwap = block.timestamp; FeeSet memory fee = sellFees; uint256 totalFee = fee.totalFee; uint256 dynamicLiquidityFee = fee.liquidityFee; uint256 treasuryFee = fee.treasuryFee; uint256 reflectionFee = fee.reflectionFee; uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(totalFee).div(2); uint256 amountToSwap = swapAmount.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance.sub(balanceBefore); uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2); if(amountToLiquify > 0){ router.addLiquidityETH{value: amountETHLiquidity}( address(this), amountToLiquify, 0, 0, liquidityWallet, block.timestamp ); } uint256 amountETHReflection = amountETH.mul(reflectionFee).div(totalETHFee); try dividendTracker.deposit{value: amountETHReflection}() {} catch {} uint256 amountETHTreasury = address(this).balance; payable(treasuryWallet).transfer(amountETHTreasury); } function setExcludeDividend(address holder, bool exempt) external onlyOwner { require(holder != address(this) && holder != pair); excludeDividend[holder] = exempt; if(exempt){ dividendTracker.setShare(holder, 0); }else{ dividendTracker.setShare(holder, _balances[holder]); } } function setExcludeFeeMultiple(address[] calldata _users, bool exempt) external onlyOwner { for(uint8 i = 0; i < _users.length; i++) { excludeFee[_users[i]] = exempt; } } function setExcludeTxMultiple(address[] calldata _users, bool exempt) external onlyOwner { for(uint8 i = 0; i < _users.length; i++) { excludeMaxTxn[_users[i]] = exempt; } } function setReceiver(address _treasuryWallet, address _liquidityWallet) external onlyOwner { treasuryWallet = _treasuryWallet; liquidityWallet = _liquidityWallet; } function rescueToken(address _token, uint256 _amount) external onlyOwner { IERC20(_token).transfer(msg.sender, _amount); } function rescueETH(uint256 _amount) external onlyOwner{ payable(msg.sender).transfer(_amount); } function setSwapBackSettings(bool _enabled, uint256 _amount, bool _ignoreLimit, uint256 _interval) external onlyOwner { swapEnabled = _enabled; swapThreshold = _amount; ignoreLimit = _ignoreLimit; interval = _interval; } function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _minimumTokenBalanceForDividends) external onlyOwner { dividendTracker.setDistributionCriteria(_minPeriod, _minDistribution, _minimumTokenBalanceForDividends); } function setTxLimit(uint256 amount) external onlyOwner { require(amount >= _totalSupply / 2000); _maxTxAmount = amount; } function getAccountDividendsInfo(address account) external view returns ( address, uint256, uint256, uint256, uint256, uint256, uint256) { return dividendTracker.getAccount(account); } function claim() public { dividendTracker.claimDividend(msg.sender); } function setBuyFees(uint256 _reflectionFee, uint256 _treasuryFee, uint256 _liquidityFee) public onlyOwner { buyFees = FeeSet({ reflectionFee: _reflectionFee, treasuryFee: _treasuryFee, liquidityFee: _liquidityFee, totalFee: _reflectionFee + _treasuryFee + _liquidityFee }); } function setSellFees(uint256 _reflectionFee, uint256 _treasuryFee, uint256 _liquidityFee) public onlyOwner { sellFees = FeeSet({ reflectionFee: _reflectionFee, treasuryFee: _treasuryFee, liquidityFee: _liquidityFee, totalFee: _reflectionFee + _treasuryFee + _liquidityFee }); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `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); }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT 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); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract SuperBrainCapitalDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"holder","type":"address"}],"name":"manualSendDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_minimumTokenBalanceForDividends","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludeDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludeFeeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludeTxMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"},{"internalType":"string","name":"newSymbol","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_ignoreLimit","type":"bool"},{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
600280546001600160a01b031990811661dead1790915560038054909116905560c060405260096080819052684c756e6120476f6b7560b81b60a09081526200004c916006919062000690565b5060408051808201909152600780825266244c756e616b7560c81b60209092019182526200007b918162000690565b506200008a6009600a620007fd565b6200009b9064174876e800620008bc565b600855620000d56064620000c16003600854620004cb60201b620012461790919060201c565b620004e260201b620012521790919060201c565b600955620000fb6064620000c16001600854620004cb60201b620012461790919060201c565b600a556064601655601780546001600160a01b03191673d129063777fa8a7b56ab67fa9afb85db9dfcc2ce17905561012c601d55601e805462ffffff191661010117905560085462000151906113889062000791565b601f553480156200016157600080fd5b506200016d33620004f0565b601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b158015620001cd57600080fd5b505afa158015620001e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000208919062000744565b600180546001600160a01b0319166001600160a01b039283161790556019546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156200026257600080fd5b505afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d919062000744565b6001546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620002ea57600080fd5b505af1158015620002ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000325919062000744565b601a80546001600160a01b0319166001600160a01b03928316179055306000908152600560209081526040808320601954909416835292905281902060001990555162000372906200071f565b604051809103906000f0801580156200038f573d6000803e3d6000fd5b50601b80546001600160a01b03199081166001600160a01b039384161790915560188054339216821781556000828152600b60209081526040808320805460ff199081166001908117909255308086528386208054831684179055955488168552600c8452828520805482168317905586855282852080548216831790558585528285208054821683179055601a5488168552600d909352818420805484168217905593835280832080548316851790556002549095168252939020805490931617909155620004626004808062000540565b6200047060048080620005ea565b6008546001600160a01b038216600081815260046020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000931565b6000620004d98284620008bc565b90505b92915050565b6000620004d9828462000791565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200058f5760405162461bcd60e51b815260206004820181905260248201526000805160206200379283398151915260448201526064015b60405180910390fd5b6040518060800160405280848152602001838152602001828152602001828486620005bb919062000776565b620005c7919062000776565b90528051600e556020810151600f55604081015160105560600151601155505050565b6000546001600160a01b03163314620006355760405162461bcd60e51b8152602060048201819052602482015260008051602062003792833981519152604482015260640162000586565b604051806080016040528084815260200183815260200182815260200182848662000661919062000776565b6200066d919062000776565b905280516012556020810151601355604081015160145560600151601555505050565b8280546200069e90620008de565b90600052602060002090601f016020900481019282620006c257600085556200070d565b82601f10620006dd57805160ff19168380011785556200070d565b828001600101855582156200070d579182015b828111156200070d578251825591602001919060010190620006f0565b506200071b9291506200072d565b5090565b610ae88062002caa83390190565b5b808211156200071b57600081556001016200072e565b6000602082840312156200075757600080fd5b81516001600160a01b03811681146200076f57600080fd5b9392505050565b600082198211156200078c576200078c6200091b565b500190565b600082620007af57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620007f5578160001904821115620007d957620007d96200091b565b80851615620007e757918102915b93841c9390800290620007b9565b509250929050565b6000620004d960ff8416836000826200081957506001620004dc565b816200082857506000620004dc565b81600181146200084157600281146200084c576200086c565b6001915050620004dc565b60ff8411156200086057620008606200091b565b50506001821b620004dc565b5060208310610133831016604e8410600b841016171562000891575081810a620004dc565b6200089d8383620007b4565b8060001904821115620008b457620008b46200091b565b029392505050565b6000816000190483118215151615620008d957620008d96200091b565b500290565b600181811c90821680620008f357607f821691505b602082108114156200091557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61236980620009416000396000f3fe6080604052600436106102295760003560e01c8063715018a6116101235780639e252f00116100ab578063e4748b9e1161006f578063e4748b9e146106d2578063f15cd8bd146106f5578063f2fde38b14610715578063f887ea4014610735578063fb201b1d1461075557600080fd5b80639e252f00146105aa578063a9059cbb146105ca578063ad56c13c146105ea578063dd62ed3e14610649578063e0f3ccf51461068f57600080fd5b806386dcb95e116100f257806386dcb95e146105175780638da5cb5b146105375780638e1269441461055557806395d89b41146105755780639c3182021461058a57600080fd5b8063715018a6146104b6578063778089e6146104cb5780637d1db4a5146104eb57806382247ec01461050157600080fd5b8063313ce567116101b1578063571ac8b011610175578063571ac8b0146104065780635c707f07146104265780635c85974f146104465780636ddd17131461046657806370a082311461048057600080fd5b8063313ce5671461037f57806333f3d6281461039b57806336790a84146103bb5780633eaaf86b146103db5780634e71d92d146103f157600080fd5b80630d075d9c116101f85780630d075d9c146102d25780630f683e90146102f257806318160ddd1461031257806323b872dd146103275780632c1f52161461034757600080fd5b80630445b6671461023557806306fdde031461025e578063095ea7b3146102805780630ca61cb1146102b057600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601f5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027361076a565b6040516102559190612108565b34801561028c57600080fd5b506102a061029b366004611e98565b6107fc565b6040519015158152602001610255565b3480156102bc57600080fd5b506102d06102cb3660046120ae565b610868565b005b3480156102de57600080fd5b506102d06102ed3660046120ae565b61090c565b3480156102fe57600080fd5b506102d061030d3660046120ae565b61098d565b34801561031e57600080fd5b5060085461024b565b34801561033357600080fd5b506102a0610342366004611e29565b610a0e565b34801561035357600080fd5b50601b54610367906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561038b57600080fd5b5060405160098152602001610255565b3480156103a757600080fd5b506102d06103b6366004611e98565b610ad0565b3480156103c757600080fd5b506102d06103d6366004611f21565b610b7f565b3480156103e757600080fd5b5061024b60085481565b3480156103fd57600080fd5b506102d0610c26565b34801561041257600080fd5b506102a0610421366004611dd3565b610c7f565b34801561043257600080fd5b506102d061044136600461200c565b610c93565b34801561045257600080fd5b506102d0610461366004612070565b610ce4565b34801561047257600080fd5b50601e546102a09060ff1681565b34801561048c57600080fd5b5061024b61049b366004611dd3565b6001600160a01b031660009081526004602052604090205490565b3480156104c257600080fd5b506102d0610d2f565b3480156104d757600080fd5b506102d06104e6366004611e6a565b610d65565b3480156104f757600080fd5b5061024b600a5481565b34801561050d57600080fd5b5061024b60095481565b34801561052357600080fd5b506102d0610532366004611df0565b610ea5565b34801561054357600080fd5b506000546001600160a01b0316610367565b34801561056157600080fd5b506102d0610570366004612089565b610efd565b34801561058157600080fd5b50610273610f60565b34801561059657600080fd5b506102d06105a5366004611f21565b610f6f565b3480156105b657600080fd5b506102d06105c5366004612070565b611010565b3480156105d657600080fd5b506102a06105e5366004611e98565b611067565b3480156105f657600080fd5b5061060a610605366004611dd3565b611074565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610255565b34801561065557600080fd5b5061024b610664366004611df0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561069b57600080fd5b506012546013546014546015546106b29392919084565b604080519485526020850193909352918301526060820152608001610255565b3480156106de57600080fd5b50600e54600f546010546011546106b29392919084565b34801561070157600080fd5b506102d0610710366004611fc4565b611115565b34801561072157600080fd5b506102d0610730366004611dd3565b61116e565b34801561074157600080fd5b50601954610367906001600160a01b031681565b34801561076157600080fd5b506102d0611209565b60606006805461077990612273565b80601f01602080910402602001604051908101604052809291908181526020018280546107a590612273565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108579086815260200190565b60405180910390a350600192915050565b6000546001600160a01b0316331461089b5760405162461bcd60e51b81526004016108929061215d565b60405180910390fd5b601b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb190606401600060405180830381600087803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146109365760405162461bcd60e51b81526004016108929061215d565b60405180608001604052808481526020018381526020018281526020018284866109609190612203565b61096a9190612203565b90528051600e556020810151600f55604081015160105560600151601155505050565b6000546001600160a01b031633146109b75760405162461bcd60e51b81526004016108929061215d565b60405180608001604052808481526020018381526020018281526020018284866109e19190612203565b6109eb9190612203565b905280516012556020810151601355604081015160145560600151601555505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610abb576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600582528381203382529091529190912054610a9691849061125e565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610ac684848461128a565b90505b9392505050565b6000546001600160a01b03163314610afa5760405162461bcd60e51b81526004016108929061215d565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a9190611fa7565b505050565b6000546001600160a01b03163314610ba95760405162461bcd60e51b81526004016108929061215d565b60005b60ff8116831115610c205781600c600086868560ff16818110610bd157610bd16122e4565b9050602002016020810190610be69190611dd3565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c18816122ae565b915050610bac565b50505050565b601b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015610c6b57600080fd5b505af1158015610c20573d6000803e3d6000fd5b6000610c8d826000196107fc565b92915050565b6000546001600160a01b03163314610cbd5760405162461bcd60e51b81526004016108929061215d565b8151610cd0906006906020850190611cad565b508051610b7a906007906020840190611cad565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b81526004016108929061215d565b6107d0600854610d1e919061221b565b811015610d2a57600080fd5b600a55565b6000546001600160a01b03163314610d595760405162461bcd60e51b81526004016108929061215d565b610d63600061158a565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b81526004016108929061215d565b6001600160a01b0382163014801590610db65750601a546001600160a01b03838116911614155b610dbf57600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff19168215801591909117909155610e5757601b54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050505050565b601b546001600160a01b03838116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401610e21565b5050565b6000546001600160a01b03163314610ecf5760405162461bcd60e51b81526004016108929061215d565b601780546001600160a01b039384166001600160a01b03199182161790915560188054929093169116179055565b6000546001600160a01b03163314610f275760405162461bcd60e51b81526004016108929061215d565b601b546040516323849a5160e21b8152600481018490526001600160a01b03838116602483015290911690638e12694490604401610e21565b60606007805461077990612273565b6000546001600160a01b03163314610f995760405162461bcd60e51b81526004016108929061215d565b60005b60ff8116831115610c205781600b600086868560ff16818110610fc157610fc16122e4565b9050602002016020810190610fd69190611dd3565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611008816122ae565b915050610f9c565b6000546001600160a01b0316331461103a5760405162461bcd60e51b81526004016108929061215d565b604051339082156108fc029083906000818181858888f19350505050158015610ea1573d6000803e3d6000fd5b6000610ac933848461128a565b601b5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392169063fbcbc0f19060240160e06040518083038186803b1580156110c657600080fd5b505afa1580156110da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fe9190611ec4565b959e949d50929b5090995097509550909350915050565b6000546001600160a01b0316331461113f5760405162461bcd60e51b81526004016108929061215d565b601e8054601f9490945561ffff1990931693151561ff0019169390931761010091151591909102179055601d55565b6000546001600160a01b031633146111985760405162461bcd60e51b81526004016108929061215d565b6001600160a01b0381166111fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610892565b6112068161158a565b50565b6000546001600160a01b031633146112335760405162461bcd60e51b81526004016108929061215d565b601e805462ff0000191662010000179055565b6000610ac9828461223d565b6000610ac9828461221b565b600081848411156112825760405162461bcd60e51b81526004016108929190612108565b505050900390565b60008383601e60029054906101000a900460ff16806112b657506000546001600160a01b038381169116145b806112ce57506000546001600160a01b038281169116145b6113055760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610892565b60205460ff16156113225761131b8686866115da565b9250611581565b61132d8686866116c0565b42601d54601c5461133e9190612203565b116113585761134b611804565b1561135857611358611855565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600490915291909120546113aa91869061125e565b6001600160a01b0387166000908152600460205260408120919091556113d1878787611b85565b6001600160a01b0387166000908152600460205260409020549091506113f79082611c95565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600d909152205460ff1661149c57601b546001600160a01b03888116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561148957600080fd5b505af192505050801561149a575060015b505b6001600160a01b0386166000908152600d602052604090205460ff1661152e57601b546001600160a01b03878116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561151b57600080fd5b505af192505050801561152c575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157391815260200190565b60405180910390a360019350505b50509392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260049091529182205461162b91849061125e565b6001600160a01b03808616600090815260046020526040808220939093559085168152205461165a9083611c95565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ae9086815260200190565b60405180910390a35060019392505050565b600a54811115806116e957506001600160a01b0383166000908152600c602052604090205460ff165b6117295760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610892565b6000546001600160a01b0384811691161480159061175057506001600160a01b0382163014155b801561176a57506002546001600160a01b03838116911614155b80156117845750601a546001600160a01b03838116911614155b801561179e57506017546001600160a01b03838116911614155b80156117b857506018546001600160a01b03838116911614155b15610b7a576001600160a01b038216600090815260046020908152604080832054600c9092529091205460ff16806117fb57506009546117f88383612203565b11155b610c2057600080fd5b601a546000906001600160a01b03163314801590611825575060205460ff16155b80156118335750601e5460ff165b80156118505750601f543060009081526004602052604090205410155b905090565b6020805460ff1916600117815530600090815260049091526040902054601e54610100900460ff166118865750601f545b42601c5560408051608081018252601254808252601354602083018190526014549383018490526015546060840181905292939160006118d360026118cd87818b89611246565b90611252565b905060006118e18883611ca1565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061191b5761191b6122e4565b6001600160a01b039283166020918202929092010152600180548351921691839190811061194b5761194b6122e4565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b81524792919091169063791ac94790611995908690600090879030904290600401612192565b600060405180830381600087803b1580156119af57600080fd5b505af11580156119c3573d6000803e3d6000fd5b5050505060006119dc8247611ca190919063ffffffff16565b905060006119f56119ee8a6002611252565b8b90611ca1565b90506000611a0a60026118cd8481878f611246565b90508615611aba5760195460185460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ab691906120da565b5050505b6000611aca836118cd868c611246565b9050601b60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b1c57600080fd5b505af193505050508015611b2e575060015b5060175460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611b69573d6000803e3d6000fd5b50506020805460ff191690555050505050505050505050505050565b6001600160a01b0383166000908152600b602052604081205460ff1680611bc457506001600160a01b0383166000908152600b602052604090205460ff165b15611bd0575080610ac9565b601a546000906001600160a01b0386811691161415611bf25750601154611bf7565b506015545b601654600090611c0b906118cd8685611246565b30600090815260046020526040902054909150611c289082611c95565b30600081815260046020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c799085815260200190565b60405180910390a3611c8b8482611ca1565b9695505050505050565b6000610ac98284612203565b6000610ac9828461225c565b828054611cb990612273565b90600052602060002090601f016020900481019282611cdb5760008555611d21565b82601f10611cf457805160ff1916838001178555611d21565b82800160010185558215611d21579182015b82811115611d21578251825591602001919060010190611d06565b50611d2d929150611d31565b5090565b5b80821115611d2d5760008155600101611d32565b600082601f830112611d5757600080fd5b813567ffffffffffffffff80821115611d7257611d726122fa565b604051601f8301601f19908116603f01168101908282118183101715611d9a57611d9a6122fa565b81604052838152866020858801011115611db357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611de557600080fd5b8135610ac981612310565b60008060408385031215611e0357600080fd5b8235611e0e81612310565b91506020830135611e1e81612310565b809150509250929050565b600080600060608486031215611e3e57600080fd5b8335611e4981612310565b92506020840135611e5981612310565b929592945050506040919091013590565b60008060408385031215611e7d57600080fd5b8235611e8881612310565b91506020830135611e1e81612325565b60008060408385031215611eab57600080fd5b8235611eb681612310565b946020939093013593505050565b600080600080600080600060e0888a031215611edf57600080fd5b8751611eea81612310565b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b600080600060408486031215611f3657600080fd5b833567ffffffffffffffff80821115611f4e57600080fd5b818601915086601f830112611f6257600080fd5b813581811115611f7157600080fd5b8760208260051b8501011115611f8657600080fd5b60209283019550935050840135611f9c81612325565b809150509250925092565b600060208284031215611fb957600080fd5b8151610ac981612325565b60008060008060808587031215611fda57600080fd5b8435611fe581612325565b9350602085013592506040850135611ffc81612325565b9396929550929360600135925050565b6000806040838503121561201f57600080fd5b823567ffffffffffffffff8082111561203757600080fd5b61204386838701611d46565b9350602085013591508082111561205957600080fd5b5061206685828601611d46565b9150509250929050565b60006020828403121561208257600080fd5b5035919050565b6000806040838503121561209c57600080fd5b823591506020830135611e1e81612310565b6000806000606084860312156120c357600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156120ef57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b8181101561213557858101830151858201604001528201612119565b81811115612147576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121e25784516001600160a01b0316835293830193918301916001016121bd565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612216576122166122ce565b500190565b60008261223857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612257576122576122ce565b500290565b60008282101561226e5761226e6122ce565b500390565b600181811c9082168061228757607f821691505b602082108114156122a857634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff8114156122c5576122c56122ce565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461120657600080fd5b801515811461120657600080fdfea2646970667358221220b54b1c9a619d7fac5a884fde95e4b6d77b0c49ddd447238ba56f58b70da50a4564736f6c6343000807003360806040526ec097ce7bc90715b34b9f1000000000600955610e10600a5565b5e620f48000600b5566038d7ea4c68000600c5534801561003e57600080fd5b50600080546001600160a01b03191633179055610a88806100606000396000f3fe6080604052600436106100f35760003560e01c8063997664d71161008a578063e2d2e21911610059578063e2d2e2191461027a578063efca2eed14610290578063fbcbc0f1146102a6578063ffd49c841461030557600080fd5b8063997664d7146101ef578063be10b61414610205578063ce7c2ac21461021b578063d0e30db01461027257600080fd5b806328fd3198116100c657806328fd3198146101835780633a98ef39146101a35780634fab0ae8146101b95780638e126944146101cf57600080fd5b80630ca61cb1146100f857806311ce023d1461011a57806314b6ca961461014357806315f7e05e14610163575b600080fd5b34801561010457600080fd5b50610118610113366004610974565b61031b565b005b34801561012657600080fd5b5061013060095481565b6040519081526020015b60405180910390f35b34801561014f57600080fd5b5061011861015e36600461091e565b610340565b34801561016f57600080fd5b5061011861017e366004610903565b6104bc565b34801561018f57600080fd5b5061013061019e366004610903565b6104c8565b3480156101af57600080fd5b5061013060055481565b3480156101c557600080fd5b50610130600b5481565b3480156101db57600080fd5b506101186101ea366004610948565b610551565b3480156101fb57600080fd5b5061013060065481565b34801561021157600080fd5b50610130600c5481565b34801561022757600080fd5b50610257610236366004610903565b60046020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161013a565b6101186105b1565b34801561028657600080fd5b5061013060085481565b34801561029c57600080fd5b5061013060075481565b3480156102b257600080fd5b506102c66102c1366004610903565b610607565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161013a565b34801561031157600080fd5b50610130600a5481565b6000546001600160a01b0316331461033257600080fd5b600a92909255600b55600c55565b6000546001600160a01b0316331461035757600080fd5b6001600160a01b0382166000908152600460205260409020541561037e5761037e8261069f565b600c54811180156103a557506001600160a01b038216600090815260046020526040902054155b1561040a57600180546001600160a01b03841660008181526002602052604081208390558284018455929092527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055610441565b600c54811115801561043357506001600160a01b03821660009081526004602052604090205415155b15610441576104418261077a565b6001600160a01b03821660009081526004602052604090205460055461047291839161046c9161088d565b906108a0565b6005556001600160a01b0382166000908152600460205260409020819055610499816108ac565b6001600160a01b0390921660009081526004602052604090206001019190915550565b6104c58161069f565b50565b6001600160a01b0381166000908152600460205260408120546104ed57506000919050565b6001600160a01b03821660009081526004602052604081205461050f906108ac565b6001600160a01b03841660009081526004602052604090206001015490915080821161053f575060009392505050565b610549828261088d565b949350505050565b6000546001600160a01b0316331461056857600080fd5b476001600160a01b0382166108fc846105815782610583565b845b6040518115909202916000818181858888f193505050501580156105ab573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146105c857600080fd5b60065434906105d790826108a0565b600655600554600954610601916105f8916105f290856108cf565b906108db565b600854906108a0565b60085550565b6001600160a01b038116600090815260046020526040812082919081908190819081908190610635886104c8565b6001600160a01b038a16600090815260046020908152604080832060020154600390925290912054600a54929950909750955061067290866109a0565b935042841161068257600061068c565b61068c844261088d565b9250600754915050919395979092949650565b6001600160a01b0381166000908152600460205260409020546106bf5750565b60006106ca826104c8565b90508015610776576007546106df90826108a0565b6007556040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610718573d6000803e3d6000fd5b506001600160a01b0382166000908152600360209081526040808320429055600490915290206002015461074c90826108a0565b6001600160a01b0383166000908152600460205260409020600281019190915554610499906108ac565b5050565b600180546107899082906109f9565b8154811061079957610799610a3c565b60009182526020808320909101546001600160a01b03848116845260029092526040909220546001805492909316929181106107d7576107d7610a3c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600291829052604081205460018054919392916108229082906109f9565b8154811061083257610832610a3c565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600180548061086857610868610a26565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061089982846109f9565b9392505050565b600061089982846109a0565b60006108c96009546105f2600854856108cf90919063ffffffff16565b92915050565b600061089982846109da565b600061089982846109b8565b80356001600160a01b03811681146108fe57600080fd5b919050565b60006020828403121561091557600080fd5b610899826108e7565b6000806040838503121561093157600080fd5b61093a836108e7565b946020939093013593505050565b6000806040838503121561095b57600080fd5b8235915061096b602084016108e7565b90509250929050565b60008060006060848603121561098957600080fd5b505081359360208301359350604090920135919050565b600082198211156109b3576109b3610a10565b500190565b6000826109d557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156109f4576109f4610a10565b500290565b600082821015610a0b57610a0b610a10565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea2646970667358221220df99ae2786a052c9b0ef018a935c85ba28786d241efa7f593a583a8a7485942164736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106102295760003560e01c8063715018a6116101235780639e252f00116100ab578063e4748b9e1161006f578063e4748b9e146106d2578063f15cd8bd146106f5578063f2fde38b14610715578063f887ea4014610735578063fb201b1d1461075557600080fd5b80639e252f00146105aa578063a9059cbb146105ca578063ad56c13c146105ea578063dd62ed3e14610649578063e0f3ccf51461068f57600080fd5b806386dcb95e116100f257806386dcb95e146105175780638da5cb5b146105375780638e1269441461055557806395d89b41146105755780639c3182021461058a57600080fd5b8063715018a6146104b6578063778089e6146104cb5780637d1db4a5146104eb57806382247ec01461050157600080fd5b8063313ce567116101b1578063571ac8b011610175578063571ac8b0146104065780635c707f07146104265780635c85974f146104465780636ddd17131461046657806370a082311461048057600080fd5b8063313ce5671461037f57806333f3d6281461039b57806336790a84146103bb5780633eaaf86b146103db5780634e71d92d146103f157600080fd5b80630d075d9c116101f85780630d075d9c146102d25780630f683e90146102f257806318160ddd1461031257806323b872dd146103275780632c1f52161461034757600080fd5b80630445b6671461023557806306fdde031461025e578063095ea7b3146102805780630ca61cb1146102b057600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601f5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027361076a565b6040516102559190612108565b34801561028c57600080fd5b506102a061029b366004611e98565b6107fc565b6040519015158152602001610255565b3480156102bc57600080fd5b506102d06102cb3660046120ae565b610868565b005b3480156102de57600080fd5b506102d06102ed3660046120ae565b61090c565b3480156102fe57600080fd5b506102d061030d3660046120ae565b61098d565b34801561031e57600080fd5b5060085461024b565b34801561033357600080fd5b506102a0610342366004611e29565b610a0e565b34801561035357600080fd5b50601b54610367906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561038b57600080fd5b5060405160098152602001610255565b3480156103a757600080fd5b506102d06103b6366004611e98565b610ad0565b3480156103c757600080fd5b506102d06103d6366004611f21565b610b7f565b3480156103e757600080fd5b5061024b60085481565b3480156103fd57600080fd5b506102d0610c26565b34801561041257600080fd5b506102a0610421366004611dd3565b610c7f565b34801561043257600080fd5b506102d061044136600461200c565b610c93565b34801561045257600080fd5b506102d0610461366004612070565b610ce4565b34801561047257600080fd5b50601e546102a09060ff1681565b34801561048c57600080fd5b5061024b61049b366004611dd3565b6001600160a01b031660009081526004602052604090205490565b3480156104c257600080fd5b506102d0610d2f565b3480156104d757600080fd5b506102d06104e6366004611e6a565b610d65565b3480156104f757600080fd5b5061024b600a5481565b34801561050d57600080fd5b5061024b60095481565b34801561052357600080fd5b506102d0610532366004611df0565b610ea5565b34801561054357600080fd5b506000546001600160a01b0316610367565b34801561056157600080fd5b506102d0610570366004612089565b610efd565b34801561058157600080fd5b50610273610f60565b34801561059657600080fd5b506102d06105a5366004611f21565b610f6f565b3480156105b657600080fd5b506102d06105c5366004612070565b611010565b3480156105d657600080fd5b506102a06105e5366004611e98565b611067565b3480156105f657600080fd5b5061060a610605366004611dd3565b611074565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610255565b34801561065557600080fd5b5061024b610664366004611df0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561069b57600080fd5b506012546013546014546015546106b29392919084565b604080519485526020850193909352918301526060820152608001610255565b3480156106de57600080fd5b50600e54600f546010546011546106b29392919084565b34801561070157600080fd5b506102d0610710366004611fc4565b611115565b34801561072157600080fd5b506102d0610730366004611dd3565b61116e565b34801561074157600080fd5b50601954610367906001600160a01b031681565b34801561076157600080fd5b506102d0611209565b60606006805461077990612273565b80601f01602080910402602001604051908101604052809291908181526020018280546107a590612273565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108579086815260200190565b60405180910390a350600192915050565b6000546001600160a01b0316331461089b5760405162461bcd60e51b81526004016108929061215d565b60405180910390fd5b601b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb190606401600060405180830381600087803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146109365760405162461bcd60e51b81526004016108929061215d565b60405180608001604052808481526020018381526020018281526020018284866109609190612203565b61096a9190612203565b90528051600e556020810151600f55604081015160105560600151601155505050565b6000546001600160a01b031633146109b75760405162461bcd60e51b81526004016108929061215d565b60405180608001604052808481526020018381526020018281526020018284866109e19190612203565b6109eb9190612203565b905280516012556020810151601355604081015160145560600151601555505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610abb576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600582528381203382529091529190912054610a9691849061125e565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610ac684848461128a565b90505b9392505050565b6000546001600160a01b03163314610afa5760405162461bcd60e51b81526004016108929061215d565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a9190611fa7565b505050565b6000546001600160a01b03163314610ba95760405162461bcd60e51b81526004016108929061215d565b60005b60ff8116831115610c205781600c600086868560ff16818110610bd157610bd16122e4565b9050602002016020810190610be69190611dd3565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c18816122ae565b915050610bac565b50505050565b601b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015610c6b57600080fd5b505af1158015610c20573d6000803e3d6000fd5b6000610c8d826000196107fc565b92915050565b6000546001600160a01b03163314610cbd5760405162461bcd60e51b81526004016108929061215d565b8151610cd0906006906020850190611cad565b508051610b7a906007906020840190611cad565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b81526004016108929061215d565b6107d0600854610d1e919061221b565b811015610d2a57600080fd5b600a55565b6000546001600160a01b03163314610d595760405162461bcd60e51b81526004016108929061215d565b610d63600061158a565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b81526004016108929061215d565b6001600160a01b0382163014801590610db65750601a546001600160a01b03838116911614155b610dbf57600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff19168215801591909117909155610e5757601b54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050505050565b601b546001600160a01b03838116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401610e21565b5050565b6000546001600160a01b03163314610ecf5760405162461bcd60e51b81526004016108929061215d565b601780546001600160a01b039384166001600160a01b03199182161790915560188054929093169116179055565b6000546001600160a01b03163314610f275760405162461bcd60e51b81526004016108929061215d565b601b546040516323849a5160e21b8152600481018490526001600160a01b03838116602483015290911690638e12694490604401610e21565b60606007805461077990612273565b6000546001600160a01b03163314610f995760405162461bcd60e51b81526004016108929061215d565b60005b60ff8116831115610c205781600b600086868560ff16818110610fc157610fc16122e4565b9050602002016020810190610fd69190611dd3565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611008816122ae565b915050610f9c565b6000546001600160a01b0316331461103a5760405162461bcd60e51b81526004016108929061215d565b604051339082156108fc029083906000818181858888f19350505050158015610ea1573d6000803e3d6000fd5b6000610ac933848461128a565b601b5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392169063fbcbc0f19060240160e06040518083038186803b1580156110c657600080fd5b505afa1580156110da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fe9190611ec4565b959e949d50929b5090995097509550909350915050565b6000546001600160a01b0316331461113f5760405162461bcd60e51b81526004016108929061215d565b601e8054601f9490945561ffff1990931693151561ff0019169390931761010091151591909102179055601d55565b6000546001600160a01b031633146111985760405162461bcd60e51b81526004016108929061215d565b6001600160a01b0381166111fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610892565b6112068161158a565b50565b6000546001600160a01b031633146112335760405162461bcd60e51b81526004016108929061215d565b601e805462ff0000191662010000179055565b6000610ac9828461223d565b6000610ac9828461221b565b600081848411156112825760405162461bcd60e51b81526004016108929190612108565b505050900390565b60008383601e60029054906101000a900460ff16806112b657506000546001600160a01b038381169116145b806112ce57506000546001600160a01b038281169116145b6113055760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610892565b60205460ff16156113225761131b8686866115da565b9250611581565b61132d8686866116c0565b42601d54601c5461133e9190612203565b116113585761134b611804565b1561135857611358611855565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600490915291909120546113aa91869061125e565b6001600160a01b0387166000908152600460205260408120919091556113d1878787611b85565b6001600160a01b0387166000908152600460205260409020549091506113f79082611c95565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600d909152205460ff1661149c57601b546001600160a01b03888116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561148957600080fd5b505af192505050801561149a575060015b505b6001600160a01b0386166000908152600d602052604090205460ff1661152e57601b546001600160a01b03878116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561151b57600080fd5b505af192505050801561152c575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157391815260200190565b60405180910390a360019350505b50509392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260049091529182205461162b91849061125e565b6001600160a01b03808616600090815260046020526040808220939093559085168152205461165a9083611c95565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ae9086815260200190565b60405180910390a35060019392505050565b600a54811115806116e957506001600160a01b0383166000908152600c602052604090205460ff165b6117295760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610892565b6000546001600160a01b0384811691161480159061175057506001600160a01b0382163014155b801561176a57506002546001600160a01b03838116911614155b80156117845750601a546001600160a01b03838116911614155b801561179e57506017546001600160a01b03838116911614155b80156117b857506018546001600160a01b03838116911614155b15610b7a576001600160a01b038216600090815260046020908152604080832054600c9092529091205460ff16806117fb57506009546117f88383612203565b11155b610c2057600080fd5b601a546000906001600160a01b03163314801590611825575060205460ff16155b80156118335750601e5460ff165b80156118505750601f543060009081526004602052604090205410155b905090565b6020805460ff1916600117815530600090815260049091526040902054601e54610100900460ff166118865750601f545b42601c5560408051608081018252601254808252601354602083018190526014549383018490526015546060840181905292939160006118d360026118cd87818b89611246565b90611252565b905060006118e18883611ca1565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061191b5761191b6122e4565b6001600160a01b039283166020918202929092010152600180548351921691839190811061194b5761194b6122e4565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b81524792919091169063791ac94790611995908690600090879030904290600401612192565b600060405180830381600087803b1580156119af57600080fd5b505af11580156119c3573d6000803e3d6000fd5b5050505060006119dc8247611ca190919063ffffffff16565b905060006119f56119ee8a6002611252565b8b90611ca1565b90506000611a0a60026118cd8481878f611246565b90508615611aba5760195460185460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ab691906120da565b5050505b6000611aca836118cd868c611246565b9050601b60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b1c57600080fd5b505af193505050508015611b2e575060015b5060175460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611b69573d6000803e3d6000fd5b50506020805460ff191690555050505050505050505050505050565b6001600160a01b0383166000908152600b602052604081205460ff1680611bc457506001600160a01b0383166000908152600b602052604090205460ff165b15611bd0575080610ac9565b601a546000906001600160a01b0386811691161415611bf25750601154611bf7565b506015545b601654600090611c0b906118cd8685611246565b30600090815260046020526040902054909150611c289082611c95565b30600081815260046020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c799085815260200190565b60405180910390a3611c8b8482611ca1565b9695505050505050565b6000610ac98284612203565b6000610ac9828461225c565b828054611cb990612273565b90600052602060002090601f016020900481019282611cdb5760008555611d21565b82601f10611cf457805160ff1916838001178555611d21565b82800160010185558215611d21579182015b82811115611d21578251825591602001919060010190611d06565b50611d2d929150611d31565b5090565b5b80821115611d2d5760008155600101611d32565b600082601f830112611d5757600080fd5b813567ffffffffffffffff80821115611d7257611d726122fa565b604051601f8301601f19908116603f01168101908282118183101715611d9a57611d9a6122fa565b81604052838152866020858801011115611db357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611de557600080fd5b8135610ac981612310565b60008060408385031215611e0357600080fd5b8235611e0e81612310565b91506020830135611e1e81612310565b809150509250929050565b600080600060608486031215611e3e57600080fd5b8335611e4981612310565b92506020840135611e5981612310565b929592945050506040919091013590565b60008060408385031215611e7d57600080fd5b8235611e8881612310565b91506020830135611e1e81612325565b60008060408385031215611eab57600080fd5b8235611eb681612310565b946020939093013593505050565b600080600080600080600060e0888a031215611edf57600080fd5b8751611eea81612310565b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b600080600060408486031215611f3657600080fd5b833567ffffffffffffffff80821115611f4e57600080fd5b818601915086601f830112611f6257600080fd5b813581811115611f7157600080fd5b8760208260051b8501011115611f8657600080fd5b60209283019550935050840135611f9c81612325565b809150509250925092565b600060208284031215611fb957600080fd5b8151610ac981612325565b60008060008060808587031215611fda57600080fd5b8435611fe581612325565b9350602085013592506040850135611ffc81612325565b9396929550929360600135925050565b6000806040838503121561201f57600080fd5b823567ffffffffffffffff8082111561203757600080fd5b61204386838701611d46565b9350602085013591508082111561205957600080fd5b5061206685828601611d46565b9150509250929050565b60006020828403121561208257600080fd5b5035919050565b6000806040838503121561209c57600080fd5b823591506020830135611e1e81612310565b6000806000606084860312156120c357600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156120ef57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b8181101561213557858101830151858201604001528201612119565b81811115612147576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121e25784516001600160a01b0316835293830193918301916001016121bd565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612216576122166122ce565b500190565b60008261223857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612257576122576122ce565b500290565b60008282101561226e5761226e6122ce565b500390565b600181811c9082168061228757607f821691505b602082108114156122a857634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff8114156122c5576122c56122ce565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461120657600080fd5b801515811461120657600080fdfea2646970667358221220b54b1c9a619d7fac5a884fde95e4b6d77b0c49ddd447238ba56f58b70da50a4564736f6c63430008070033
Deployed Bytecode Sourcemap
7784:13791:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9357:50;;;;;;;;;;;;;;;;;;;11282:25:8;;;11270:2;11255:18;9357:50:5;;;;;;;;11780:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12115:212::-;;;;;;;;;;-1:-1:-1;12115:212:5;;;;;:::i;:::-;;:::i;:::-;;;8574:14:8;;8567:22;8549:41;;8537:2;8522:18;12115:212:5;8409:187:8;20177:260:5;;;;;;;;;;-1:-1:-1;20177:260:5;;;;;:::i;:::-;;:::i;:::-;;20984:292;;;;;;;;;;-1:-1:-1;20984:292:5;;;;;:::i;:::-;;:::i;21279:294::-;;;;;;;;;;-1:-1:-1;21279:294:5;;;;;:::i;:::-;;:::i;11522:88::-;;;;;;;;;;-1:-1:-1;11595:12:5;;11522:88;;12613:358;;;;;;;;;;-1:-1:-1;12613:358:5;;;;;:::i;:::-;;:::i;9147:55::-;;;;;;;;;;-1:-1:-1;9147:55:5;;;;-1:-1:-1;;;;;9147:55:5;;;;;;-1:-1:-1;;;;;6549:32:8;;;6531:51;;6519:2;6504:18;9147:55:5;6385:203:8;11615:71:5;;;;;;;;;;-1:-1:-1;11615:71:5;;8327:1;13444:36:8;;13432:2;13417:18;11615:71:5;13302:184:8;19661:134:5;;;;;;;;;;-1:-1:-1;19661:134:5;;;;;:::i;:::-;;:::i;19257:204::-;;;;;;;;;;-1:-1:-1;19257:204:5;;;;;:::i;:::-;;:::i;8334:62::-;;;;;;;;;;;;;;;;20896:82;;;;;;;;;;;;;:::i;12333:114::-;;;;;;;;;;-1:-1:-1;12333:114:5;;;;;:::i;:::-;;:::i;11370:142::-;;;;;;;;;;-1:-1:-1;11370:142:5;;;;;:::i;:::-;;:::i;20447:141::-;;;;;;;;;;-1:-1:-1;20447:141:5;;;;;:::i;:::-;;:::i;9265:30::-;;;;;;;;;;-1:-1:-1;9265:30:5;;;;;;;;11865:105;;;;;;;;;;-1:-1:-1;11865:105:5;;;;;:::i;:::-;-1:-1:-1;;;;;11949:18:5;11931:7;11949:18;;;:9;:18;;;;;;;11865:105;1661:101:6;;;;;;;;;;;;;:::i;18695:344:5:-;;;;;;;;;;-1:-1:-1;18695:344:5;;;;;:::i;:::-;;:::i;8465:58::-;;;;;;;;;;;;;;;;8402:56;;;;;;;;;;;;;;;;19471:184;;;;;;;;;;-1:-1:-1;19471:184:5;;;;;:::i;:::-;;:::i;1029:85:6:-;;;;;;;;;;-1:-1:-1;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;1029:85;;15412:146:5;;;;;;;;;;-1:-1:-1;15412:146:5;;;;;:::i;:::-;;:::i;11691:84::-;;;;;;;;;;;;;:::i;19045:202::-;;;;;;;;;;-1:-1:-1;19045:202:5;;;;;:::i;:::-;;:::i;19801:108::-;;;;;;;;;;-1:-1:-1;19801:108:5;;;;;:::i;:::-;;:::i;12453:154::-;;;;;;;;;;-1:-1:-1;12453:154:5;;;;;:::i;:::-;;:::i;20598:288::-;;;;;;;;;;-1:-1:-1;20598:288:5;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;8104:32:8;;;8086:51;;8168:2;8153:18;;8146:34;;;;8196:18;;;8189:34;;;;8254:2;8239:18;;8232:34;;;;8297:3;8282:19;;8275:35;8124:3;8326:19;;8319:35;8385:3;8370:19;;8363:35;8073:3;8058:19;20598:288:5;7771:633:8;11975:133:5;;;;;;;;;;-1:-1:-1;11975:133:5;;;;;:::i;:::-;-1:-1:-1;;;;;12077:19:5;;;12059:7;12077:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11975:133;8897:22;;;;;;;;;;-1:-1:-1;8897:22:5;;;;;;;;;;;;;;;;;;;13137:25:8;;;13193:2;13178:18;;13171:34;;;;13221:18;;;13214:34;13279:2;13264:18;;13257:34;13124:3;13109:19;8897:22:5;12906:391:8;8873:21:5;;;;;;;;;;-1:-1:-1;8873:21:5;;;;;;;;;;;;;;;19915:256;;;;;;;;;;-1:-1:-1;19915:256:5;;;;;:::i;:::-;;:::i;1911:198:6:-;;;;;;;;;;-1:-1:-1;1911:198:6;;;;;:::i;:::-;;:::i;9090:32:5:-;;;;;;;;;;-1:-1:-1;9090:32:5;;;;-1:-1:-1;;;;;9090:32:5;;;13567:71;;;;;;;;;;;;;:::i;11780:80::-;11814:13;11847:5;11840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11780:80;:::o;12115:212::-;12218:10;12190:4;12206:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12206:32:5;;;;;;;;;;:41;;;12262:37;12190:4;;12206:32;;12262:37;;;;12241:6;11282:25:8;;11270:2;11255:18;;11136:177;12262:37:5;;;;;;;;-1:-1:-1;12316:4:5;12115:212;;;;:::o;20177:260::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;;;;;;;;;20327:15:5::1;::::0;:103:::1;::::0;-1:-1:-1;;;20327:103:5;;::::1;::::0;::::1;12784:25:8::0;;;12825:18;;;12818:34;;;12868:18;;;12861:34;;;-1:-1:-1;;;;;20327:15:5;;::::1;::::0;:39:::1;::::0;12757:18:8;;20327:103:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20177:260:::0;;;:::o;20984:292::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;21104:168:5::1;;;;;;;;21131:14;21104:168;;;;21163:12;21104:168;;;;21194:13;21104:168;;;;21254:13;21239:12;21222:14;:29;;;;:::i;:::-;:45;;;;:::i;:::-;21104:168:::0;;21094:178;;:7:::1;:178:::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;-1:-1:-1;;;20984:292:5:o;21279:294::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;21401:168:5::1;;;;;;;;21428:14;21401:168;;;;21460:12;21401:168;;;;21491:13;21401:168;;;;21551:13;21536:12;21519:14;:29;;;;:::i;:::-;:45;;;;:::i;:::-;21401:168:::0;;21390:179;;:8:::1;:179:::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;-1:-1:-1;;;21279:294:5:o;12613:358::-;-1:-1:-1;;;;;12732:19:5;;12713:4;12732:19;;;:11;:19;;;;;;;;12752:10;12732:31;;;;;;;;-1:-1:-1;;12732:46:5;12729:178;;12827:69;;;;;;;;;;;-1:-1:-1;;;12827:69:5;;;;;;;;-1:-1:-1;;;;;12827:19:5;;-1:-1:-1;12827:19:5;;;:11;:19;;;;;12847:10;12827:31;;;;;;;;;;:69;;12863:6;;12827:35;:69::i;:::-;-1:-1:-1;;;;;12793:19:5;;;;;;:11;:19;;;;;;;;12813:10;12793:31;;;;;;;:103;12729:178;12924:40;12938:6;12946:9;12957:6;12924:13;:40::i;:::-;12917:47;;12613:358;;;;;;:::o;19661:134::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;19744:44:5::1;::::0;-1:-1:-1;;;19744:44:5;;19768:10:::1;19744:44;::::0;::::1;6775:51:8::0;6842:18;;;6835:34;;;-1:-1:-1;;;;;19744:23:5;::::1;::::0;::::1;::::0;6748:18:8;;19744:44:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19661:134:::0;;:::o;19257:204::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;19360:7:5::1;19356:99;19373:17;::::0;::::1;::::0;-1:-1:-1;19356:99:5::1;;;19438:6;19411:13;:24;19425:6;;19432:1;19425:9;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19411:24:5::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19411:24:5;:33;;-1:-1:-1;;19411:33:5::1;::::0;::::1;;::::0;;;::::1;::::0;;19392:3;::::1;::::0;::::1;:::i;:::-;;;;19356:99;;;;19257:204:::0;;;:::o;20896:82::-;20930:15;;:41;;-1:-1:-1;;;20930:41:5;;20960:10;20930:41;;;6531:51:8;-1:-1:-1;;;;;20930:15:5;;;;:29;;6504:18:8;;20930:41:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12333:114;12388:4;12411:29;12419:7;-1:-1:-1;;12411:7:5;:29::i;:::-;12404:36;12333:114;-1:-1:-1;;12333:114:5:o;11370:142::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;11461:15:5;;::::1;::::0;:5:::1;::::0;:15:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11486:19:5;;::::1;::::0;:7:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;20447:141::-:0;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;20545:4:5::1;20530:12;;:19;;;;:::i;:::-;20520:6;:29;;20512:38;;;::::0;::::1;;20560:12;:21:::0;20447:141::o;1661:101:6:-;1075:7;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;18695:344:5:-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;18789:23:5;::::1;18807:4;18789:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;18826:4:5::1;::::0;-1:-1:-1;;;;;18816:14:5;;::::1;18826:4:::0;::::1;18816:14;;18789:41;18781:50;;;::::0;::::1;;-1:-1:-1::0;;;;;18841:23:5;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;18841:32:5::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;18883:150:::1;;18907:15;::::0;:35:::1;::::0;-1:-1:-1;;;18907:35:5;;-1:-1:-1;;;;;6793:32:8;;;18907:35:5::1;::::0;::::1;6775:51:8::0;18907:15:5::1;6842:18:8::0;;;6835:34;18907:15:5;;::::1;::::0;:24:::1;::::0;6748:18:8;;18907:35:5::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18695:344:::0;;:::o;18883:150::-:1;18971:15;::::0;-1:-1:-1;;;;;19004:17:5;;::::1;18971:15;19004:17:::0;;;:9:::1;:17;::::0;;;;;;;;;18971:51;;-1:-1:-1;;;18971:51:5;;;;::::1;6775::8::0;;;;6842:18;;;6835:34;18971:15:5;::::1;::::0;:24:::1;::::0;6748:18:8;;18971:51:5::1;6593:282:8::0;18883:150:5::1;18695:344:::0;;:::o;19471:184::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;19572:14:5::1;:32:::0;;-1:-1:-1;;;;;19572:32:5;;::::1;-1:-1:-1::0;;;;;;19572:32:5;;::::1;;::::0;;;19614:15:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;19471:184::o;15412:146::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;15501:15:5::1;::::0;:50:::1;::::0;-1:-1:-1;;;15501:50:5;;::::1;::::0;::::1;11492:25:8::0;;;-1:-1:-1;;;;;11553:32:8;;;11533:18;;;11526:60;15501:15:5;;::::1;::::0;:34:::1;::::0;11465:18:8;;15501:50:5::1;11318:274:8::0;11691:84:5;11727:13;11760:7;11753:14;;;;;:::i;19045:202::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;19149:7:5::1;19145:96;19162:17;::::0;::::1;::::0;-1:-1:-1;19145:96:5::1;;;19224:6;19200:10;:21;19211:6;;19218:1;19211:9;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19200:21:5::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19200:21:5;:30;;-1:-1:-1;;19200:30:5::1;::::0;::::1;;::::0;;;::::1;::::0;;19181:3;::::1;::::0;::::1;:::i;:::-;;;;19145:96;;19801:108:::0;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;19865:37:5::1;::::0;19873:10:::1;::::0;19865:37;::::1;;;::::0;19894:7;;19865:37:::1;::::0;;;19894:7;19873:10;19865:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;12453:154:::0;12533:4;12556:44;12570:10;12582:9;12593:6;12556:13;:44::i;20598:288::-;20844:15;;:35;;-1:-1:-1;;;20844:35:5;;-1:-1:-1;;;;;6549:32:8;;;20844:35:5;;;6531:51:8;20692:7:5;;;;;;;;;;;;;;20844:15;;:26;;6504:18:8;;20844:35:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20837:42;;;;-1:-1:-1;20837:42:5;;-1:-1:-1;20837:42:5;;-1:-1:-1;20837:42:5;-1:-1:-1;20837:42:5;-1:-1:-1;20837:42:5;;-1:-1:-1;20598:288:5;-1:-1:-1;;20598:288:5:o;19915:256::-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;20043:11:5::1;:22:::0;;20075:13:::1;:23:::0;;;;-1:-1:-1;;20108:26:5;;;20043:22;::::1;;-1:-1:-1::0;;20108:26:5;;;;;20043:22:::1;20108:26:::0;::::1;;::::0;;;::::1;;::::0;;20144:8:::1;:20:::0;19915:256::o;1911:198:6:-;1075:7;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;1999:22:6;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:6;;10234:2:8;1991:73:6::1;::::0;::::1;10216:21:8::0;10273:2;10253:18;;;10246:30;10312:34;10292:18;;;10285:62;-1:-1:-1;;;10363:18:8;;;10356:36;10409:19;;1991:73:6::1;10032:402:8::0;1991:73:6::1;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;13567:71:5:-;1075:7:6;1101:6;-1:-1:-1;;;;;1101:6:6;719:10:0;1241:23:6;1233:68;;;;-1:-1:-1;;;1233:68:6;;;;;;;:::i;:::-;13617:6:5::1;:13:::0;;-1:-1:-1;;13617:13:5::1;::::0;::::1;::::0;;13567:71::o;3451:96:7:-;3509:7;3535:5;3539:1;3535;:5;:::i;3836:96::-;3894:7;3920:5;3924:1;3920;:5;:::i;4945:231::-;5061:7;5120:12;5112:6;;;;5104:29;;;;-1:-1:-1;;;5104:29:7;;;;;;;;:::i;:::-;-1:-1:-1;;;5154:5:7;;;4945:231::o;14016:1055:5:-;14132:4;14104:6;14112:9;9700:6;;;;;;;;;;;:25;;;-1:-1:-1;1075:7:6;1101:6;-1:-1:-1;;;;;9710:15:5;;;1101:6:6;;9710:15:5;9700:25;:42;;;-1:-1:-1;1075:7:6;1101:6;-1:-1:-1;;;;;9729:13:5;;;1101:6:6;;9729:13:5;9700:42;9692:63;;;;-1:-1:-1;;;9692:63:5;;10641:2:8;9692:63:5;;;10623:21:8;10680:1;10660:18;;;10653:29;-1:-1:-1;;;10698:18:8;;;10691:38;10746:18;;9692:63:5;10439:331:8;9692:63:5;14151:6:::1;::::0;::::1;;14148:63;;;14167:41;14182:6;14190:9;14201:6;14167:14;:41::i;:::-;14160:48;;;;14148:63;14229:39;14242:6;14250:9;14261:6;14229:12;:39::i;:::-;14305:15;14293:8;;14282;;:19;;;;:::i;:::-;:38;14279:107;;14338:9;:7;:9::i;:::-;14335:40;;;14365:10;:8;:10::i;:::-;14416:53;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;14416:53:5::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;14416:17:5;::::1;-1:-1:-1::0;14416:17:5;;;:9:::1;:17:::0;;;;;;;;:53:::1;::::0;14438:6;;14416:21:::1;:53::i;:::-;-1:-1:-1::0;;;;;14396:17:5;::::1;;::::0;;;:9:::1;:17;::::0;;;;:73;;;;14504:34:::1;14406:6:::0;14520:9;14531:6;14504:7:::1;:34::i;:::-;-1:-1:-1::0;;;;;14571:20:5;::::1;;::::0;;;:9:::1;:20;::::0;;;;;14479:59;;-1:-1:-1;14571:40:5::1;::::0;14479:59;14571:24:::1;:40::i;:::-;-1:-1:-1::0;;;;;14548:20:5;;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;;:63;;;;14626:23;;::::1;::::0;;:15:::1;:23:::0;;;;;::::1;;14622:99;;14656:15;::::0;-1:-1:-1;;;;;14689:17:5;;::::1;14656:15;14689:17:::0;;;:9:::1;:17;::::0;;;;;;;;;14656:51;;-1:-1:-1;;;14656:51:5;;;;::::1;6775::8::0;;;;6842:18;;;6835:34;14656:15:5;::::1;::::0;:24:::1;::::0;6748:18:8;;14656:51:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;14652:67:::0;::::1;-1:-1:-1::0;;;;;14734:26:5;::::1;;::::0;;;:15:::1;:26;::::0;;;;;::::1;;14730:108;;14767:15;::::0;-1:-1:-1;;;;;14803:20:5;;::::1;14767:15;14803:20:::0;;;:9:::1;:20;::::0;;;;;;;;;14767:57;;-1:-1:-1;;;14767:57:5;;;;::::1;6775:51:8::0;;;;6842:18;;;6835:34;14767:15:5;::::1;::::0;:24:::1;::::0;6748:18:8;;14767:57:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;14763:73:::0;::::1;15017:9;-1:-1:-1::0;;;;;15000:43:5::1;15009:6;-1:-1:-1::0;;;;;15000:43:5::1;;15028:14;15000:43;;;;11282:25:8::0;;11270:2;11255:18;;11136:177;15000:43:5::1;;;;;;;;15060:4;15053:11;;;10128:1;14016:1055:::0;;;;;;;:::o;2263:187:6:-;2336:16;2355:6;;-1:-1:-1;;;;;2371:17:6;;;-1:-1:-1;;;;;;2371:17:6;;;;;;2403:40;;2355:6;;;;;;;2403:40;;2336:16;2403:40;2326:124;2263:187;:::o;15081:325:5:-;15210:53;;;;;;;;;;;-1:-1:-1;;;15210:53:5;;;;;;;;-1:-1:-1;;;;;15210:17:5;;15174:4;15210:17;;;:9;:17;;;;;;;:53;;15232:6;;15210:21;:53::i;:::-;-1:-1:-1;;;;;15190:17:5;;;;;;;:9;:17;;;;;;:73;;;;15296:20;;;;;;;:32;;15321:6;15296:24;:32::i;:::-;-1:-1:-1;;;;;15273:20:5;;;;;;;:9;:20;;;;;;;:55;;;;15343:35;;;;;;;;;;15371:6;11282:25:8;;11270:2;11255:18;;11136:177;15343:35:5;;;;;;;;-1:-1:-1;15395:4:5;15081:325;;;;;:::o;15564:526::-;15679:12;;15669:6;:22;;:47;;;-1:-1:-1;;;;;;15695:21:5;;;;;;:13;:21;;;;;;;;15669:47;15661:77;;;;-1:-1:-1;;;15661:77:5;;9888:2:8;15661:77:5;;;9870:21:8;9927:2;9907:18;;;9900:30;-1:-1:-1;;;9946:18:8;;;9939:47;10003:18;;15661:77:5;9686:341:8;15661:77:5;1075:7:6;1101:6;-1:-1:-1;;;;;15761:17:5;;;1101:6:6;;15761:17:5;;;;:47;;-1:-1:-1;;;;;;15782:26:5;;15803:4;15782:26;;15761:47;:78;;;;-1:-1:-1;15834:4:5;;-1:-1:-1;;;;;15813:26:5;;;15834:4;;15813:26;;15761:78;:99;;;;-1:-1:-1;15856:4:5;;-1:-1:-1;;;;;15843:17:5;;;15856:4;;15843:17;;15761:99;:130;;;;-1:-1:-1;15877:14:5;;-1:-1:-1;;;;;15864:27:5;;;15877:14;;15864:27;;15761:130;:162;;;;-1:-1:-1;15908:15:5;;-1:-1:-1;;;;;15895:28:5;;;15908:15;;15895:28;;15761:162;15757:327;;;-1:-1:-1;;;;;11949:18:5;;15938:22;11949:18;;;:9;:18;;;;;;;;;16005:13;:24;;;;;;;;;;:67;;-1:-1:-1;16061:10:5;;16034:23;16051:6;16034:14;:23;:::i;:::-;:37;;16005:67;15997:76;;;;;16702:185;16781:4;;16744;;-1:-1:-1;;;;;16781:4:5;16767:10;:18;;;;:37;;-1:-1:-1;16798:6:5;;;;16797:7;16767:37;:60;;;;-1:-1:-1;16816:11:5;;;;16767:60;:113;;;;-1:-1:-1;16867:13:5;;16857:4;16839:24;;;;:9;:24;;;;;;:41;;16767:113;16760:120;;16702:185;:::o;16893:1796::-;9466:6;:13;;-1:-1:-1;;9466:13:5;9475:4;9466:13;;;16980:4:::1;9466:6:::0;16962:24;;;:9:::1;:24:::0;;;;;;;17000:11:::1;::::0;9466:13;17000:11;::::1;9466:13:::0;17000:11:::1;16996:55;;-1:-1:-1::0;17038:13:5::1;::::0;16996:55:::1;17073:15;17062:8;:26:::0;17098:28:::1;::::0;;::::1;::::0;::::1;::::0;;17118:8:::1;17098:28:::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;:17:::1;17366:56;17098:28;17366:49;17098:28:::0;17366:49;:10;17098:28;17366:14:::1;:35::i;:::-;:39:::0;::::1;:49::i;:56::-;17340:82:::0;-1:-1:-1;17432:20:5::1;17455:31;:10:::0;17340:82;17455:14:::1;:31::i;:::-;17521:16;::::0;;17535:1:::1;17521:16:::0;;;;;::::1;::::0;;17432:54;;-1:-1:-1;17497:21:5::1;::::0;17521:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;17521:16:5::1;17497:40;;17565:4;17547;17552:1;17547:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17547:23:5;;::::1;:7;::::0;;::::1;::::0;;;;;:23;17590:4:::1;::::0;;17580:7;;17590:4;::::1;::::0;17580;;17590;17580:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;17580:14:5;;::::1;:7;::::0;;::::1;::::0;;;;;:14;17661:6:::1;::::0;:182:::1;::::0;-1:-1:-1;;;17661:182:5;;17629:21:::1;::::0;17661:6;;;::::1;::::0;:57:::1;::::0;:182:::1;::::0;17732:12;;17605:21:::1;::::0;17773:4;;17799::::1;::::0;17818:15:::1;::::0;17661:182:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17854:17;17874:40;17900:13;17874:21;:25;;:40;;;;:::i;:::-;17854:60:::0;-1:-1:-1;17925:19:5::1;17947:40;17960:26;:19:::0;17984:1:::1;17960:23;:26::i;:::-;17947:8:::0;;:12:::1;:40::i;:::-;17925:62:::0;-1:-1:-1;18006:26:5::1;18035:58;18091:1;18035:51;17925:62:::0;18035:51;:9;18049:19;18035:13:::1;:34::i;:58::-;18006:87:::0;-1:-1:-1;18106:19:5;;18103:279:::1;;18140:6;::::0;18309:15:::1;::::0;18140:231:::1;::::0;-1:-1:-1;;;18140:231:5;;18215:4:::1;18140:231;::::0;::::1;7500:34:8::0;7550:18;;;7543:34;;;18140:6:5::1;7593:18:8::0;;;7586:34;;;7636:18;;;7629:34;-1:-1:-1;;;;;18309:15:5;;::::1;7679:19:8::0;;;7672:44;18342:15:5::1;7732:19:8::0;;;7725:35;18140:6:5;::::1;::::0;:22:::1;::::0;18170:18;;7434:19:8;;18140:231:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18103:279;18400:27;18430:45;18463:11:::0;18430:28:::1;:9:::0;18444:13;18430::::1;:28::i;:45::-;18400:75;;18489:15;;;;;;;;;-1:-1:-1::0;;;;;18489:15:5::1;-1:-1:-1::0;;;;;18489:23:5::1;;18520:19;18489:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;18485:69:::0;18639:14:::1;::::0;18631:51:::1;::::0;18600:21:::1;::::0;-1:-1:-1;;;;;18639:14:5::1;::::0;18631:51;::::1;;;::::0;18600:21;;18572:25:::1;18631:51:::0;18572:25;18631:51;18600:21;18639:14;18631:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;9484:6:5;:14;;-1:-1:-1;;9484:14:5;;;-1:-1:-1;;;;;;;;;;;;;;16893:1796:5:o;16096:600::-;-1:-1:-1;;;;;16205:18:5;;16182:7;16205:18;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;16227:21:5;;;;;;:10;:21;;;;;;;;16205:43;16201:75;;;-1:-1:-1;16270:6:5;16263:13;;16201:75;16334:4;;16295:16;;-1:-1:-1;;;;;16324:14:5;;;16334:4;;16324:14;16321:113;;;-1:-1:-1;16363:16:5;;16321:113;;;-1:-1:-1;16417:17:5;;16321:113;16502:14;;16457:17;;16477:40;;:20;:6;16488:8;16477:10;:20::i;:40::-;16572:4;16554:24;;;;:9;:24;;;;;;16457:60;;-1:-1:-1;16554:39:5;;16457:60;16554:28;:39::i;:::-;16545:4;16527:24;;;;:9;:24;;;;;;;:66;;;;16608:42;;-1:-1:-1;;;;;16608:42:5;;;;;;;16640:9;11282:25:8;;11270:2;11255:18;;11136:177;16608:42:5;;;;;;;;16668:21;:6;16679:9;16668:10;:21::i;:::-;16661:28;16096:600;-1:-1:-1;;;;;;16096:600:5:o;2741:96:7:-;2799:7;2825:5;2829:1;2825;:5;:::i;3108:96::-;3166:7;3192:5;3196:1;3192;:5;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:719:8;57:5;110:3;103:4;95:6;91:17;87:27;77:55;;128:1;125;118:12;77:55;164:6;151:20;190:18;227:2;223;220:10;217:36;;;233:18;;:::i;:::-;308:2;302:9;276:2;362:13;;-1:-1:-1;;358:22:8;;;382:2;354:31;350:40;338:53;;;406:18;;;426:22;;;403:46;400:72;;;452:18;;:::i;:::-;492:10;488:2;481:22;527:2;519:6;512:18;573:3;566:4;561:2;553:6;549:15;545:26;542:35;539:55;;;590:1;587;580:12;539:55;654:2;647:4;639:6;635:17;628:4;620:6;616:17;603:54;701:1;694:4;689:2;681:6;677:15;673:26;666:37;721:6;712:15;;;;;;14:719;;;;:::o;738:247::-;797:6;850:2;838:9;829:7;825:23;821:32;818:52;;;866:1;863;856:12;818:52;905:9;892:23;924:31;949:5;924:31;:::i;990:388::-;1058:6;1066;1119:2;1107:9;1098:7;1094:23;1090:32;1087:52;;;1135:1;1132;1125:12;1087:52;1174:9;1161:23;1193:31;1218:5;1193:31;:::i;:::-;1243:5;-1:-1:-1;1300:2:8;1285:18;;1272:32;1313:33;1272:32;1313:33;:::i;:::-;1365:7;1355:17;;;990:388;;;;;:::o;1383:456::-;1460:6;1468;1476;1529:2;1517:9;1508:7;1504:23;1500:32;1497:52;;;1545:1;1542;1535:12;1497:52;1584:9;1571:23;1603:31;1628:5;1603:31;:::i;:::-;1653:5;-1:-1:-1;1710:2:8;1695:18;;1682:32;1723:33;1682:32;1723:33;:::i;:::-;1383:456;;1775:7;;-1:-1:-1;;;1829:2:8;1814:18;;;;1801:32;;1383:456::o;1844:382::-;1909:6;1917;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2025:9;2012:23;2044:31;2069:5;2044:31;:::i;:::-;2094:5;-1:-1:-1;2151:2:8;2136:18;;2123:32;2164:30;2123:32;2164:30;:::i;2231:315::-;2299:6;2307;2360:2;2348:9;2339:7;2335:23;2331:32;2328:52;;;2376:1;2373;2366:12;2328:52;2415:9;2402:23;2434:31;2459:5;2434:31;:::i;:::-;2484:5;2536:2;2521:18;;;;2508:32;;-1:-1:-1;;;2231:315:8:o;2551:621::-;2675:6;2683;2691;2699;2707;2715;2723;2776:3;2764:9;2755:7;2751:23;2747:33;2744:53;;;2793:1;2790;2783:12;2744:53;2825:9;2819:16;2844:31;2869:5;2844:31;:::i;:::-;2939:2;2924:18;;2918:25;2983:2;2968:18;;2962:25;3027:2;3012:18;;3006:25;3071:3;3056:19;;3050:26;3116:3;3101:19;;3095:26;3161:3;3146:19;;;3140:26;2894:5;;2918:25;;-1:-1:-1;2962:25:8;;3006;;-1:-1:-1;3050:26:8;;-1:-1:-1;3095:26:8;-1:-1:-1;3140:26:8;;-1:-1:-1;2551:621:8;-1:-1:-1;;;2551:621:8:o;3177:750::-;3269:6;3277;3285;3338:2;3326:9;3317:7;3313:23;3309:32;3306:52;;;3354:1;3351;3344:12;3306:52;3394:9;3381:23;3423:18;3464:2;3456:6;3453:14;3450:34;;;3480:1;3477;3470:12;3450:34;3518:6;3507:9;3503:22;3493:32;;3563:7;3556:4;3552:2;3548:13;3544:27;3534:55;;3585:1;3582;3575:12;3534:55;3625:2;3612:16;3651:2;3643:6;3640:14;3637:34;;;3667:1;3664;3657:12;3637:34;3722:7;3715:4;3705:6;3702:1;3698:14;3694:2;3690:23;3686:34;3683:47;3680:67;;;3743:1;3740;3733:12;3680:67;3774:4;3766:13;;;;-1:-1:-1;3798:6:8;-1:-1:-1;;3839:20:8;;3826:34;3869:28;3826:34;3869:28;:::i;:::-;3916:5;3906:15;;;3177:750;;;;;:::o;3932:245::-;3999:6;4052:2;4040:9;4031:7;4027:23;4023:32;4020:52;;;4068:1;4065;4058:12;4020:52;4100:9;4094:16;4119:28;4141:5;4119:28;:::i;4182:513::-;4262:6;4270;4278;4286;4339:3;4327:9;4318:7;4314:23;4310:33;4307:53;;;4356:1;4353;4346:12;4307:53;4395:9;4382:23;4414:28;4436:5;4414:28;:::i;:::-;4461:5;-1:-1:-1;4513:2:8;4498:18;;4485:32;;-1:-1:-1;4569:2:8;4554:18;;4541:32;4582:30;4541:32;4582:30;:::i;:::-;4182:513;;;;-1:-1:-1;4631:7:8;;4685:2;4670:18;4657:32;;-1:-1:-1;;4182:513:8:o;4700:543::-;4788:6;4796;4849:2;4837:9;4828:7;4824:23;4820:32;4817:52;;;4865:1;4862;4855:12;4817:52;4905:9;4892:23;4934:18;4975:2;4967:6;4964:14;4961:34;;;4991:1;4988;4981:12;4961:34;5014:50;5056:7;5047:6;5036:9;5032:22;5014:50;:::i;:::-;5004:60;;5117:2;5106:9;5102:18;5089:32;5073:48;;5146:2;5136:8;5133:16;5130:36;;;5162:1;5159;5152:12;5130:36;;5185:52;5229:7;5218:8;5207:9;5203:24;5185:52;:::i;:::-;5175:62;;;4700:543;;;;;:::o;5248:180::-;5307:6;5360:2;5348:9;5339:7;5335:23;5331:32;5328:52;;;5376:1;5373;5366:12;5328:52;-1:-1:-1;5399:23:8;;5248:180;-1:-1:-1;5248:180:8:o;5433:315::-;5501:6;5509;5562:2;5550:9;5541:7;5537:23;5533:32;5530:52;;;5578:1;5575;5568:12;5530:52;5614:9;5601:23;5591:33;;5674:2;5663:9;5659:18;5646:32;5687:31;5712:5;5687:31;:::i;5753:316::-;5830:6;5838;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;-1:-1:-1;;5938:23:8;;;6008:2;5993:18;;5980:32;;-1:-1:-1;6059:2:8;6044:18;;;6031:32;;5753:316;-1:-1:-1;5753:316:8:o;6074:306::-;6162:6;6170;6178;6231:2;6219:9;6210:7;6206:23;6202:32;6199:52;;;6247:1;6244;6237:12;6199:52;6276:9;6270:16;6260:26;;6326:2;6315:9;6311:18;6305:25;6295:35;;6370:2;6359:9;6355:18;6349:25;6339:35;;6074:306;;;;;:::o;9084:597::-;9196:4;9225:2;9254;9243:9;9236:21;9286:6;9280:13;9329:6;9324:2;9313:9;9309:18;9302:34;9354:1;9364:140;9378:6;9375:1;9372:13;9364:140;;;9473:14;;;9469:23;;9463:30;9439:17;;;9458:2;9435:26;9428:66;9393:10;;9364:140;;;9522:6;9519:1;9516:13;9513:91;;;9592:1;9587:2;9578:6;9567:9;9563:22;9559:31;9552:42;9513:91;-1:-1:-1;9665:2:8;9644:15;-1:-1:-1;;9640:29:8;9625:45;;;;9672:2;9621:54;;9084:597;-1:-1:-1;;;9084:597:8:o;10775:356::-;10977:2;10959:21;;;10996:18;;;10989:30;11055:34;11050:2;11035:18;;11028:62;11122:2;11107:18;;10775:356::o;11597:980::-;11859:4;11907:3;11896:9;11892:19;11938:6;11927:9;11920:25;11964:2;12002:6;11997:2;11986:9;11982:18;11975:34;12045:3;12040:2;12029:9;12025:18;12018:31;12069:6;12104;12098:13;12135:6;12127;12120:22;12173:3;12162:9;12158:19;12151:26;;12212:2;12204:6;12200:15;12186:29;;12233:1;12243:195;12257:6;12254:1;12251:13;12243:195;;;12322:13;;-1:-1:-1;;;;;12318:39:8;12306:52;;12413:15;;;;12378:12;;;;12354:1;12272:9;12243:195;;;-1:-1:-1;;;;;;;12494:32:8;;;;12489:2;12474:18;;12467:60;-1:-1:-1;;;12558:3:8;12543:19;12536:35;12455:3;11597:980;-1:-1:-1;;;11597:980:8:o;13491:128::-;13531:3;13562:1;13558:6;13555:1;13552:13;13549:39;;;13568:18;;:::i;:::-;-1:-1:-1;13604:9:8;;13491:128::o;13624:217::-;13664:1;13690;13680:132;;13734:10;13729:3;13725:20;13722:1;13715:31;13769:4;13766:1;13759:15;13797:4;13794:1;13787:15;13680:132;-1:-1:-1;13826:9:8;;13624:217::o;13846:168::-;13886:7;13952:1;13948;13944:6;13940:14;13937:1;13934:21;13929:1;13922:9;13915:17;13911:45;13908:71;;;13959:18;;:::i;:::-;-1:-1:-1;13999:9:8;;13846:168::o;14019:125::-;14059:4;14087:1;14084;14081:8;14078:34;;;14092:18;;:::i;:::-;-1:-1:-1;14129:9:8;;14019:125::o;14149:380::-;14228:1;14224:12;;;;14271;;;14292:61;;14346:4;14338:6;14334:17;14324:27;;14292:61;14399:2;14391:6;14388:14;14368:18;14365:38;14362:161;;;14445:10;14440:3;14436:20;14433:1;14426:31;14480:4;14477:1;14470:15;14508:4;14505:1;14498:15;14362:161;;14149:380;;;:::o;14534:175::-;14571:3;14615:4;14608:5;14604:16;14644:4;14635:7;14632:17;14629:43;;;14652:18;;:::i;:::-;14701:1;14688:15;;14534:175;-1:-1:-1;;14534:175:8:o;14714:127::-;14775:10;14770:3;14766:20;14763:1;14756:31;14806:4;14803:1;14796:15;14830:4;14827:1;14820:15;14846:127;14907:10;14902:3;14898:20;14895:1;14888:31;14938:4;14935:1;14928:15;14962:4;14959:1;14952:15;14978:127;15039:10;15034:3;15030:20;15027:1;15020:31;15070:4;15067:1;15060:15;15094:4;15091:1;15084:15;15110:131;-1:-1:-1;;;;;15185:31:8;;15175:42;;15165:70;;15231:1;15228;15221:12;15246:118;15332:5;15325:13;15318:21;15311:5;15308:32;15298:60;;15354:1;15351;15344:12
Swarm Source
ipfs://df99ae2786a052c9b0ef018a935c85ba28786d241efa7f593a583a8a74859421
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.