Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
5,000,000,000,000,000 MYD
Holders
180
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
915,408,864,175.972987030885372593 MYDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MultiplyYield
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-05 */ /* Earn up to 60-300% APR Website, dApp : https://www.multiplyyield.com/ **/ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns (uint256); function withdrawDividend() external; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns (uint256); function withdrawnDividendOf(address _owner) external view returns (uint256); function accumulativeDividendOf(address _owner) external view returns (uint256); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } library IterableMapping { struct Map { address[] keys; mapping(address => uint256) values; mapping(address => uint256) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint256) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int256) { if (!map.inserted[key]) { return -1; } return int256(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint256 index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint256) { return map.keys.length; } function set( Map storage map, address key, uint256 val ) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint256 index = map.indexOf[key]; uint256 lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 internal constant magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 public totalDividendsDistributed; address public rewardToken; IRouter public uniswapV2Router; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable {} function distributeDividendsUsingAmount(uint256 amount) public onlyOwner { require(totalSupply() > 0); if (amount > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (amount).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, amount); totalDividendsDistributed = totalDividendsDistributed.add(amount); } } function withdrawDividend() public virtual override onlyOwner { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); emit DividendWithdrawn(user, _withdrawableDividend); bool success = IERC20(rewardToken).transfer( user, _withdrawableDividend ); if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub( _withdrawableDividend ); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns (uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns (uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns (uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns (uint256) { return magnifiedDividendPerShare .mul(balanceOf(_owner)) .toInt256Safe() .add(magnifiedDividendCorrections[_owner]) .toUint256Safe() / magnitude; } function _transfer( address from, address to, uint256 value ) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare .mul(value) .toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from] .add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub( _magCorrection ); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[ account ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[ account ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe()); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if (newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if (newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } function _setRewardToken(address token) internal onlyOwner { rewardToken = token; } function _setUniswapRouter(address router) internal onlyOwner { uniswapV2Router = IRouter(router); } } contract MultiplyYield is Ownable, ERC20 { IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "Multiply Yield"; string private constant _symbol = "MYD"; uint8 private constant _decimals = 18; MYDTokenDividendTracker public dividendTracker; bool public isTradingEnabled; // initialSupply uint256 constant initialSupply = 5000000000000000 * (10**18); uint256 public maxWalletAmount = (initialSupply * 200) / 10000; uint256 public maxTxAmount = (initialSupply * 200) / 10000; bool private _swapping; bool public limitsInEffect = true; uint256 public minimumTokensBeforeSwap = 150000000 * (10**18); address public liquidityWallet; address public marketingWallet; address public buyBackWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 buyBackFeeOnBuy; uint8 buyBackFeeOnSell; uint8 burnFeeOnBuy; uint8 burnFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod("base", 0, 0, 1, 1, 3, 9, 0, 1, 0, 0, 0, 1); mapping(address => bool) private _isAllowedToTradeWhenDisabled; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromMaxTransactionLimit; mapping(address => bool) private _isExcludedFromMaxWalletLimit; mapping(address => bool) public automatedMarketMakerPairs; uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _buyBackFee; uint8 private _burnFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange( address indexed pair, bool indexed value ); event UniswapV2RouterChange( address indexed newAddress, address indexed oldAddress ); event WalletChange( string indexed indentifier, address indexed newWallet, address indexed oldWallet ); event FeeChange( string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 burnFee, uint8 holdersFee ); event CustomTaxPeriodChange( uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period ); event MaxTransactionAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event MaxWalletAmountChange( uint256 indexed newValue, uint256 indexed oldValue ); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransferChange( address indexed account, bool isExcluded ); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event AllowedWhenTradingDisabledChange( address indexed account, bool isExcluded ); event MinTokenAmountBeforeSwapChange( uint256 indexed newValue, uint256 indexed oldValue ); event MinTokenAmountForDividendsChange( uint256 indexed newValue, uint256 indexed oldValue ); event DividendsSent(uint256 tokensSwapped); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event ClaimETHOverflow(uint256 amount); event TokenBurn(uint8 _burnFee, uint256 burnAmount); event FeesApplied( uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 burnFee, uint8 holdersFee, uint8 totalFee ); constructor() ERC20(_name, _symbol) { dividendTracker = new MYDTokenDividendTracker(); dividendTracker.setUniswapRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); dividendTracker.setRewardToken(address(this)); liquidityWallet = owner(); marketingWallet = address(0xEC13cb4c0e61d7146cCd644F9279c6aD6728F18E); buyBackWallet = address(0xe8a8736e2601a35f14579aEe165b0742AD7983d2); IRouter _uniswapV2Router = IRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[buyBackWallet] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(dividendTracker)] = true; dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends( address(0x000000000000000000000000000000000000dEaD) ); dividendTracker.excludeFromDividends(owner()); dividendTracker.excludeFromDividends(address(_uniswapV2Router)); _isAllowedToTradeWhenDisabled[owner()] = true; _isExcludedFromMaxTransactionLimit[address(dividendTracker)] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[marketingWallet] = true; _isExcludedFromMaxTransactionLimit[buyBackWallet] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(dividendTracker)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[marketingWallet] = true; _isExcludedFromMaxWalletLimit[buyBackWallet] = true; _isExcludedFromMaxWalletLimit[ address(0x000000000000000000000000000000000000dEaD) ] = true; _mint(owner(), initialSupply); } receive() external payable {} // Setters function openTrading() external onlyOwner { isTradingEnabled = true; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "MYDToken: Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; if (value) { dividendTracker.excludeFromDividends(pair); } emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function excludeFromFees(address account, bool excluded) external onlyOwner { require( _isExcludedFromFee[account] != excluded, "MYDToken: Account is already the value of 'excluded'" ); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromDividends(address account) external onlyOwner { dividendTracker.excludeFromDividends(account); } function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxTransactionLimit[account] != excluded, "MYDToken: Account is already the value of 'excluded'" ); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransferChange(account, excluded); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != excluded, "MYDToken: Account is already the value of 'excluded'" ); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function setWallets( address newLiquidityWallet, address newMarketingWallet, address newBuyBackWallet ) external onlyOwner { if (liquidityWallet != newLiquidityWallet) { require( newLiquidityWallet != address(0), "MYDToken: The liquidityWallet cannot be 0" ); emit WalletChange( "liquidityWallet", newLiquidityWallet, liquidityWallet ); liquidityWallet = newLiquidityWallet; } if (marketingWallet != newMarketingWallet) { require( newMarketingWallet != address(0), "MYDToken: The marketingWallet cannot be 0" ); emit WalletChange( "marketingWallet", newMarketingWallet, marketingWallet ); marketingWallet = newMarketingWallet; } if (buyBackWallet != newBuyBackWallet) { require( newBuyBackWallet != address(0), "MYDToken: The buyBackWallet cannot be 0" ); emit WalletChange("buyBackWallet", newBuyBackWallet, buyBackWallet); buyBackWallet = newBuyBackWallet; } } // Base fees function setBaseFeesOnBuy( uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _burnFeeOnBuy, uint8 _holdersFeeOnBuy ) external onlyOwner { _setCustomBuyTaxPeriod( _base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _burnFeeOnBuy, _holdersFeeOnBuy ); emit FeeChange( "baseFees-Buy", _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _burnFeeOnBuy, _holdersFeeOnBuy ); } function setBaseFeesOnSell( uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _burnFeeOnSell, uint8 _holdersFeeOnSell ) external onlyOwner { _setCustomSellTaxPeriod( _base, _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _burnFeeOnSell, _holdersFeeOnSell ); emit FeeChange( "baseFees-Sell", _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _burnFeeOnSell, _holdersFeeOnSell ); } function setUniswapRouter(address newAddress) external onlyOwner { require( newAddress != address(uniswapV2Router), "MYDToken: The router already has that address" ); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); dividendTracker.setUniswapRouter(newAddress); } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require( newValue >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require( newValue != minimumTokensBeforeSwap, "MYDToken: Cannot update minimumTokensBeforeSwap to same value" ); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function setMinimumTokenBalanceForDividends(uint256 newValue) external onlyOwner { dividendTracker.setTokenBalanceForDividends(newValue); } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function claimETHOverflow(uint256 amount) external onlyOwner { require( amount < address(this).balance, "MYDToken: Cannot send more than contract balance" ); (bool success, ) = address(owner()).call{value: amount}(""); if (success) { emit ClaimETHOverflow(amount); } } function burn(uint256 value) external { _burn(msg.sender, value); } // Getters function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function withdrawableDividendOf(address account) external view returns (uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) external view returns (uint256) { return dividendTracker.balanceOf(account); } function getNumberOfDividendTokenHolders() external view returns (uint256) { return dividendTracker.getNumberOfTokenHolders(); } function getBaseBuyFees() external view returns ( uint8, uint8, uint8, uint8, uint8 ) { return ( _base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.buyBackFeeOnBuy, _base.burnFeeOnBuy, _base.holdersFeeOnBuy ); } function getBaseSellFees() external view returns ( uint8, uint8, uint8, uint8, uint8 ) { return ( _base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.buyBackFeeOnSell, _base.burnFeeOnSell, _base.holdersFeeOnSell ); } // Main function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } bool isBuyFromLp = automatedMarketMakerPairs[from]; bool isSelltoLp = automatedMarketMakerPairs[to]; if ( !_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to] ) { require( isTradingEnabled, "MYDToken: Trading is currently disabled." ); if (limitsInEffect) { if ( !_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from] ) { require( amount <= maxTxAmount, "MYDToken: Buy amount exceeds the maxTxBuyAmount." ); } if (!_isExcludedFromMaxWalletLimit[to]) { require( (balanceOf(to) + amount) <= maxWalletAmount, "MYDToken: Expected wallet amount exceeds the maxWalletAmount." ); } } } _adjustTaxes(isBuyFromLp, isSelltoLp); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] && !_isExcludedFromFee[from] && !_isExcludedFromFee[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee && _totalFee > 0) { uint256 fee = (amount * _totalFee) / 100; uint256 burnAmount = (amount * _burnFee) / 100; amount = amount - fee; super._transfer(from, address(this), fee); if (burnAmount > 0) { super._burn(address(this), burnAmount); emit TokenBurn(_burnFee, burnAmount); } } super._transfer(from, to, amount); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private { _liquidityFee = 0; _marketingFee = 0; _buyBackFee = 0; _burnFee = 0; _holdersFee = 0; if (isBuyFromLp) { _liquidityFee = _base.liquidityFeeOnBuy; _marketingFee = _base.marketingFeeOnBuy; _buyBackFee = _base.buyBackFeeOnBuy; _burnFee = _base.burnFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _burnFee = _base.burnFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } if (!isSelltoLp && !isBuyFromLp) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _buyBackFee = _base.buyBackFeeOnSell; _burnFee = _base.burnFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee + _holdersFee; emit FeesApplied( _liquidityFee, _marketingFee, _buyBackFee, _burnFee, _holdersFee, _totalFee ); } function _setCustomSellTaxPeriod( CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _burnFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange( _liquidityFeeOnSell, map.liquidityFeeOnSell, "liquidityFeeOnSell", map.periodName ); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.marketingFeeOnSell != _marketingFeeOnSell) { emit CustomTaxPeriodChange( _marketingFeeOnSell, map.marketingFeeOnSell, "marketingFeeOnSell", map.periodName ); map.marketingFeeOnSell = _marketingFeeOnSell; } if (map.buyBackFeeOnSell != _buyBackFeeOnSell) { emit CustomTaxPeriodChange( _buyBackFeeOnSell, map.buyBackFeeOnSell, "buyBackFeeOnSell", map.periodName ); map.buyBackFeeOnSell = _buyBackFeeOnSell; } if (map.burnFeeOnSell != _burnFeeOnSell) { emit CustomTaxPeriodChange( _burnFeeOnSell, map.burnFeeOnSell, "burnFeeOnSell", map.periodName ); map.burnFeeOnSell = _burnFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange( _holdersFeeOnSell, map.holdersFeeOnSell, "holdersFeeOnSell", map.periodName ); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod( CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _burnFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange( _liquidityFeeOnBuy, map.liquidityFeeOnBuy, "liquidityFeeOnBuy", map.periodName ); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.marketingFeeOnBuy != _marketingFeeOnBuy) { emit CustomTaxPeriodChange( _marketingFeeOnBuy, map.marketingFeeOnBuy, "marketingFeeOnBuy", map.periodName ); map.marketingFeeOnBuy = _marketingFeeOnBuy; } if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) { emit CustomTaxPeriodChange( _buyBackFeeOnBuy, map.buyBackFeeOnBuy, "buyBackFeeOnBuy", map.periodName ); map.buyBackFeeOnBuy = _buyBackFeeOnBuy; } if (map.burnFeeOnBuy != _burnFeeOnBuy) { emit CustomTaxPeriodChange( _burnFeeOnBuy, map.burnFeeOnBuy, "burnFeeOnBuy", map.periodName ); map.burnFeeOnBuy = _burnFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange( _holdersFeeOnBuy, map.holdersFeeOnBuy, "holdersFeeOnBuy", map.periodName ); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; uint256 amountToLiquify = (contractBalance * _liquidityFee) / _totalFee / 2; uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee; uint256 amountToSwap = contractBalance - (amountToLiquify + amountForHolders); _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - ((_liquidityFee / 2) + _burnFee + _holdersFee); uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) / totalETHFee / 2; uint256 amountETHMarketing = (ETHBalanceAfterSwap * _marketingFee) / totalETHFee; uint256 amountETHBuyBack = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHMarketing); payable(buyBackWallet).transfer(amountETHBuyBack); payable(marketingWallet).transfer(amountETHMarketing); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify( amountToSwap, amountETHLiquidity, amountToLiquify ); } bool success = IERC20(address(this)).transfer( address(dividendTracker), amountForHolders ); if (success) { dividendTracker.distributeDividendsUsingAmount(amountForHolders); emit DividendsSent(amountForHolders); } } function _swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp ); } } contract MYDTokenDividendTracker is DividendPayingToken { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; mapping(address => bool) public excludedFromDividends; mapping(address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim( address indexed account, uint256 amount, bool indexed automatic ); constructor() DividendPayingToken("MYD_Dividend_Tracker", "MYD_Dividend_Tracker") { claimWait = 3600; minimumTokenBalanceForDividends = 0 * (10**18); } function setRewardToken(address token) external onlyOwner { _setRewardToken(token); } function setUniswapRouter(address router) external onlyOwner { _setUniswapRouter(router); } function _transfer( address, address, uint256 ) internal pure override { require(false, "MYD_Dividend_Tracker: No transfers allowed"); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function setTokenBalanceForDividends(uint256 newValue) external onlyOwner { require( minimumTokenBalanceForDividends != newValue, "MYD_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'." ); minimumTokenBalanceForDividends = newValue; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.keys.length; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract MYDTokenDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052612710620000226df684df56c3e01bc6c7320000000060c862000cb6565b6200002e919062000cd8565b6008556127106200004f6df684df56c3e01bc6c7320000000060c862000cb6565b6200005b919062000cd8565b6009908155600a805461ff0019166101009081179091556a7c13bc4b2c133c56000000600b55604080516101a081018252636261736560e01b815260006020820181905291810182905260016060820181905260808201819052600360a083015260c082019490945260e0810182905291820183905261012082018190526101408201819052610160820181905261018090910191909152600f80546001600160c01b031916636261736560981b1790556010556011805469010000000100090301016001600160501b03199091161790553480156200013a57600080fd5b506040518060400160405280600e81526020016d135d5b1d1a5c1b1e48165a595b1960921b8152506040518060400160405280600381526020016213565160ea1b8152506000620001906200099660201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001e8838262000d9f565b506005620001f7828262000d9f565b505050604051620002089062000c92565b604051809103906000f08015801562000225573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200029057600080fd5b505af1158015620002a5573d6000803e3d6000fd5b5050600754604051638aee812760e01b81523060048201526001600160a01b039091169250638aee81279150602401600060405180830381600087803b158015620002ef57600080fd5b505af115801562000304573d6000803e3d6000fd5b50505050620003186200099a60201b60201c565b600c80546001600160a01b03929092166001600160a01b0319928316179055600d8054821673ec13cb4c0e61d7146ccd644f9279c6ad6728f18e179055600e805490911673e8a8736e2601a35f14579aee165b0742ad7983d21790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f0919062000e6b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200043e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000464919062000e6b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d8919062000e6b565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200050c816001620009a9565b600160136000620005256000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526013909352818320805485166001908117909155600e5482168452828420805486168217905530845282842080548616821790556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005df57600080fd5b505af1158015620005f4573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200063e57600080fd5b505af115801562000653573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200069f57600080fd5b505af1158015620006b4573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db09050620006de6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200072057600080fd5b505af115801562000735573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200078157600080fd5b505af115801562000796573d6000803e3d6000fd5b50505050600160126000620007b06200099a60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600754909116815260149283905281812080548516600190811790915530825291812080549094168217909355916200081f6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260148452828120805486166001908117909155600e54831682528382208054871682179055868316825260159485905283822080548716821790556007548316825283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620008d76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526015909352818320805485166001908117909155600e549091168352908220805484168217905561dead9091527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e580549092161790556200098e620009796000546001600160a01b031690565b6df684df56c3e01bc6c7320000000062000b1c565b505062000eb1565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff90911615150362000a505760405162461bcd60e51b815260206004820152604260248201527f4d5944546f6b656e3a204175746f6d61746564206d61726b6574206d616b657260448201527f207061697220697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000ae05760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000ac657600080fd5b505af115801562000adb573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000b745760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000a47565b62000b908160035462000c2860201b62001bff1790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000bc591839062001bff62000c28821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000c179085815260200190565b60405180910390a35050565b505050565b60008062000c37838562000e96565b90508381101562000c8b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000a47565b9392505050565b611e59806200494c83390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000cd35762000cd362000ca0565b500290565b60008262000cf657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000d2657607f821691505b60208210810362000d4757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000c2357600081815260208120601f850160051c8101602086101562000d765750805b601f850160051c820191505b8181101562000d975782815560010162000d82565b505050505050565b81516001600160401b0381111562000dbb5762000dbb62000cfb565b62000dd38162000dcc845462000d11565b8462000d4d565b602080601f83116001811462000e0b576000841562000df25750858301515b600019600386901b1c1916600185901b17855562000d97565b600085815260208120601f198616915b8281101562000e3c5788860151825594840194600190910190840162000e1b565b508582101562000e5b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000e7e57600080fd5b81516001600160a01b038116811462000c8b57600080fd5b6000821982111562000eac5762000eac62000ca0565b500190565b608051613a7f62000ecd600039600061050d0152613a7f6000f3fe6080604052600436106102cd5760003560e01c806375cb1bd111610175578063aee50b1e116100dc578063cd43e22811610095578063d46980161161006f578063d4698016146108e3578063dd62ed3e14610903578063f2fde38b14610949578063fe0175351461096957600080fd5b8063cd43e2281461083c578063d2d7ad83146108ad578063d3221576146108c357600080fd5b8063aee50b1e14610777578063b1ba39ea14610797578063b62496f5146107b7578063bea9849e146107e7578063c024666814610807578063c9567bf91461082757600080fd5b806395d89b411161012e57806395d89b41146106cc5780639fad9683146106e1578063a457c2d714610701578063a8b9d24014610721578063a9059cbb14610741578063aa4bde281461076157600080fd5b806375cb1bd11461061857806375f0a87414610638578063781edb3c14610658578063880bcbc1146106785780638c0b5e22146106985780638da5cb5b146106ae57600080fd5b8063313ce567116102345780634e71d92d116101ed5780636843cd84116101c75780636843cd841461059857806370a08231146105b8578063715018a6146105ee578063751039fc1461060357600080fd5b80634e71d92d1461054e5780635ebf4db91461056357806364b0f6531461058357600080fd5b8063313ce5671461047f57806331e79db01461049b57806339509351146104bb57806342966c68146104db57806349bd5a5e146104fb5780634a62bb651461052f57600080fd5b80631cd348c0116102865780631cd348c0146103ca5780631e293c10146103ea57806323b872dd1461040a57806327a14fc21461042a5780632c1f52161461044a57806330bb4cff1461046a57600080fd5b8063064a59d0146102d957806306fdde031461030f578063095ea7b314610331578063098df585146103515780631694505e1461037357806318160ddd146103ab57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506007546102fa90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561031b57600080fd5b506103246109af565b60405161030691906133ea565b34801561033d57600080fd5b506102fa61034c366004613454565b610a41565b34801561035d57600080fd5b5061037161036c366004613480565b610a57565b005b34801561037f57600080fd5b50600654610393906001600160a01b031681565b6040516001600160a01b039091168152602001610306565b3480156103b757600080fd5b506003545b604051908152602001610306565b3480156103d657600080fd5b50600e54610393906001600160a01b031681565b3480156103f657600080fd5b50610371610405366004613480565b610b87565b34801561041657600080fd5b506102fa610425366004613499565b610c7f565b34801561043657600080fd5b50610371610445366004613480565b610ce8565b34801561045657600080fd5b50600754610393906001600160a01b031681565b34801561047657600080fd5b506103bc610dd4565b34801561048b57600080fd5b5060405160128152602001610306565b3480156104a757600080fd5b506103716104b63660046134da565b610e47565b3480156104c757600080fd5b506102fa6104d6366004613454565b610ed4565b3480156104e757600080fd5b506103716104f6366004613480565b610f0a565b34801561050757600080fd5b506103937f000000000000000000000000000000000000000000000000000000000000000081565b34801561053b57600080fd5b50600a546102fa90610100900460ff1681565b34801561055a57600080fd5b50610371610f17565b34801561056f57600080fd5b5061037161057e366004613480565b610f8c565b34801561058f57600080fd5b506103bc610fe7565b3480156105a457600080fd5b506103bc6105b33660046134da565b611031565b3480156105c457600080fd5b506103bc6105d33660046134da565b6001600160a01b031660009081526001602052604090205490565b3480156105fa57600080fd5b506103716110a7565b34801561060f57600080fd5b506102fa61111b565b34801561062457600080fd5b506103716106333660046134f7565b611157565b34801561064457600080fd5b50600d54610393906001600160a01b031681565b34801561066457600080fd5b50610371610673366004613550565b611464565b34801561068457600080fd5b50610371610693366004613550565b61152e565b3480156106a457600080fd5b506103bc60095481565b3480156106ba57600080fd5b506000546001600160a01b0316610393565b3480156106d857600080fd5b506103246115f0565b3480156106ed57600080fd5b506103716106fc36600461359f565b6115ff565b34801561070d57600080fd5b506102fa61071c366004613454565b6116b6565b34801561072d57600080fd5b506103bc61073c3660046134da565b611705565b34801561074d57600080fd5b506102fa61075c366004613454565b611738565b34801561076d57600080fd5b506103bc60085481565b34801561078357600080fd5b50610371610792366004613480565b611745565b3480156107a357600080fd5b506103716107b236600461359f565b611819565b3480156107c357600080fd5b506102fa6107d23660046134da565b60166020526000908152604090205460ff1681565b3480156107f357600080fd5b506103716108023660046134da565b611870565b34801561081357600080fd5b50610371610822366004613550565b611992565b34801561083357600080fd5b50610371611a54565b34801561084857600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610306565b3480156108b957600080fd5b506103bc600b5481565b3480156108cf57600080fd5b506103716108de366004613550565b611a93565b3480156108ef57600080fd5b50600c54610393906001600160a01b031681565b34801561090f57600080fd5b506103bc61091e366004613604565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561095557600080fd5b506103716109643660046134da565b611b15565b34801561097557600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610879565b6060600480546109be90613632565b80601f01602080910402602001604051908101604052809291908181526020018280546109ea90613632565b8015610a375780601f10610a0c57610100808354040283529160200191610a37565b820191906000526020600020905b815481529060010190602001808311610a1a57829003601f168201915b5050505050905090565b6000610a4e338484611c65565b50600192915050565b6000546001600160a01b03163314610a8a5760405162461bcd60e51b8152600401610a819061366c565b60405180910390fd5b478110610af25760405162461bcd60e51b815260206004820152603060248201527f4d5944546f6b656e3a2043616e6e6f742073656e64206d6f7265207468616e2060448201526f636f6e74726163742062616c616e636560801b6064820152608401610a81565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610b3f576040519150601f19603f3d011682016040523d82523d6000602084013e610b44565b606091505b505090508015610b83576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610a819061366c565b670de0b6b3a76400006103e8610bc660035490565b610bd19060016136b7565b610bdb91906136ec565b610be591906136ec565b811015610c4c5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a81565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610c8c848484611d8a565b610cde8433610cd9856040518060600160405280602881526020016139dd602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061239f565b611c65565b5060019392505050565b6000546001600160a01b03163314610d125760405162461bcd60e51b8152600401610a819061366c565b670de0b6b3a76400006103e8610d2760035490565b610d329060056136b7565b610d3c91906136ec565b610d4691906136ec565b811015610da15760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a81565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e429190613700565b905090565b6000546001600160a01b03163314610e715760405162461bcd60e51b8152600401610a819061366c565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610a4e918590610cd99086611bff565b610f1433826123d9565b50565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f149190613719565b6000546001600160a01b03163314610fb65760405162461bcd60e51b8152600401610a819061366c565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e9f565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610e1e573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561107d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a19190613700565b92915050565b6000546001600160a01b031633146110d15760405162461bcd60e51b8152600401610a819061366c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146111465760405162461bcd60e51b8152600401610a819061366c565b50600a805461ff0019169055600190565b6000546001600160a01b031633146111815760405162461bcd60e51b8152600401610a819061366c565b600c546001600160a01b03848116911614611277576001600160a01b0383166111fe5760405162461bcd60e51b815260206004820152602960248201527f4d5944546f6b656e3a20546865206c697175696469747957616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610a81565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b0383811691161461136d576001600160a01b0382166112f45760405162461bcd60e51b815260206004820152602960248201527f4d5944546f6b656e3a20546865206d61726b6574696e6757616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610a81565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461145f576001600160a01b0381166113e85760405162461bcd60e51b815260206004820152602760248201527f4d5944546f6b656e3a20546865206275794261636b57616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610a81565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b0316331461148e5760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036114ce5760405162461bcd60e51b8152600401610a8190613736565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146115585760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036115985760405162461bcd60e51b8152600401610a8190613736565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611522565b6060600580546109be90613632565b6000546001600160a01b031633146116295760405162461bcd60e51b8152600401610a819061366c565b611638600f86868686866124e4565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610a4e3384610cd985604051806060016040528060258152602001613a25602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061239f565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611060565b6000610a4e338484611d8a565b6000546001600160a01b0316331461176f5760405162461bcd60e51b8152600401610a819061366c565b600b5481036117e65760405162461bcd60e51b815260206004820152603d60248201527f4d5944546f6b656e3a2043616e6e6f7420757064617465206d696e696d756d5460448201527f6f6b656e734265666f72655377617020746f2073616d652076616c75650000006064820152608401610a81565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146118435760405162461bcd60e51b8152600401610a819061366c565b611852600f86868686866127c9565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611651565b6000546001600160a01b0316331461189a5760405162461bcd60e51b8152600401610a819061366c565b6006546001600160a01b039081169082160361190e5760405162461bcd60e51b815260206004820152602d60248201527f4d5944546f6b656e3a2054686520726f7574657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610a81565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e9f565b6000546001600160a01b031633146119bc5760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036119fc5760405162461bcd60e51b8152600401610a8190613736565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611522565b6000546001600160a01b03163314611a7e5760405162461bcd60e51b8152600401610a819061366c565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314611abd5760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611522565b6000546001600160a01b03163314611b3f5760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b038116611ba45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a81565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c0c838561378a565b905083811015611c5e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a81565b9392505050565b6001600160a01b038316611cc75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a81565b6001600160a01b038216611d285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a81565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611db05760405162461bcd60e51b8152600401610a81906137a2565b6001600160a01b038216611dd65760405162461bcd60e51b8152600401610a81906137e7565b80600003611dea5761145f83836000612aca565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611e4c57506001600160a01b03841660009081526012602052604090205460ff16155b1561203e57600754600160a01b900460ff16611ebb5760405162461bcd60e51b815260206004820152602860248201527f4d5944546f6b656e3a2054726164696e672069732063757272656e746c79206460448201526734b9b0b13632b21760c11b6064820152608401610a81565b600a54610100900460ff161561203e576001600160a01b03841660009081526014602052604090205460ff16158015611f0d57506001600160a01b03851660009081526014602052604090205460ff16155b15611f7d57600954831115611f7d5760405162461bcd60e51b815260206004820152603060248201527f4d5944546f6b656e3a2042757920616d6f756e7420657863656564732074686560448201526f1036b0bc2a3c213abca0b6b7bab73a1760811b6064820152608401610a81565b6001600160a01b03841660009081526015602052604090205460ff1661203e5760085483611fc0866001600160a01b031660009081526001602052604090205490565b611fca919061378a565b111561203e5760405162461bcd60e51b815260206004820152603d60248201527f4d5944546f6b656e3a2045787065637465642077616c6c657420616d6f756e7460448201527f206578636565647320746865206d617857616c6c6574416d6f756e742e0000006064820152608401610a81565b6120488282612bd6565b600b543060009081526001602052604090205460075491111590600160a01b900460ff1680156120755750805b80156120845750600a5460ff16155b801561209b5750601754600160281b900460ff1615155b80156120bf57506001600160a01b03851660009081526016602052604090205460ff165b80156120e457506001600160a01b03861660009081526013602052604090205460ff16155b801561210957506001600160a01b03851660009081526013602052604090205460ff16155b1561212e57600a805460ff19166001179055612123612e4e565b600a805460ff191690555b600a5460009060ff1615801561214d5750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061218f57506001600160a01b03861660009081526013602052604090205460ff165b15612198575060005b8080156121b05750601754600160281b900460ff1615155b15612279576017546000906064906121d290600160281b900460ff16886136b7565b6121dc91906136ec565b6017549091506000906064906121fc906301000000900460ff16896136b7565b61220691906136ec565b9050612212828861382a565b965061221f893084612aca565b80156122765761222f30826123d9565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612284878787612aca565b6007546001600160a01b031663e30443bc886122b5816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122fb57600080fd5b505af192505050801561230c575060015b506007546001600160a01b031663e30443bc8761233e816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561238457600080fd5b505af1925050508015612395575060015b5050505050505050565b600081848411156123c35760405162461bcd60e51b8152600401610a8191906133ea565b5060006123d0848661382a565b95945050505050565b6001600160a01b0382166124395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a81565b61247681604051806060016040528060228152602001613995602291396001600160a01b038516600090815260016020526040902054919061239f565b6001600160a01b03831660009081526001602052604090205560035461249c90826131a9565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600286015460ff86811691161461256557604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613a058339815191529161254b9160481b90613841565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff8581166201000090920416146125f957604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613a05833981519152916125d89160481b90613841565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b9092041614612690576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613a058339815191529161266c9160481b90613841565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612726576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613a05833981519152916127009160481b90613841565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146127c1576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613a05833981519152916127999160481b90613841565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461285a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613a058339815191529161283b9160481b90613841565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff858116630100000090920416146128f357604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613a05833981519152916128d09160481b90613841565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b909204161461298c576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613a05833981519152916129679160481b90613841565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612a24576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613a05833981519152916129fd9160481b90613841565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146127c1576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613a0583398151915291612a989160481b90613841565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612af05760405162461bcd60e51b8152600401610a81906137a2565b6001600160a01b038216612b165760405162461bcd60e51b8152600401610a81906137e7565b612b53816040518060600160405280602681526020016139b7602691396001600160a01b038616600090815260016020526040902054919061239f565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612b829082611bff565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d7d9085815260200190565b6017805464ffffffffff191690558115612c5e576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612cd9576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b80158015612ce5575081155b15612d5f576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60175460ff600160201b820481169163010000008104821691620100008204811691612d9391610100820481169116613858565b612d9d9190613858565b612da79190613858565b612db19190613858565b6017805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610b7a565b306000908152600160205260408120546017549091479160029060ff600160281b8204811691612e7f9116866136b7565b612e8991906136ec565b612e9391906136ec565b60175490915060009060ff600160281b8204811691612ebb91600160201b90910416866136b7565b612ec591906136ec565b90506000612ed3828461378a565b612edd908661382a565b9050612ee8816131eb565b6000612ef4854761382a565b60175490915060009060ff600160201b820481169163010000008104821691612f20916002911661387d565b612f2a9190613858565b612f349190613858565b601754612f4b9190600160281b900460ff1661389f565b60175460ff91821692506000916002918491612f689116866136b7565b612f7291906136ec565b612f7c91906136ec565b6017549091506000908390612f9990610100900460ff16866136b7565b612fa391906136ec565b90506000612fb1828461378a565b612fbb908661382a565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ff6573d6000803e3d6000fd5b50600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613031573d6000803e3d6000fd5b50871561308457613042888461333d565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156130d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fc9190613719565b9050801561319c57600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161319391815260200190565b60405180910390a15b5050505050505050505050565b6000611c5e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613220576132206138c2565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329d91906138d8565b816001815181106132b0576132b06138c2565b6001600160a01b0392831660209182029290920101526006546132d69130911684611c65565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061330f9085906000908690309042906004016138f5565b600060405180830381600087803b15801561332957600080fd5b505af11580156127c1573d6000803e3d6000fd5b6006546133559030906001600160a01b031684611c65565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156133c5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ecd9190613966565b600060208083528351808285015260005b81811015613417578581018301518582016040015282016133fb565b81811115613429576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610f1457600080fd5b6000806040838503121561346757600080fd5b82356134728161343f565b946020939093013593505050565b60006020828403121561349257600080fd5b5035919050565b6000806000606084860312156134ae57600080fd5b83356134b98161343f565b925060208401356134c98161343f565b929592945050506040919091013590565b6000602082840312156134ec57600080fd5b8135611c5e8161343f565b60008060006060848603121561350c57600080fd5b83356135178161343f565b925060208401356135278161343f565b915060408401356135378161343f565b809150509250925092565b8015158114610f1457600080fd5b6000806040838503121561356357600080fd5b823561356e8161343f565b9150602083013561357e81613542565b809150509250929050565b803560ff8116811461359a57600080fd5b919050565b600080600080600060a086880312156135b757600080fd5b6135c086613589565b94506135ce60208701613589565b93506135dc60408701613589565b92506135ea60608701613589565b91506135f860808701613589565b90509295509295909350565b6000806040838503121561361757600080fd5b82356136228161343f565b9150602083013561357e8161343f565b600181811c9082168061364657607f821691505b60208210810361366657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156136d1576136d16136a1565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826136fb576136fb6136d6565b500490565b60006020828403121561371257600080fd5b5051919050565b60006020828403121561372b57600080fd5b8151611c5e81613542565b60208082526034908201527f4d5944546f6b656e3a204163636f756e7420697320616c7265616479207468656040820152732076616c7565206f6620276578636c756465642760601b606082015260800190565b6000821982111561379d5761379d6136a1565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561383c5761383c6136a1565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613875576138756136a1565b019392505050565b600060ff831680613890576138906136d6565b8060ff84160491505092915050565b600060ff821660ff8416808210156138b9576138b96136a1565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156138ea57600080fd5b8151611c5e8161343f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139455784516001600160a01b031683529383019391830191600101613920565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561397b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122023026bf8b7328ce055d33dbf400b9f7694b899b3904d0d9749b59b07f5c6427264736f6c634300080f003360806040523480156200001157600080fd5b5060408051808201825260148082527f4d59445f4469766964656e645f547261636b65720000000000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611be680620002736000396000f3fe6080604052600436106101fd5760003560e01c8063715018a61161010d578063a9059cbb116100a0578063bea9849e1161006f578063bea9849e146105d6578063dd62ed3e146105f6578063e30443bc1461063c578063f2fde38b1461065c578063f7c618c11461067c57600080fd5b8063a9059cbb1461054a578063aafd847a1461056a578063bc4c4b37146105a0578063be10b614146105c057600080fd5b806391b89fba116100dc57806391b89fba146104d557806395d89b41146104f5578063a457c2d71461050a578063a8b9d2401461052a57600080fd5b8063715018a61461046c57806385a6b3ae146104815780638aee8127146104975780638da5cb5b146104b757600080fd5b806327ce0147116101905780634e7b827f1161015f5780634e7b827f146103bb5780636a474002146103eb5780636bf5ecd5146104005780636f2789ec1461042057806370a082311461043657600080fd5b806327ce01471461033f578063313ce5671461035f57806331e79db01461037b578063395093511461039b57600080fd5b80631694505e116101cc5780631694505e146102a557806318160ddd146102dd578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde0314610209578063095ea7b31461023457806309bbedde14610264578063163c7cef1461028357600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021e61069c565b60405161022b919061182d565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611897565b61072e565b604051901515815260200161022b565b34801561027057600080fd5b50600c545b60405190815260200161022b565b34801561028f57600080fd5b506102a361029e3660046118c3565b610745565b005b3480156102b157600080fd5b506009546102c5906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b3480156102e957600080fd5b50600254610275565b3480156102fe57600080fd5b5061027561030d3660046118dc565b60116020526000908152604090205481565b34801561032b57600080fd5b5061025461033a3660046118f9565b610813565b34801561034b57600080fd5b5061027561035a3660046118dc565b61087c565b34801561036b57600080fd5b506040516012815260200161022b565b34801561038757600080fd5b506102a36103963660046118dc565b6108d8565b3480156103a757600080fd5b506102546103b6366004611897565b6109ff565b3480156103c757600080fd5b506102546103d63660046118dc565b60106020526000908152604090205460ff1681565b3480156103f757600080fd5b506102a3610a35565b34801561040c57600080fd5b506102a361041b3660046118c3565b610a6b565b34801561042c57600080fd5b5061027560125481565b34801561044257600080fd5b506102756104513660046118dc565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b506102a3610b28565b34801561048d57600080fd5b5061027560075481565b3480156104a357600080fd5b506102a36104b23660046118dc565b610b9c565b3480156104c357600080fd5b506005546001600160a01b03166102c5565b3480156104e157600080fd5b506102756104f03660046118dc565b610bcf565b34801561050157600080fd5b5061021e610bda565b34801561051657600080fd5b50610254610525366004611897565b610be9565b34801561053657600080fd5b506102756105453660046118dc565b610c38565b34801561055657600080fd5b50610254610565366004611897565b610c64565b34801561057657600080fd5b506102756105853660046118dc565b6001600160a01b03166000908152600b602052604090205490565b3480156105ac57600080fd5b506102546105bb366004611948565b610c71565b3480156105cc57600080fd5b5061027560135481565b3480156105e257600080fd5b506102a36105f13660046118dc565b610d1f565b34801561060257600080fd5b50610275610611366004611981565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561064857600080fd5b506102a3610657366004611897565b610d52565b34801561066857600080fd5b506102a36106773660046118dc565b610ebc565b34801561068857600080fd5b506008546102c5906001600160a01b031681565b6060600380546106ab906119af565b80601f01602080910402602001604051908101604052809291908181526020018280546106d7906119af565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061073b338484610fa7565b5060015b92915050565b6005546001600160a01b031633146107785760405162461bcd60e51b815260040161076f906119e9565b60405180910390fd5b806013540361080e5760405162461bcd60e51b815260206004820152605660248201527f4d59445f4469766964656e645f547261636b65723a206d696e696d756d546f6b60448201527f656e42616c616e6365466f724469766964656e647320616c726561647920746860648201527532903b30b63ab29037b31013b732bbab30b63ab2939760511b608482015260a40161076f565b601355565b60006108208484846110cb565b610872843361086d85604051806060016040528060288152602001611b64602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611126565b610fa7565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b926108ce926108c9926108c3916108be9190611160565b6111e9565b906111f9565b611237565b61073f9190611a34565b6005546001600160a01b031633146109025760405162461bcd60e51b815260040161076f906119e9565b6001600160a01b03811660009081526010602052604090205460ff161561092857600080fd5b6001600160a01b0381166000908152601060205260408120805460ff1916600117905561095690829061124a565b60405163131836e760e21b8152600c60048201526001600160a01b0382166024820152735991cf18c86d85ce263491be9f054c5b3ae5bb6290634c60db9c9060440160006040518083038186803b1580156109b057600080fd5b505af41580156109c4573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161073b91859061086d90866112af565b6005546001600160a01b03163314610a5f5760405162461bcd60e51b815260040161076f906119e9565b610a683361130e565b50565b6005546001600160a01b03163314610a955760405162461bcd60e51b815260040161076f906119e9565b6000610aa060025490565b11610aaa57600080fd5b8015610a6857610add610abc60025490565b610aca83600160801b611160565b610ad49190611a34565b600654906112af565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610b2290826112af565b60075550565b6005546001600160a01b03163314610b525760405162461bcd60e51b815260040161076f906119e9565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bc65760405162461bcd60e51b815260040161076f906119e9565b610a6881611473565b600061073f82610c38565b6060600480546106ab906119af565b600061073b338461086d85604051806060016040528060258152602001611b8c602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611126565b6001600160a01b0381166000908152600b602052604081205461073f90610c5e8461087c565b906114bf565b600061073b3384846110cb565b6005546000906001600160a01b03163314610c9e5760405162461bcd60e51b815260040161076f906119e9565b6000610ca98461130e565b90508015610d15576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610d039085815260200190565b60405180910390a3600191505061073f565b5060009392505050565b6005546001600160a01b03163314610d495760405162461bcd60e51b815260040161076f906119e9565b610a6881611501565b6005546001600160a01b03163314610d7c5760405162461bcd60e51b815260040161076f906119e9565b6001600160a01b03821660009081526010602052604090205460ff16610eb8576013548110610e2d57610daf828261124a565b604051632f0ad01760e21b8152600c60048201526001600160a01b038316602482015260448101829052735991cf18c86d85ce263491be9f054c5b3ae5bb629063bc2b405c9060640160006040518083038186803b158015610e1057600080fd5b505af4158015610e24573d6000803e3d6000fd5b50505050610eab565b610e3882600061124a565b60405163131836e760e21b8152600c60048201526001600160a01b0383166024820152735991cf18c86d85ce263491be9f054c5b3ae5bb6290634c60db9c9060440160006040518083038186803b158015610e9257600080fd5b505af4158015610ea6573d6000803e3d6000fd5b505050505b610eb6826001610c71565b505b5050565b6005546001600160a01b03163314610ee65760405162461bcd60e51b815260040161076f906119e9565b6001600160a01b038116610f4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166110095760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076f565b6001600160a01b03821661106a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602a60248201527f4d59445f4469766964656e645f547261636b65723a204e6f207472616e7366656044820152691c9cc8185b1b1bddd95960b21b606482015260840161076f565b6000818484111561114a5760405162461bcd60e51b815260040161076f919061182d565b5060006111578486611a56565b95945050505050565b6000826000036111725750600061073f565b600061117e8385611a6d565b90508261118b8583611a34565b146111e25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161076f565b9392505050565b6000818181121561073f57600080fd5b6000806112068385611a8c565b9050600083121580156112195750838112155b8061122e575060008312801561122e57508381125b6111e257600080fd5b60008082121561124657600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561128957600061127783836114bf565b9050611283848261154d565b50610eb6565b80821015610eb657600061129d82846114bf565b90506112a984826115b1565b50505050565b6000806112bc8385611acd565b9050838110156111e25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161076f565b60008061131a83610c38565b9050801561146a576001600160a01b0383166000908152600b602052604090205461134590826112af565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906113949084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156113f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114149190611ae5565b905080611463576001600160a01b0384166000908152600b602052604090205461143e90836114bf565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b0316331461149d5760405162461bcd60e51b815260040161076f906119e9565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006111e283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611126565b6005546001600160a01b0316331461152b5760405162461bcd60e51b815260040161076f906119e9565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b61155782826115f5565b6115916115726108be8360065461116090919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906116e0565b6001600160a01b039092166000908152600a602052604090209190915550565b6115bb828261171d565b6115916115d66108be8360065461116090919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906111f9565b6001600160a01b03821661164b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161076f565b61165760008383610eb6565b60025461166490826112af565b6002556001600160a01b03821660009081526020819052604090205461168a90826112af565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806116ed8385611b02565b9050600083121580156117005750838113155b8061122e575060008312801561122e57508381136111e257600080fd5b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161076f565b61178982600083610eb6565b6117c681604051806060016040528060228152602001611b42602291396001600160a01b0385166000908152602081905260409020549190611126565b6001600160a01b0383166000908152602081905260409020556002546117ec90826114bf565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016116d4565b600060208083528351808285015260005b8181101561185a5785810183015185820160400152820161183e565b8181111561186c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610a6857600080fd5b600080604083850312156118aa57600080fd5b82356118b581611882565b946020939093013593505050565b6000602082840312156118d557600080fd5b5035919050565b6000602082840312156118ee57600080fd5b81356111e281611882565b60008060006060848603121561190e57600080fd5b833561191981611882565b9250602084013561192981611882565b929592945050506040919091013590565b8015158114610a6857600080fd5b6000806040838503121561195b57600080fd5b823561196681611882565b915060208301356119768161193a565b809150509250929050565b6000806040838503121561199457600080fd5b823561199f81611882565b9150602083013561197681611882565b600181811c908216806119c357607f821691505b6020821081036119e357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611a5157634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611a6857611a68611a1e565b500390565b6000816000190483118215151615611a8757611a87611a1e565b500290565b600080821280156001600160ff1b0384900385131615611aae57611aae611a1e565b600160ff1b8390038412811615611ac757611ac7611a1e565b50500190565b60008219821115611ae057611ae0611a1e565b500190565b600060208284031215611af757600080fd5b81516111e28161193a565b60008083128015600160ff1b850184121615611b2057611b20611a1e565b6001600160ff1b0384018313811615611b3b57611b3b611a1e565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c95b24dc0a911d5c57aef18f4b86e735ccae2b3f976d624f81a45ab365bee28764736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c806375cb1bd111610175578063aee50b1e116100dc578063cd43e22811610095578063d46980161161006f578063d4698016146108e3578063dd62ed3e14610903578063f2fde38b14610949578063fe0175351461096957600080fd5b8063cd43e2281461083c578063d2d7ad83146108ad578063d3221576146108c357600080fd5b8063aee50b1e14610777578063b1ba39ea14610797578063b62496f5146107b7578063bea9849e146107e7578063c024666814610807578063c9567bf91461082757600080fd5b806395d89b411161012e57806395d89b41146106cc5780639fad9683146106e1578063a457c2d714610701578063a8b9d24014610721578063a9059cbb14610741578063aa4bde281461076157600080fd5b806375cb1bd11461061857806375f0a87414610638578063781edb3c14610658578063880bcbc1146106785780638c0b5e22146106985780638da5cb5b146106ae57600080fd5b8063313ce567116102345780634e71d92d116101ed5780636843cd84116101c75780636843cd841461059857806370a08231146105b8578063715018a6146105ee578063751039fc1461060357600080fd5b80634e71d92d1461054e5780635ebf4db91461056357806364b0f6531461058357600080fd5b8063313ce5671461047f57806331e79db01461049b57806339509351146104bb57806342966c68146104db57806349bd5a5e146104fb5780634a62bb651461052f57600080fd5b80631cd348c0116102865780631cd348c0146103ca5780631e293c10146103ea57806323b872dd1461040a57806327a14fc21461042a5780632c1f52161461044a57806330bb4cff1461046a57600080fd5b8063064a59d0146102d957806306fdde031461030f578063095ea7b314610331578063098df585146103515780631694505e1461037357806318160ddd146103ab57600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506007546102fa90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561031b57600080fd5b506103246109af565b60405161030691906133ea565b34801561033d57600080fd5b506102fa61034c366004613454565b610a41565b34801561035d57600080fd5b5061037161036c366004613480565b610a57565b005b34801561037f57600080fd5b50600654610393906001600160a01b031681565b6040516001600160a01b039091168152602001610306565b3480156103b757600080fd5b506003545b604051908152602001610306565b3480156103d657600080fd5b50600e54610393906001600160a01b031681565b3480156103f657600080fd5b50610371610405366004613480565b610b87565b34801561041657600080fd5b506102fa610425366004613499565b610c7f565b34801561043657600080fd5b50610371610445366004613480565b610ce8565b34801561045657600080fd5b50600754610393906001600160a01b031681565b34801561047657600080fd5b506103bc610dd4565b34801561048b57600080fd5b5060405160128152602001610306565b3480156104a757600080fd5b506103716104b63660046134da565b610e47565b3480156104c757600080fd5b506102fa6104d6366004613454565b610ed4565b3480156104e757600080fd5b506103716104f6366004613480565b610f0a565b34801561050757600080fd5b506103937f0000000000000000000000004405d802ab096b0301b82a933c5b91ad62d8015e81565b34801561053b57600080fd5b50600a546102fa90610100900460ff1681565b34801561055a57600080fd5b50610371610f17565b34801561056f57600080fd5b5061037161057e366004613480565b610f8c565b34801561058f57600080fd5b506103bc610fe7565b3480156105a457600080fd5b506103bc6105b33660046134da565b611031565b3480156105c457600080fd5b506103bc6105d33660046134da565b6001600160a01b031660009081526001602052604090205490565b3480156105fa57600080fd5b506103716110a7565b34801561060f57600080fd5b506102fa61111b565b34801561062457600080fd5b506103716106333660046134f7565b611157565b34801561064457600080fd5b50600d54610393906001600160a01b031681565b34801561066457600080fd5b50610371610673366004613550565b611464565b34801561068457600080fd5b50610371610693366004613550565b61152e565b3480156106a457600080fd5b506103bc60095481565b3480156106ba57600080fd5b506000546001600160a01b0316610393565b3480156106d857600080fd5b506103246115f0565b3480156106ed57600080fd5b506103716106fc36600461359f565b6115ff565b34801561070d57600080fd5b506102fa61071c366004613454565b6116b6565b34801561072d57600080fd5b506103bc61073c3660046134da565b611705565b34801561074d57600080fd5b506102fa61075c366004613454565b611738565b34801561076d57600080fd5b506103bc60085481565b34801561078357600080fd5b50610371610792366004613480565b611745565b3480156107a357600080fd5b506103716107b236600461359f565b611819565b3480156107c357600080fd5b506102fa6107d23660046134da565b60166020526000908152604090205460ff1681565b3480156107f357600080fd5b506103716108023660046134da565b611870565b34801561081357600080fd5b50610371610822366004613550565b611992565b34801561083357600080fd5b50610371611a54565b34801561084857600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a001610306565b3480156108b957600080fd5b506103bc600b5481565b3480156108cf57600080fd5b506103716108de366004613550565b611a93565b3480156108ef57600080fd5b50600c54610393906001600160a01b031681565b34801561090f57600080fd5b506103bc61091e366004613604565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561095557600080fd5b506103716109643660046134da565b611b15565b34801561097557600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610879565b6060600480546109be90613632565b80601f01602080910402602001604051908101604052809291908181526020018280546109ea90613632565b8015610a375780601f10610a0c57610100808354040283529160200191610a37565b820191906000526020600020905b815481529060010190602001808311610a1a57829003601f168201915b5050505050905090565b6000610a4e338484611c65565b50600192915050565b6000546001600160a01b03163314610a8a5760405162461bcd60e51b8152600401610a819061366c565b60405180910390fd5b478110610af25760405162461bcd60e51b815260206004820152603060248201527f4d5944546f6b656e3a2043616e6e6f742073656e64206d6f7265207468616e2060448201526f636f6e74726163742062616c616e636560801b6064820152608401610a81565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610b3f576040519150601f19603f3d011682016040523d82523d6000602084013e610b44565b606091505b505090508015610b83576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610a819061366c565b670de0b6b3a76400006103e8610bc660035490565b610bd19060016136b7565b610bdb91906136ec565b610be591906136ec565b811015610c4c5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a81565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610c8c848484611d8a565b610cde8433610cd9856040518060600160405280602881526020016139dd602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061239f565b611c65565b5060019392505050565b6000546001600160a01b03163314610d125760405162461bcd60e51b8152600401610a819061366c565b670de0b6b3a76400006103e8610d2760035490565b610d329060056136b7565b610d3c91906136ec565b610d4691906136ec565b811015610da15760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a81565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e429190613700565b905090565b6000546001600160a01b03163314610e715760405162461bcd60e51b8152600401610a819061366c565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610a4e918590610cd99086611bff565b610f1433826123d9565b50565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015610f68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f149190613719565b6000546001600160a01b03163314610fb65760405162461bcd60e51b8152600401610a819061366c565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e9f565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610e1e573d6000803e3d6000fd5b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561107d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a19190613700565b92915050565b6000546001600160a01b031633146110d15760405162461bcd60e51b8152600401610a819061366c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146111465760405162461bcd60e51b8152600401610a819061366c565b50600a805461ff0019169055600190565b6000546001600160a01b031633146111815760405162461bcd60e51b8152600401610a819061366c565b600c546001600160a01b03848116911614611277576001600160a01b0383166111fe5760405162461bcd60e51b815260206004820152602960248201527f4d5944546f6b656e3a20546865206c697175696469747957616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610a81565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b0383811691161461136d576001600160a01b0382166112f45760405162461bcd60e51b815260206004820152602960248201527f4d5944546f6b656e3a20546865206d61726b6574696e6757616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610a81565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b0382811691161461145f576001600160a01b0381166113e85760405162461bcd60e51b815260206004820152602760248201527f4d5944546f6b656e3a20546865206275794261636b57616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610a81565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691831690600d01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6000546001600160a01b0316331461148e5760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036114ce5760405162461bcd60e51b8152600401610a8190613736565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146115585760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036115985760405162461bcd60e51b8152600401610a8190613736565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611522565b6060600580546109be90613632565b6000546001600160a01b031633146116295760405162461bcd60e51b8152600401610a819061366c565b611638600f86868686866124e4565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610a4e3384610cd985604051806060016040528060258152602001613a25602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061239f565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611060565b6000610a4e338484611d8a565b6000546001600160a01b0316331461176f5760405162461bcd60e51b8152600401610a819061366c565b600b5481036117e65760405162461bcd60e51b815260206004820152603d60248201527f4d5944546f6b656e3a2043616e6e6f7420757064617465206d696e696d756d5460448201527f6f6b656e734265666f72655377617020746f2073616d652076616c75650000006064820152608401610a81565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146118435760405162461bcd60e51b8152600401610a819061366c565b611852600f86868686866127c9565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611651565b6000546001600160a01b0316331461189a5760405162461bcd60e51b8152600401610a819061366c565b6006546001600160a01b039081169082160361190e5760405162461bcd60e51b815260206004820152602d60248201527f4d5944546f6b656e3a2054686520726f7574657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610a81565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e9f565b6000546001600160a01b031633146119bc5760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036119fc5760405162461bcd60e51b8152600401610a8190613736565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611522565b6000546001600160a01b03163314611a7e5760405162461bcd60e51b8152600401610a819061366c565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314611abd5760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611522565b6000546001600160a01b03163314611b3f5760405162461bcd60e51b8152600401610a819061366c565b6001600160a01b038116611ba45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a81565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c0c838561378a565b905083811015611c5e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a81565b9392505050565b6001600160a01b038316611cc75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a81565b6001600160a01b038216611d285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a81565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611db05760405162461bcd60e51b8152600401610a81906137a2565b6001600160a01b038216611dd65760405162461bcd60e51b8152600401610a81906137e7565b80600003611dea5761145f83836000612aca565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611e4c57506001600160a01b03841660009081526012602052604090205460ff16155b1561203e57600754600160a01b900460ff16611ebb5760405162461bcd60e51b815260206004820152602860248201527f4d5944546f6b656e3a2054726164696e672069732063757272656e746c79206460448201526734b9b0b13632b21760c11b6064820152608401610a81565b600a54610100900460ff161561203e576001600160a01b03841660009081526014602052604090205460ff16158015611f0d57506001600160a01b03851660009081526014602052604090205460ff16155b15611f7d57600954831115611f7d5760405162461bcd60e51b815260206004820152603060248201527f4d5944546f6b656e3a2042757920616d6f756e7420657863656564732074686560448201526f1036b0bc2a3c213abca0b6b7bab73a1760811b6064820152608401610a81565b6001600160a01b03841660009081526015602052604090205460ff1661203e5760085483611fc0866001600160a01b031660009081526001602052604090205490565b611fca919061378a565b111561203e5760405162461bcd60e51b815260206004820152603d60248201527f4d5944546f6b656e3a2045787065637465642077616c6c657420616d6f756e7460448201527f206578636565647320746865206d617857616c6c6574416d6f756e742e0000006064820152608401610a81565b6120488282612bd6565b600b543060009081526001602052604090205460075491111590600160a01b900460ff1680156120755750805b80156120845750600a5460ff16155b801561209b5750601754600160281b900460ff1615155b80156120bf57506001600160a01b03851660009081526016602052604090205460ff165b80156120e457506001600160a01b03861660009081526013602052604090205460ff16155b801561210957506001600160a01b03851660009081526013602052604090205460ff16155b1561212e57600a805460ff19166001179055612123612e4e565b600a805460ff191690555b600a5460009060ff1615801561214d5750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061218f57506001600160a01b03861660009081526013602052604090205460ff165b15612198575060005b8080156121b05750601754600160281b900460ff1615155b15612279576017546000906064906121d290600160281b900460ff16886136b7565b6121dc91906136ec565b6017549091506000906064906121fc906301000000900460ff16896136b7565b61220691906136ec565b9050612212828861382a565b965061221f893084612aca565b80156122765761222f30826123d9565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612284878787612aca565b6007546001600160a01b031663e30443bc886122b5816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122fb57600080fd5b505af192505050801561230c575060015b506007546001600160a01b031663e30443bc8761233e816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561238457600080fd5b505af1925050508015612395575060015b5050505050505050565b600081848411156123c35760405162461bcd60e51b8152600401610a8191906133ea565b5060006123d0848661382a565b95945050505050565b6001600160a01b0382166124395760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a81565b61247681604051806060016040528060228152602001613995602291396001600160a01b038516600090815260016020526040902054919061239f565b6001600160a01b03831660009081526001602052604090205560035461249c90826131a9565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600286015460ff86811691161461256557604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613a058339815191529161254b9160481b90613841565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff8581166201000090920416146125f957604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613a05833981519152916125d89160481b90613841565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b9092041614612690576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613a058339815191529161266c9160481b90613841565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612726576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613a05833981519152916127009160481b90613841565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b90920416146127c1576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613a05833981519152916127999160481b90613841565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b600286015460ff868116610100909204161461285a57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613a058339815191529161283b9160481b90613841565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff858116630100000090920416146128f357604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613a05833981519152916128d09160481b90613841565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b909204161461298c576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613a05833981519152916129679160481b90613841565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612a24576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613a05833981519152916129fd9160481b90613841565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b90920416146127c1576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613a0583398151915291612a989160481b90613841565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612af05760405162461bcd60e51b8152600401610a81906137a2565b6001600160a01b038216612b165760405162461bcd60e51b8152600401610a81906137e7565b612b53816040518060600160405280602681526020016139b7602691396001600160a01b038616600090815260016020526040902054919061239f565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612b829082611bff565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d7d9085815260200190565b6017805464ffffffffff191690558115612c5e576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612cd9576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b80158015612ce5575081155b15612d5f576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60175460ff600160201b820481169163010000008104821691620100008204811691612d9391610100820481169116613858565b612d9d9190613858565b612da79190613858565b612db19190613858565b6017805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610b7a565b306000908152600160205260408120546017549091479160029060ff600160281b8204811691612e7f9116866136b7565b612e8991906136ec565b612e9391906136ec565b60175490915060009060ff600160281b8204811691612ebb91600160201b90910416866136b7565b612ec591906136ec565b90506000612ed3828461378a565b612edd908661382a565b9050612ee8816131eb565b6000612ef4854761382a565b60175490915060009060ff600160201b820481169163010000008104821691612f20916002911661387d565b612f2a9190613858565b612f349190613858565b601754612f4b9190600160281b900460ff1661389f565b60175460ff91821692506000916002918491612f689116866136b7565b612f7291906136ec565b612f7c91906136ec565b6017549091506000908390612f9990610100900460ff16866136b7565b612fa391906136ec565b90506000612fb1828461378a565b612fbb908661382a565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ff6573d6000803e3d6000fd5b50600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613031573d6000803e3d6000fd5b50871561308457613042888461333d565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156130d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fc9190613719565b9050801561319c57600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161319391815260200190565b60405180910390a15b5050505050505050505050565b6000611c5e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239f565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613220576132206138c2565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329d91906138d8565b816001815181106132b0576132b06138c2565b6001600160a01b0392831660209182029290920101526006546132d69130911684611c65565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061330f9085906000908690309042906004016138f5565b600060405180830381600087803b15801561332957600080fd5b505af11580156127c1573d6000803e3d6000fd5b6006546133559030906001600160a01b031684611c65565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156133c5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ecd9190613966565b600060208083528351808285015260005b81811015613417578581018301518582016040015282016133fb565b81811115613429576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610f1457600080fd5b6000806040838503121561346757600080fd5b82356134728161343f565b946020939093013593505050565b60006020828403121561349257600080fd5b5035919050565b6000806000606084860312156134ae57600080fd5b83356134b98161343f565b925060208401356134c98161343f565b929592945050506040919091013590565b6000602082840312156134ec57600080fd5b8135611c5e8161343f565b60008060006060848603121561350c57600080fd5b83356135178161343f565b925060208401356135278161343f565b915060408401356135378161343f565b809150509250925092565b8015158114610f1457600080fd5b6000806040838503121561356357600080fd5b823561356e8161343f565b9150602083013561357e81613542565b809150509250929050565b803560ff8116811461359a57600080fd5b919050565b600080600080600060a086880312156135b757600080fd5b6135c086613589565b94506135ce60208701613589565b93506135dc60408701613589565b92506135ea60608701613589565b91506135f860808701613589565b90509295509295909350565b6000806040838503121561361757600080fd5b82356136228161343f565b9150602083013561357e8161343f565b600181811c9082168061364657607f821691505b60208210810361366657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156136d1576136d16136a1565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826136fb576136fb6136d6565b500490565b60006020828403121561371257600080fd5b5051919050565b60006020828403121561372b57600080fd5b8151611c5e81613542565b60208082526034908201527f4d5944546f6b656e3a204163636f756e7420697320616c7265616479207468656040820152732076616c7565206f6620276578636c756465642760601b606082015260800190565b6000821982111561379d5761379d6136a1565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561383c5761383c6136a1565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff821660ff84168060ff03821115613875576138756136a1565b019392505050565b600060ff831680613890576138906136d6565b8060ff84160491505092915050565b600060ff821660ff8416808210156138b9576138b96136a1565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156138ea57600080fd5b8151611c5e8161343f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139455784516001600160a01b031683529383019391830191600101613920565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561397b57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122023026bf8b7328ce055d33dbf400b9f7694b899b3904d0d9749b59b07f5c6427264736f6c634300080f0033
Deployed Bytecode Sourcemap
19340:26077:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19674:28;;;;;;;;;;-1:-1:-1;19674:28:0;;;;-1:-1:-1;;;19674:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;19674:28:0;;;;;;;;10045:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11100:210::-;;;;;;;;;;-1:-1:-1;11100:210:0;;;;;:::i;:::-;;:::i;32704:357::-;;;;;;;;;;-1:-1:-1;32704:357:0;;;;;:::i;:::-;;:::i;:::-;;19388:30;;;;;;;;;;-1:-1:-1;19388:30:0;;;;-1:-1:-1;;;;;19388:30:0;;;;;;-1:-1:-1;;;;;1628:32:1;;;1610:51;;1598:2;1583:18;19388:30:0;1449:218:1;10366:108:0;;;;;;;;;;-1:-1:-1;10454:12:0;;10366:108;;;1818:25:1;;;1806:2;1791:18;10366:108:0;1672:177:1;20153:28:0;;;;;;;;;;-1:-1:-1;20153:28:0;;;;-1:-1:-1;;;;;20153:28:0;;;31372:331;;;;;;;;;;-1:-1:-1;31372:331:0;;;;;:::i;:::-;;:::i;11318:454::-;;;;;;;;;;-1:-1:-1;11318:454:0;;;;;:::i;:::-;;:::i;31711:318::-;;;;;;;;;;-1:-1:-1;31711:318:0;;;;;:::i;:::-;;:::i;19619:46::-;;;;;;;;;;-1:-1:-1;19619:46:0;;;;-1:-1:-1;;;;;19619:46:0;;;33174:141;;;;;;;;;;;;;:::i;10265:93::-;;;;;;;;;;-1:-1:-1;10265:93:0;;10348:2;2913:36:1;;2901:2;2886:18;10265:93:0;2771:184:1;27134:130:0;;;;;;;;;;-1:-1:-1;27134:130:0;;;;;:::i;:::-;;:::i;11780:300::-;;;;;;;;;;-1:-1:-1;11780:300:0;;;;;:::i;:::-;;:::i;33069:81::-;;;;;;;;;;-1:-1:-1;33069:81:0;;;;;:::i;:::-;;:::i;19425:38::-;;;;;;;;;;;;;;;19969:33;;;;;;;;;;-1:-1:-1;19969:33:0;;;;;;;;;;;32593:103;;;;;;;;;;;;;:::i;32409:176::-;;;;;;;;;;-1:-1:-1;32409:176:0;;;;;:::i;:::-;;:::i;33698:142::-;;;;;;;;;;;;;:::i;33517:173::-;;;;;;;;;;-1:-1:-1;33517:173:0;;;;;:::i;:::-;;:::i;10482:177::-;;;;;;;;;;-1:-1:-1;10482:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;10633:18:0;10601:7;10633:18;;;:9;:18;;;;;;;10482:177;9164:148;;;;;;;;;;;;;:::i;27272:121::-;;;;;;;;;;;;;:::i;28236:1339::-;;;;;;;;;;-1:-1:-1;28236:1339:0;;;;;:::i;:::-;;:::i;20116:30::-;;;;;;;;;;-1:-1:-1;20116:30:0;;;;-1:-1:-1;;;;;20116:30:0;;;27827:401;;;;;;;;;;-1:-1:-1;27827:401:0;;;;;:::i;:::-;;:::i;27401:418::-;;;;;;;;;;-1:-1:-1;27401:418:0;;;;;:::i;:::-;;:::i;19873:58::-;;;;;;;;;;;;;;;;8950:79;;;;;;;;;;-1:-1:-1;8988:7:0;9015:6;-1:-1:-1;;;;;9015:6:0;8950:79;;10153:104;;;;;;;;;;;;;:::i;29601:667::-;;;;;;;;;;-1:-1:-1;29601:667:0;;;;;:::i;:::-;;:::i;12088:400::-;;;;;;;;;;-1:-1:-1;12088:400:0;;;;;:::i;:::-;;:::i;33323:186::-;;;;;;;;;;-1:-1:-1;33323:186:0;;;;;:::i;:::-;;:::i;10667:216::-;;;;;;;;;;-1:-1:-1;10667:216:0;;;;;:::i;:::-;;:::i;19802:62::-;;;;;;;;;;;;;;;;32037:364;;;;;;;;;;-1:-1:-1;32037:364:0;;;;;:::i;:::-;;:::i;30276:685::-;;;;;;;;;;-1:-1:-1;30276:685:0;;;;;:::i;:::-;;:::i;21045:57::-;;;;;;;;;;-1:-1:-1;21045:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30969:395;;;;;;;;;;-1:-1:-1;30969:395:0;;;;;:::i;:::-;;:::i;26762:364::-;;;;;;;;;;-1:-1:-1;26762:364:0;;;;;:::i;:::-;;:::i;25968:84::-;;;;;;;;;;;;;:::i;33848:410::-;;;;;;;;;;-1:-1:-1;34073:23:0;;;;;;;34111;;;;;;-1:-1:-1;;;34149:21:0;;;;;-1:-1:-1;;;34185:18:0;;;;;-1:-1:-1;;;34218:21:0;;;;33848:410;;;;5155:4:1;5143:17;;;5125:36;;5197:17;;;5192:2;5177:18;;5170:45;5251:17;;;5231:18;;;5224:45;;;;5305:17;;5300:2;5285:18;;5278:45;5360:17;;;5354:3;5339:19;;5332:46;5112:3;5097:19;33848:410:0;4886:498:1;20009:61:0;;;;;;;;;;;;;;;;26514:240;;;;;;;;;;-1:-1:-1;26514:240:0;;;;;:::i;:::-;;:::i;20079:30::-;;;;;;;;;;-1:-1:-1;20079:30:0;;;;-1:-1:-1;;;;;20079:30:0;;;10891:201;;;;;;;;;;-1:-1:-1;10891:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;11057:18:0;;;11025:7;11057:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10891:201;9320:281;;;;;;;;;;-1:-1:-1;9320:281:0;;;;;:::i;:::-;;:::i;34266:416::-;;;;;;;;;;-1:-1:-1;34492:24:0;;;;;;;;;34531;;;;;;-1:-1:-1;;;34570:22:0;;;;;-1:-1:-1;;;34607:19:0;;;;;-1:-1:-1;;;34641:22:0;;;;34266:416;;10045:100;10099:13;10132:5;10125:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10045:100;:::o;11100:210::-;11219:4;11241:39;8338:10;11264:7;11273:6;11241:8;:39::i;:::-;-1:-1:-1;11298:4:0;11100:210;;;;:::o;32704:357::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;;;;;;;;;32807:21:::1;32798:6;:30;32776:128;;;::::0;-1:-1:-1;;;32776:128:0;;6730:2:1;32776:128:0::1;::::0;::::1;6712:21:1::0;6769:2;6749:18;;;6742:30;6808:34;6788:18;;;6781:62;-1:-1:-1;;;6859:18:1;;;6852:46;6915:19;;32776:128:0::1;6528:412:1::0;32776:128:0::1;32916:12;9015:6:::0;;32934:40:::1;::::0;-1:-1:-1;;;;;9015:6:0;;;;32963;;32916:12;32934:40;32916:12;32934:40;32963:6;9015;32934:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32915:59;;;32989:7;32985:69;;;33018:24;::::0;1818:25:1;;;33018:24:0::1;::::0;1806:2:1;1791:18;33018:24:0::1;;;;;;;;32985:69;32765:296;32704:357:::0;:::o;31372:331::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;31518:4:::1;31510;31489:13;10454:12:::0;;;10366:108;31489:13:::1;:17;::::0;31505:1:::1;31489:17;:::i;:::-;31488:26;;;;:::i;:::-;31487:35;;;;:::i;:::-;31475:8;:47;;31453:144;;;::::0;-1:-1:-1;;;31453:144:0;;7919:2:1;31453:144:0::1;::::0;::::1;7901:21:1::0;7958:2;7938:18;;;7931:30;7997:34;7977:18;;;7970:62;-1:-1:-1;;;8048:18:1;;;8041:45;8103:19;;31453:144:0::1;7717:411:1::0;31453:144:0::1;31650:11;::::0;31613:49:::1;::::0;31640:8;;31613:49:::1;::::0;;;::::1;31673:11;:22:::0;31372:331::o;11318:454::-;11458:4;11475:36;11485:6;11493:9;11504:6;11475:9;:36::i;:::-;11522:220;11545:6;8338:10;11593:138;11649:6;11593:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11593:19:0;;;;;;:11;:19;;;;;;;;8338:10;11593:33;;;;;;;;;;:37;:138::i;:::-;11522:8;:220::i;:::-;-1:-1:-1;11760:4:0;11318:454;;;;;:::o;31711:318::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;31852:4:::1;31844;31823:13;10454:12:::0;;;10366:108;31823:13:::1;:17;::::0;31839:1:::1;31823:17;:::i;:::-;31822:26;;;;:::i;:::-;31821:35;;;;:::i;:::-;31809:8;:47;;31787:133;;;::::0;-1:-1:-1;;;31787:133:0;;8335:2:1;31787:133:0::1;::::0;::::1;8317:21:1::0;8374:2;8354:18;;;8347:30;8413:34;8393:18;;;8386:62;-1:-1:-1;;;8464:18:1;;;8457:34;8508:19;;31787:133:0::1;8133:400:1::0;31787:133:0::1;31968:15;::::0;31936:48:::1;::::0;31958:8;;31936:48:::1;::::0;;;::::1;31995:15;:26:::0;31711:318::o;33174:141::-;33264:15;;:43;;;-1:-1:-1;;;33264:43:0;;;;33237:7;;-1:-1:-1;;;;;33264:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33257:50;;33174:141;:::o;27134:130::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;27211:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;27211:45:0;;-1:-1:-1;;;;;1628:32:1;;;27211:45:0::1;::::0;::::1;1610:51:1::0;27211:15:0;;::::1;::::0;:36:::1;::::0;1583:18:1;;27211:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27134:130:::0;:::o;11780:300::-;8338:10;11895:4;11989:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11989:34:0;;;;;;;;;;11895:4;;11917:133;;11967:7;;11989:50;;12028:10;11989:38;:50::i;33069:81::-;33118:24;33124:10;33136:5;33118;:24::i;:::-;33069:81;:::o;32593:103::-;32630:15;;:58;;-1:-1:-1;;;32630:58:0;;32669:10;32630:58;;;8911:51:1;32630:15:0;8978:18:1;;;8971:50;-1:-1:-1;;;;;32630:15:0;;;;:30;;8884:18:1;;32630:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32409:176::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;32524:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;32524:53:0;;::::1;::::0;::::1;1818:25:1::0;;;-1:-1:-1;;;;;32524:15:0;;::::1;::::0;:43:::1;::::0;1791:18:1;;32524:53:0::1;1672:177:1::0;33698:142:0;33791:15;;:41;;;-1:-1:-1;;;33791:41:0;;;;33764:7;;-1:-1:-1;;;;;33791:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;33517:173;33648:15;;:34;;-1:-1:-1;;;33648:34:0;;-1:-1:-1;;;;;1628:32:1;;;33648:34:0;;;1610:51:1;33616:7:0;;33648:15;;:25;;1583:18:1;;33648:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33641:41;33517:173;-1:-1:-1;;33517:173:0:o;9164:148::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;9271:1:::1;9255:6:::0;;9234:40:::1;::::0;-1:-1:-1;;;;;9255:6:0;;::::1;::::0;9234:40:::1;::::0;9271:1;;9234:40:::1;9302:1;9285:19:::0;;-1:-1:-1;;;;;;9285:19:0::1;::::0;;9164:148::o;27272:121::-;27324:4;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;-1:-1:-1;27341:14:0::1;:22:::0;;-1:-1:-1;;27341:22:0::1;::::0;;:14:::1;27272:121:::0;:::o;28236:1339::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;28406:15:::1;::::0;-1:-1:-1;;;;;28406:37:0;;::::1;:15:::0;::::1;:37;28402:410;;-1:-1:-1::0;;;;;28486:32:0;::::1;28460:135;;;::::0;-1:-1:-1;;;28460:135:0;;9484:2:1;28460:135:0::1;::::0;::::1;9466:21:1::0;9523:2;9503:18;;;9496:30;9562:34;9542:18;;;9535:62;-1:-1:-1;;;9613:18:1;;;9606:39;9662:19;;28460:135:0::1;9282:405:1::0;28460:135:0::1;28719:15;::::0;28615:134:::1;::::0;-1:-1:-1;;;9894:30:1;;-1:-1:-1;;;;;28719:15:0;;::::1;::::0;28615:134;::::1;::::0;9949:2:1;9940:12;28615:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;28764:15;:36:::0;;-1:-1:-1;;;;;;28764:36:0::1;-1:-1:-1::0;;;;;28764:36:0;::::1;;::::0;;28402:410:::1;28826:15;::::0;-1:-1:-1;;;;;28826:37:0;;::::1;:15:::0;::::1;:37;28822:410;;-1:-1:-1::0;;;;;28906:32:0;::::1;28880:135;;;::::0;-1:-1:-1;;;28880:135:0;;10165:2:1;28880:135:0::1;::::0;::::1;10147:21:1::0;10204:2;10184:18;;;10177:30;10243:34;10223:18;;;10216:62;-1:-1:-1;;;10294:18:1;;;10287:39;10343:19;;28880:135:0::1;9963:405:1::0;28880:135:0::1;29139:15;::::0;29035:134:::1;::::0;-1:-1:-1;;;10575:30:1;;-1:-1:-1;;;;;29139:15:0;;::::1;::::0;29035:134;::::1;::::0;10630:2:1;10621:12;29035:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;29184:15;:36:::0;;-1:-1:-1;;;;;;29184:36:0::1;-1:-1:-1::0;;;;;29184:36:0;::::1;;::::0;;28822:410:::1;29246:13;::::0;-1:-1:-1;;;;;29246:33:0;;::::1;:13:::0;::::1;:33;29242:326;;-1:-1:-1::0;;;;;29322:30:0;::::1;29296:131;;;::::0;-1:-1:-1;;;29296:131:0;;10846:2:1;29296:131:0::1;::::0;::::1;10828:21:1::0;10885:2;10865:18;;;10858:30;10924:34;10904:18;;;10897:62;-1:-1:-1;;;10975:18:1;;;10968:37;11022:19;;29296:131:0::1;10644:403:1::0;29296:131:0::1;29495:13;::::0;29447:62:::1;::::0;-1:-1:-1;;;11254:28:1;;-1:-1:-1;;;;;29495:13:0;;::::1;::::0;29447:62;::::1;::::0;11307:2:1;11298:12;29447:62:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;29524:13;:32:::0;;-1:-1:-1;;;;;;29524:32:0::1;-1:-1:-1::0;;;;;29524:32:0;::::1;;::::0;;29242:326:::1;28236:1339:::0;;;:::o;27827:401::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27969:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;27947:152:::1;;;;-1:-1:-1::0;;;27947:152:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28110:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;28110:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28175:45;;154:41:1;;;28175:45:0::1;::::0;127:18:1;28175:45:0::1;;;;;;;;27827:401:::0;;:::o;27401:418::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27548:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;27526:157:::1;;;;-1:-1:-1::0;;;27526:157:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27694:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;27694:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27764:47;;154:41:1;;;27764:47:0::1;::::0;127:18:1;27764:47:0::1;14:187:1::0;10153:104:0;10209:13;10242:7;10235:14;;;;;:::i;29601:667::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;29830:209:::1;29867:5;29887:18;29920;29953:16;29984:13;30012:16;29830:22;:209::i;:::-;30055:205;::::0;-1:-1:-1;;;11944:27:1;;11996:2;11987:12;30055:205:0::1;;::::0;;;;;::::1;::::0;;5155:4:1;5143:17;;;5125:36;;5197:17;;;5192:2;5177:18;;5170:45;5251:17;;;5231:18;;;5224:45;5305:17;;;5300:2;5285:18;;5278:45;5360:17;;5354:3;5339:19;;5332:46;30055:205:0;;;;::::1;::::0;;;;;5112:3:1;30055:205:0;;::::1;29601:667:::0;;;;;:::o;12088:400::-;12208:4;12230:228;8338:10;12280:7;12302:145;12359:15;12302:145;;;;;;;;;;;;;;;;;8338:10;12302:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12302:34:0;;;;;;;;;;;;:38;:145::i;33323:186::-;33454:15;;:47;;-1:-1:-1;;;33454:47:0;;-1:-1:-1;;;;;1628:32:1;;;33454:47:0;;;1610:51:1;33422:7:0;;33454:15;;:38;;1583:18:1;;33454:47:0;1449:218:1;10667:216:0;10789:4;10811:42;8338:10;10835:9;10846:6;10811:9;:42::i;32037:364::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;32155:23:::1;;32143:8;:35:::0;32121:146:::1;;;::::0;-1:-1:-1;;;32121:146:0;;12212:2:1;32121:146:0::1;::::0;::::1;12194:21:1::0;12251:2;12231:18;;;12224:30;12290:34;12270:18;;;12263:62;12361:31;12341:18;;;12334:59;12410:19;;32121:146:0::1;12010:425:1::0;32121:146:0::1;32324:23;::::0;32283:65:::1;::::0;32314:8;;32283:65:::1;::::0;;;::::1;32359:23;:34:::0;32037:364::o;30276:685::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;30511:215:::1;30549:5;30569:19;30603;30637:17;30669:14;30698:17;30511:23;:215::i;:::-;30742:211;::::0;-1:-1:-1;;;12642:28:1;;12695:2;12686:12;30742:211:0::1;12440:264:1::0;30969:395:0;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;31089:15:::1;::::0;-1:-1:-1;;;;;31089:15:0;;::::1;31067:38:::0;;::::1;::::0;31045:133:::1;;;::::0;-1:-1:-1;;;31045:133:0;;12911:2:1;31045:133:0::1;::::0;::::1;12893:21:1::0;12950:2;12930:18;;;12923:30;12989:34;12969:18;;;12962:62;-1:-1:-1;;;13040:18:1;;;13033:43;13093:19;;31045:133:0::1;12709:409:1::0;31045:133:0::1;31236:15;::::0;31194:59:::1;::::0;-1:-1:-1;;;;;31236:15:0;;::::1;::::0;31194:59;::::1;::::0;::::1;::::0;31236:15:::1;::::0;31194:59:::1;31264:15;:37:::0;;-1:-1:-1;;;;;;31264:37:0::1;-1:-1:-1::0;;;;;31264:37:0;;::::1;::::0;;::::1;::::0;;;31312:15:::1;::::0;:44:::1;::::0;-1:-1:-1;;;31312:44:0;;::::1;::::0;::::1;1610:51:1::0;;;;31312:15:0;;::::1;::::0;:32:::1;::::0;1583:18:1;;31312:44:0::1;1449:218:1::0;26762:364:0;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26894:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;26872:141:::1;;;;-1:-1:-1::0;;;26872:141:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27024:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;27024:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27078:40;;154:41:1;;;27078:40:0::1;::::0;127:18:1;27078:40:0::1;14:187:1::0;25968:84:0;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;26021:16:::1;:23:::0;;-1:-1:-1;;;;26021:23:0::1;-1:-1:-1::0;;;26021:23:0::1;::::0;;25968:84::o;26514:240::-;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26632:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;26632:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26696:50;;154:41:1;;;26696:50:0::1;::::0;127:18:1;26696:50:0::1;14:187:1::0;9320:281:0;9077:6;;-1:-1:-1;;;;;9077:6:0;8338:10;9077:22;9069:67;;;;-1:-1:-1;;;9069:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9423:22:0;::::1;9401:110;;;::::0;-1:-1:-1;;;9401:110:0;;13325:2:1;9401:110:0::1;::::0;::::1;13307:21:1::0;13364:2;13344:18;;;13337:30;13403:34;13383:18;;;13376:62;-1:-1:-1;;;13454:18:1;;;13447:36;13500:19;;9401:110:0::1;13123:402:1::0;9401:110:0::1;9548:6;::::0;;9527:38:::1;::::0;-1:-1:-1;;;;;9527:38:0;;::::1;::::0;9548:6;::::1;::::0;9527:38:::1;::::0;::::1;9576:6;:17:::0;;-1:-1:-1;;;;;;9576:17:0::1;-1:-1:-1::0;;;;;9576:17:0;;;::::1;::::0;;;::::1;::::0;;9320:281::o;3109:181::-;3167:7;;3199:5;3203:1;3199;:5;:::i;:::-;3187:17;;3228:1;3223;:6;;3215:46;;;;-1:-1:-1;;;3215:46:0;;13865:2:1;3215:46:0;;;13847:21:1;13904:2;13884:18;;;13877:30;13943:29;13923:18;;;13916:57;13990:18;;3215:46:0;13663:351:1;3215:46:0;3281:1;3109:181;-1:-1:-1;;;3109:181:0:o;13951:378::-;-1:-1:-1;;;;;14087:19:0;;14079:68;;;;-1:-1:-1;;;14079:68:0;;14221:2:1;14079:68:0;;;14203:21:1;14260:2;14240:18;;;14233:30;14299:34;14279:18;;;14272:62;-1:-1:-1;;;14350:18:1;;;14343:34;14394:19;;14079:68:0;14019:400:1;14079:68:0;-1:-1:-1;;;;;14166:21:0;;14158:68;;;;-1:-1:-1;;;14158:68:0;;14626:2:1;14158:68:0;;;14608:21:1;14665:2;14645:18;;;14638:30;14704:34;14684:18;;;14677:62;-1:-1:-1;;;14755:18:1;;;14748:32;14797:19;;14158:68:0;14424:398:1;14158:68:0;-1:-1:-1;;;;;14237:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14289:32;;1818:25:1;;;14289:32:0;;1791:18:1;14289:32:0;;;;;;;;13951:378;;;:::o;34703:2808::-;-1:-1:-1;;;;;34835:18:0;;34827:68;;;;-1:-1:-1;;;34827:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34914:16:0;;34906:64;;;;-1:-1:-1;;;34906:64:0;;;;;;;:::i;:::-;34987:6;34997:1;34987:11;34983:93;;35015:28;35031:4;35037:2;35041:1;35015:15;:28::i;34983:93::-;-1:-1:-1;;;;;35107:31:0;;;35088:16;35107:31;;;:25;:31;;;;;;;;;35167:29;;;;;;;;;35228:35;;;:29;:35;;;;;;35107:31;;;;;35167:29;;;;35228:35;35227:36;:87;;;;-1:-1:-1;;;;;;35281:33:0;;;;;;:29;:33;;;;;;;;35280:34;35227:87;35209:970;;;35367:16;;-1:-1:-1;;;35367:16:0;;;;35341:118;;;;-1:-1:-1;;;35341:118:0;;15839:2:1;35341:118:0;;;15821:21:1;15878:2;15858:18;;;15851:30;15917:34;15897:18;;;15890:62;-1:-1:-1;;;15968:18:1;;;15961:38;16016:19;;35341:118:0;15637:404:1;35341:118:0;35478:14;;;;;;;35474:694;;;-1:-1:-1;;;;;35540:38:0;;;;;;:34;:38;;;;;;;;35539:39;:105;;;;-1:-1:-1;;;;;;35604:40:0;;;;;;:34;:40;;;;;;;;35603:41;35539:105;35513:349;;;35731:11;;35721:6;:21;;35687:155;;;;-1:-1:-1;;;35687:155:0;;16248:2:1;35687:155:0;;;16230:21:1;16287:2;16267:18;;;16260:30;16326:34;16306:18;;;16299:62;-1:-1:-1;;;16377:18:1;;;16370:46;16433:19;;35687:155:0;16046:412:1;35687:155:0;-1:-1:-1;;;;;35885:33:0;;;;;;:29;:33;;;;;;;;35880:273;;36005:15;;35994:6;35978:13;35988:2;-1:-1:-1;;;;;10633:18:0;10601:7;10633:18;;;:9;:18;;;;;;;10482:177;35978:13;:22;;;;:::i;:::-;35977:43;;35943:190;;;;-1:-1:-1;;;35943:190:0;;16665:2:1;35943:190:0;;;16647:21:1;16704:2;16684:18;;;16677:30;16743:34;16723:18;;;16716:62;16814:31;16794:18;;;16787:59;16863:19;;35943:190:0;16463:425:1;35943:190:0;36191:37;36204:11;36217:10;36191:12;:37::i;:::-;36282:23;;36272:4;36239:12;10633:18;;;:9;:18;;;;;;36336:16;;-1:-1:-1;;36254:51:0;;-1:-1:-1;;;36336:16:0;;;;:40;;;;;36369:7;36336:40;:67;;;;-1:-1:-1;36394:9:0;;;;36393:10;36336:67;:97;;;;-1:-1:-1;36420:9:0;;-1:-1:-1;;;36420:9:0;;;;:13;;36336:97;:143;;;;-1:-1:-1;;;;;;36450:29:0;;;;;;:25;:29;;;;;;;;36336:143;:185;;;;-1:-1:-1;;;;;;36497:24:0;;;;;;:18;:24;;;;;;;;36496:25;36336:185;:225;;;;-1:-1:-1;;;;;;36539:22:0;;;;;;:18;:22;;;;;;;;36538:23;36336:225;36318:362;;;36588:9;:16;;-1:-1:-1;;36588:16:0;36600:4;36588:16;;;36619:17;:15;:17::i;:::-;36651:9;:17;;-1:-1:-1;;36651:17:0;;;36318:362;36708:9;;36692:12;;36708:9;;36707:10;:30;;;;-1:-1:-1;36721:16:0;;-1:-1:-1;;;36721:16:0;;;;36707:30;-1:-1:-1;;;;;36754:24:0;;;;;;:18;:24;;;;;;36692:45;;-1:-1:-1;36754:24:0;;;:50;;-1:-1:-1;;;;;;36782:22:0;;;;;;:18;:22;;;;;;;;36754:50;36750:98;;;-1:-1:-1;36831:5:0;36750:98;36862:7;:24;;;;-1:-1:-1;36873:9:0;;-1:-1:-1;;;36873:9:0;;;;:13;;36862:24;36858:414;;;36927:9;;36903:11;;36940:3;;36918:18;;-1:-1:-1;;;36927:9:0;;;;36918:6;:18;:::i;:::-;36917:26;;;;:::i;:::-;36989:8;;36903:40;;-1:-1:-1;36958:18:0;;37001:3;;36980:17;;36989:8;;;;;36980:6;:17;:::i;:::-;36979:25;;;;:::i;:::-;36958:46;-1:-1:-1;37028:12:0;37037:3;37028:6;:12;:::i;:::-;37019:21;;37055:41;37071:4;37085;37092:3;37055:15;:41::i;:::-;37117:14;;37113:148;;37152:38;37172:4;37179:10;37152:11;:38::i;:::-;37224:8;;37214:31;;;37224:8;;;;;;17193:36:1;;17260:2;17245:18;;17238:34;;;37214:31:0;;17166:18:1;37214:31:0;;;;;;;37113:148;36888:384;;36858:414;37282:33;37298:4;37304:2;37308:6;37282:15;:33::i;:::-;37345:15;;-1:-1:-1;;;;;37345:15:0;:26;37380:4;37387:15;37380:4;-1:-1:-1;;;;;10633:18:0;10601:7;10633:18;;;:9;:18;;;;;;;10482:177;37387:15;37345:58;;-1:-1:-1;;;;;;37345:58:0;;;;;;;-1:-1:-1;;;;;17491:32:1;;;37345:58:0;;;17473:51:1;17540:18;;;17533:34;17446:18;;37345:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37328:96;37438:15;;-1:-1:-1;;;;;37438:15:0;:26;37473:2;37478:13;37473:2;-1:-1:-1;;;;;10633:18:0;10601:7;10633:18;;;:9;:18;;;;;;;10482:177;37478:13;37438:54;;-1:-1:-1;;;;;;37438:54:0;;;;;;;-1:-1:-1;;;;;17491:32:1;;;37438:54:0;;;17473:51:1;17540:18;;;17533:34;17446:18;;37438:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37434:70;34816:2695;;;;34703:2808;;;:::o;3442:226::-;3562:7;3598:12;3590:6;;;;3582:29;;;;-1:-1:-1;;;3582:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3622:9:0;3634:5;3638:1;3634;:5;:::i;:::-;3622:17;3442:226;-1:-1:-1;;;;;3442:226:0:o;13492:451::-;-1:-1:-1;;;;;13576:21:0;;13568:67;;;;-1:-1:-1;;;13568:67:0;;17780:2:1;13568:67:0;;;17762:21:1;17819:2;17799:18;;;17792:30;17858:34;17838:18;;;17831:62;-1:-1:-1;;;17909:18:1;;;17902:31;17950:19;;13568:67:0;17578:397:1;13568:67:0;13727:105;13764:6;13727:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13727:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;13706:18:0;;;;;;:9;:18;;;;;:126;13858:12;;:24;;13875:6;13858:16;:24::i;:::-;13843:12;:39;13898:37;;1818:25:1;;;13924:1:0;;-1:-1:-1;;;;;13898:37:0;;;;;1806:2:1;1791:18;13898:37:0;;;;;;;13492:451;;:::o;40885:1856::-;41151:21;;;;:43;;;;:21;;:43;41147:322;;41216:184;;-1:-1:-1;;;18182:32:1;;18239:2;18230:12;41216:184:0;;;;;;;;41293:21;;;;41371:14;;41216:184;;41293:21;;;;;41216:184;;;;-1:-1:-1;;;;;;;;;;;41216:184:0;;;41371:14;;;41216:184;:::i;:::-;;;;;;;;41415:21;;;:42;;-1:-1:-1;;41415:42:0;;;;;;;41147:322;41483:21;;;;:43;;;;:21;;;;;:43;41479:322;;41548:184;;-1:-1:-1;;;18669:32:1;;18726:2;18717:12;41548:184:0;;;;;;;;41625:21;;;;41703:14;;41548:184;;41625:21;;;;;;;;41548:184;;;;-1:-1:-1;;;;;;;;;;;41548:184:0;;;41703:14;;;41548:184;:::i;:::-;;;;;;;;41747:21;;;:42;;-1:-1:-1;;41747:42:0;;;;;;;;;41479:322;41815:19;;;;:39;;;;-1:-1:-1;;;41815:19:0;;;;:39;41811:308;;41876:178;;-1:-1:-1;;;18942:30:1;;18997:2;18988:12;41876:178:0;;;;;;;;41951:19;;;;42025:14;;41876:178;;41951:19;-1:-1:-1;;;41951:19:0;;;;;;41876:178;;;;-1:-1:-1;;;;;;;;;;;41876:178:0;;;42025:14;;;41876:178;:::i;:::-;;;;;;;;42069:19;;;:38;;-1:-1:-1;;42069:38:0;-1:-1:-1;;;42069:38:0;;;;;;;41811:308;42133:16;;;;:33;;;;-1:-1:-1;;;42133:16:0;;;;:33;42129:287;;42188:169;;-1:-1:-1;;;19213:27:1;;19265:2;19256:12;42188:169:0;;;;;;;;42260:16;;;;42328:14;;42188:169;;42260:16;-1:-1:-1;;;42260:16:0;;;;;;42188:169;;;;-1:-1:-1;;;;;;;;;;;42188:169:0;;;42328:14;;;42188:169;:::i;:::-;;;;;;;;42372:16;;;:32;;-1:-1:-1;;42372:32:0;-1:-1:-1;;;42372:32:0;;;;;;;42129:287;42430:19;;;;:39;;;;-1:-1:-1;;;42430:19:0;;;;:39;42426:308;;42491:178;;-1:-1:-1;;;19481:30:1;;19536:2;19527:12;42491:178:0;;;;;;;;42566:19;;;;42640:14;;42491:178;;42566:19;-1:-1:-1;;;42566:19:0;;;;;;42491:178;;;;-1:-1:-1;;;;;;;;;;;42491:178:0;;;42640:14;;;42491:178;:::i;:::-;;;;;;;;42684:19;;;:38;;-1:-1:-1;;42684:38:0;-1:-1:-1;;;42684:38:0;;;;;;;42426:308;40885:1856;;;;;;:::o;38980:1897::-;39252:22;;;;:45;;;;:22;;;;;:45;39248:329;;39319:187;;-1:-1:-1;;;19752:33:1;;19810:2;19801:12;39319:187:0;;;;;;;;39397:22;;;;39477:14;;39319:187;;39397:22;;;;;;;;39319:187;;;;-1:-1:-1;;;;;;;;;;;39319:187:0;;;39477:14;;;39319:187;:::i;:::-;;;;;;;;39521:22;;;:44;;-1:-1:-1;;39521:44:0;;;;;;;;;39248:329;39591:22;;;;:45;;;;:22;;;;;:45;39587:329;;39658:187;;-1:-1:-1;;;20026:33:1;;20084:2;20075:12;39658:187:0;;;;;;;;39736:22;;;;39816:14;;39658:187;;39736:22;;;;;;;;39658:187;;;;-1:-1:-1;;;;;;;;;;;39658:187:0;;;39816:14;;;39658:187;:::i;:::-;;;;;;;;39860:22;;;:44;;-1:-1:-1;;39860:44:0;;;;;;;;;39587:329;39930:20;;;;:41;;;;-1:-1:-1;;;39930:20:0;;;;:41;39926:315;;39993:181;;-1:-1:-1;;;20300:31:1;;20356:2;20347:12;39993:181:0;;;;;;;;40069:20;;;;40145:14;;39993:181;;40069:20;-1:-1:-1;;;40069:20:0;;;;;;39993:181;;;;-1:-1:-1;;;;;;;;;;;39993:181:0;;;40145:14;;;39993:181;:::i;:::-;;;;;;;;40189:20;;;:40;;-1:-1:-1;;40189:40:0;-1:-1:-1;;;40189:40:0;;;;;;;39926:315;40255:17;;;;:35;;;;-1:-1:-1;;;40255:17:0;;;;:35;40251:294;;40312:172;;-1:-1:-1;;;20572:28:1;;20625:2;20616:12;40312:172:0;;;;;;;;40385:17;;;;40455:14;;40312:172;;40385:17;-1:-1:-1;;;40385:17:0;;;;;;40312:172;;;;-1:-1:-1;;;;;;;;;;;40312:172:0;;;40455:14;;;40312:172;:::i;:::-;;;;;;;;40499:17;;;:34;;-1:-1:-1;;40499:34:0;-1:-1:-1;;;40499:34:0;;;;;;;40251:294;40559:20;;;;:41;;;;-1:-1:-1;;;40559:20:0;;;;:41;40555:315;;40622:181;;-1:-1:-1;;;20841:31:1;;20897:2;20888:12;40622:181:0;;;;;;;;40698:20;;;;40774:14;;40622:181;;40698:20;-1:-1:-1;;;40698:20:0;;;;;;40622:181;;;;-1:-1:-1;;;;;;;;;;;40622:181:0;;;40774:14;;;40622:181;:::i;:::-;;;;;;;;40818:20;;;:40;;;;;-1:-1:-1;;;40818:40:0;-1:-1:-1;;40818:40:0;;;;;;38980:1897;;;;;;:::o;12496:606::-;-1:-1:-1;;;;;12636:20:0;;12628:70;;;;-1:-1:-1;;;12628:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12717:23:0;;12709:71;;;;-1:-1:-1;;;12709:71:0;;;;;;;:::i;:::-;12869:108;12905:6;12869:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12869:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;12849:17:0;;;;;;;:9;:17;;;;;;:128;;;;13011:20;;;;;;;:32;;13036:6;13011:24;:32::i;:::-;-1:-1:-1;;;;;12988:20:0;;;;;;;:9;:20;;;;;;;:55;;;;13059:35;;;;;;;;;;13087:6;1818:25:1;;1806:2;1791:18;;1672:177;37519:1453:0;37595:13;:17;;-1:-1:-1;;37700:15:0;;;37728:281;;;;37776:23;;37760:13;:39;;37776:23;;;;-1:-1:-1;;37814:39:0;;;;;;;37776:23;37830;;;;;;37814:39;;;;;;;;-1:-1:-1;;37918:29:0;-1:-1:-1;;;37882:21:0;;;;;37868:35;;;;-1:-1:-1;;37918:29:0;;-1:-1:-1;;;37929:18:0;;;;37918:29;;;-1:-1:-1;;37962:35:0;-1:-1:-1;;;37976:21:0;;;;;;;37962:35;;;;;;;37728:281;38023:10;38019:285;;;38066:24;;38050:13;:40;;38066:24;;;;;;;;-1:-1:-1;;38105:40:0;;;;;;;38121:24;;;;;;38105:40;;;;;-1:-1:-1;;38211:30:0;-1:-1:-1;;;38174:22:0;;;;38160:36;;-1:-1:-1;;38211:30:0;;-1:-1:-1;;;38222:19:0;;;;38211:30;;;;;-1:-1:-1;;38256:36:0;-1:-1:-1;;;38270:22:0;;;;-1:-1:-1;;;38256:36:0;;;;;;;38019:285;38319:10;38318:11;:27;;;;;38334:11;38333:12;38318:27;38314:302;;;38378:24;;38362:13;:40;;38378:24;;;;;;;;-1:-1:-1;;38417:40:0;;;;;;;38433:24;;;;;;38417:40;;;;;-1:-1:-1;;38523:30:0;-1:-1:-1;;;38486:22:0;;;;38472:36;;-1:-1:-1;;38523:30:0;;-1:-1:-1;;;38534:19:0;;;;38523:30;;;;;-1:-1:-1;;38568:36:0;-1:-1:-1;;;38582:22:0;;;;-1:-1:-1;;;38568:36:0;;;;;;;38314:302;38760:11;;;-1:-1:-1;;;38760:11:0;;;;;38736:8;;;;;;38709:11;;;;;;38651:42;;38760:11;38680:13;;;;;38651;:42;:::i;:::-;:69;;;;:::i;:::-;:93;;;;:::i;:::-;:120;;;;:::i;:::-;38626:9;:145;;-1:-1:-1;;38626:145:0;;-1:-1:-1;;;38626:145:0;;;;;;;;;;;;;38787:177;;;38813:13;;;;;;;;;;21406:34:1;;38626:145:0;38841:13;;;;21471:2:1;21456:18;;21449:43;38869:11:0;;;;;21508:18:1;;;21501:43;;;;38895:8:0;;;;;21575:2:1;21560:18;;21553:43;-1:-1:-1;;;38918:11:0;;;;21627:3:1;21612:19;;21605:44;38944:9:0;;;;;;21680:3:1;21665:19;;21658:44;38787:177:0;;21370:3:1;21355:19;38787:177:0;21120:588:1;42749:1726:0;42839:4;42795:23;10633:18;;;:9;:18;;;;;;42993:9;;10633:18;;42884:21;;43018:1;;42993:9;-1:-1:-1;;;42993:9:0;;;;;42945:31;;42963:13;10633:18;42945:31;:::i;:::-;42944:58;;;;:::i;:::-;:75;;;;:::i;:::-;43091:9;;42918:101;;-1:-1:-1;43030:24:0;;43091:9;-1:-1:-1;;;43091:9:0;;;;;43058:29;;-1:-1:-1;;;43076:11:0;;;;43058:15;:29;:::i;:::-;43057:43;;;;:::i;:::-;43030:70;-1:-1:-1;43111:20:0;43166:34;43030:70;43166:15;:34;:::i;:::-;43134:67;;:15;:67;:::i;:::-;43111:90;;43214:31;43232:12;43214:17;:31::i;:::-;43258:27;43288:41;43312:17;43288:21;:41;:::i;:::-;43421:11;;43258:71;;-1:-1:-1;43340:19:0;;43421:11;-1:-1:-1;;;43421:11:0;;;;;43410:8;;;;;;43389:17;;43405:1;;43389:13;:17;:::i;:::-;43388:30;;;;:::i;:::-;:44;;;;:::i;:::-;43362:9;;:71;;;-1:-1:-1;;;43362:9:0;;;;:71;:::i;:::-;43496:13;;43340:93;;;;;-1:-1:-1;43444:26:0;;43553:1;;43340:93;;43474:35;;43496:13;43474:19;:35;:::i;:::-;43473:64;;;;:::i;:::-;:81;;;;:::i;:::-;43617:13;;43444:110;;-1:-1:-1;43565:26:0;;43647:11;;43595:35;;43617:13;;;;;43595:19;:35;:::i;:::-;43594:64;;;;:::i;:::-;43565:93;-1:-1:-1;43669:24:0;43732:39;43565:93;43732:18;:39;:::i;:::-;43696:76;;:19;:76;:::i;:::-;43793:13;;43785:49;;43669:103;;-1:-1:-1;;;;;;43793:13:0;;43785:49;;;;;43669:103;;43793:13;43785:49;43793:13;43785:49;43669:103;43793:13;43785:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43853:15:0;;43845:53;;-1:-1:-1;;;;;43853:15:0;;;;43845:53;;;;;43879:18;;43853:15;43845:53;43853:15;43845:53;43879:18;43853:15;43845:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43915:19:0;;43911:253;;43951:50;43965:15;43982:18;43951:13;:50::i;:::-;44021:131;;;22285:25:1;;;22341:2;22326:18;;22319:34;;;22369:18;;;22362:34;;;44021:131:0;;22273:2:1;22258:18;44021:131:0;;;;;;;43911:253;44244:15;;44191:111;;-1:-1:-1;;;44191:111:0;;-1:-1:-1;;;;;44244:15:0;;;44191:111;;;17473:51:1;17540:18;;;17533:34;;;44176:12:0;;44206:4;;44191:30;;17446:18:1;;44191:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44176:126;;44317:7;44313:155;;;44341:15;;:64;;-1:-1:-1;;;44341:64:0;;;;;1818:25:1;;;-1:-1:-1;;;;;44341:15:0;;;;:46;;1791:18:1;;44341:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44425:31;44439:16;44425:31;;;;1818:25:1;;1806:2;1791:18;;1672:177;44425:31:0;;;;;;;;44313:155;42784:1691;;;;;;;;;;;42749:1726::o;3298:136::-;3356:7;3383:43;3387:1;3390;3383:43;;;;;;;;;;;;;;;;;:3;:43::i;44483:500::-;44574:16;;;44588:1;44574:16;;;;;;;;44550:21;;44574:16;;;;;;;;;;-1:-1:-1;44574:16:0;44550:40;;44619:4;44601;44606:1;44601:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44601:23:0;;;:7;;;;;;;;;;:23;;;;44645:15;;:22;;;-1:-1:-1;;;44645:22:0;;;;:15;;;;;:20;;:22;;;;;44601:7;;44645:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44635:4;44640:1;44635:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;44635:32:0;;;:7;;;;;;;;;:32;44710:15;;44678:62;;44695:4;;44710:15;44728:11;44678:8;:62::i;:::-;44751:15;;:224;;-1:-1:-1;;;44751:224:0;;-1:-1:-1;;;;;44751:15:0;;;;:66;;:224;;44832:11;;44751:15;;44902:4;;44929;;44949:15;;44751:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44991:423;45105:15;;45073:62;;45090:4;;-1:-1:-1;;;;;45105:15:0;45123:11;45073:8;:62::i;:::-;45146:15;;45350;;45146:260;;-1:-1:-1;;;45146:260:0;;45218:4;45146:260;;;24532:34:1;24582:18;;;24575:34;;;45146:15:0;24625:18:1;;;24618:34;;;24668:18;;;24661:34;-1:-1:-1;;;;;45350:15:0;;;24711:19:1;;;24704:44;45380:15:0;24764:19:1;;;24757:35;45146:15:0;;;:31;;45185:9;;24466:19:1;;45146:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1264:180::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;-1:-1:-1;1415:23:1;;1264:180;-1:-1:-1;1264:180:1:o;2062:456::-;2139:6;2147;2155;2208:2;2196:9;2187:7;2183:23;2179:32;2176:52;;;2224:1;2221;2214:12;2176:52;2263:9;2250:23;2282:31;2307:5;2282:31;:::i;:::-;2332:5;-1:-1:-1;2389:2:1;2374:18;;2361:32;2402:33;2361:32;2402:33;:::i;:::-;2062:456;;2454:7;;-1:-1:-1;;;2508:2:1;2493:18;;;;2480:32;;2062:456::o;2960:247::-;3019:6;3072:2;3060:9;3051:7;3047:23;3043:32;3040:52;;;3088:1;3085;3078:12;3040:52;3127:9;3114:23;3146:31;3171:5;3146:31;:::i;3212:529::-;3289:6;3297;3305;3358:2;3346:9;3337:7;3333:23;3329:32;3326:52;;;3374:1;3371;3364:12;3326:52;3413:9;3400:23;3432:31;3457:5;3432:31;:::i;:::-;3482:5;-1:-1:-1;3539:2:1;3524:18;;3511:32;3552:33;3511:32;3552:33;:::i;:::-;3604:7;-1:-1:-1;3663:2:1;3648:18;;3635:32;3676:33;3635:32;3676:33;:::i;:::-;3728:7;3718:17;;;3212:529;;;;;:::o;3746:118::-;3832:5;3825:13;3818:21;3811:5;3808:32;3798:60;;3854:1;3851;3844:12;3869:382;3934:6;3942;3995:2;3983:9;3974:7;3970:23;3966:32;3963:52;;;4011:1;4008;4001:12;3963:52;4050:9;4037:23;4069:31;4094:5;4069:31;:::i;:::-;4119:5;-1:-1:-1;4176:2:1;4161:18;;4148:32;4189:30;4148:32;4189:30;:::i;:::-;4238:7;4228:17;;;3869:382;;;;;:::o;4256:156::-;4322:20;;4382:4;4371:16;;4361:27;;4351:55;;4402:1;4399;4392:12;4351:55;4256:156;;;:::o;4417:464::-;4502:6;4510;4518;4526;4534;4587:3;4575:9;4566:7;4562:23;4558:33;4555:53;;;4604:1;4601;4594:12;4555:53;4627:27;4644:9;4627:27;:::i;:::-;4617:37;;4673:36;4705:2;4694:9;4690:18;4673:36;:::i;:::-;4663:46;;4728:36;4760:2;4749:9;4745:18;4728:36;:::i;:::-;4718:46;;4783:36;4815:2;4804:9;4800:18;4783:36;:::i;:::-;4773:46;;4838:37;4870:3;4859:9;4855:19;4838:37;:::i;:::-;4828:47;;4417:464;;;;;;;;:::o;5389:388::-;5457:6;5465;5518:2;5506:9;5497:7;5493:23;5489:32;5486:52;;;5534:1;5531;5524:12;5486:52;5573:9;5560:23;5592:31;5617:5;5592:31;:::i;:::-;5642:5;-1:-1:-1;5699:2:1;5684:18;;5671:32;5712:33;5671:32;5712:33;:::i;5782:380::-;5861:1;5857:12;;;;5904;;;5925:61;;5979:4;5971:6;5967:17;5957:27;;5925:61;6032:2;6024:6;6021:14;6001:18;5998:38;5995:161;;6078:10;6073:3;6069:20;6066:1;6059:31;6113:4;6110:1;6103:15;6141:4;6138:1;6131:15;5995:161;;5782:380;;;:::o;6167:356::-;6369:2;6351:21;;;6388:18;;;6381:30;6447:34;6442:2;6427:18;;6420:62;6514:2;6499:18;;6167:356::o;7155:127::-;7216:10;7211:3;7207:20;7204:1;7197:31;7247:4;7244:1;7237:15;7271:4;7268:1;7261:15;7287:168;7327:7;7393:1;7389;7385:6;7381:14;7378:1;7375:21;7370:1;7363:9;7356:17;7352:45;7349:71;;;7400:18;;:::i;:::-;-1:-1:-1;7440:9:1;;7287:168::o;7460:127::-;7521:10;7516:3;7512:20;7509:1;7502:31;7552:4;7549:1;7542:15;7576:4;7573:1;7566:15;7592:120;7632:1;7658;7648:35;;7663:18;;:::i;:::-;-1:-1:-1;7697:9:1;;7592:120::o;8538:184::-;8608:6;8661:2;8649:9;8640:7;8636:23;8632:32;8629:52;;;8677:1;8674;8667:12;8629:52;-1:-1:-1;8700:16:1;;8538:184;-1:-1:-1;8538:184:1:o;9032:245::-;9099:6;9152:2;9140:9;9131:7;9127:23;9123:32;9120:52;;;9168:1;9165;9158:12;9120:52;9200:9;9194:16;9219:28;9241:5;9219:28;:::i;11321:416::-;11523:2;11505:21;;;11562:2;11542:18;;;11535:30;11601:34;11596:2;11581:18;;11574:62;-1:-1:-1;;;11667:2:1;11652:18;;11645:50;11727:3;11712:19;;11321:416::o;13530:128::-;13570:3;13601:1;13597:6;13594:1;13591:13;13588:39;;;13607:18;;:::i;:::-;-1:-1:-1;13643:9:1;;13530:128::o;14827:401::-;15029:2;15011:21;;;15068:2;15048:18;;;15041:30;15107:34;15102:2;15087:18;;15080:62;-1:-1:-1;;;15173:2:1;15158:18;;15151:35;15218:3;15203:19;;14827:401::o;15233:399::-;15435:2;15417:21;;;15474:2;15454:18;;;15447:30;15513:34;15508:2;15493:18;;15486:62;-1:-1:-1;;;15579:2:1;15564:18;;15557:33;15622:3;15607:19;;15233:399::o;16893:125::-;16933:4;16961:1;16958;16955:8;16952:34;;;16966:18;;:::i;:::-;-1:-1:-1;17003:9:1;;16893:125::o;18253:209::-;-1:-1:-1;;18417:38:1;;;;18399:57;;18387:2;18372:18;;18253:209::o;20911:204::-;20949:3;20985:4;20982:1;20978:12;21017:4;21014:1;21010:12;21052:3;21046:4;21042:14;21037:3;21034:23;21031:49;;;21060:18;;:::i;:::-;21096:13;;20911:204;-1:-1:-1;;;20911:204:1:o;21713:165::-;21751:1;21785:4;21782:1;21778:12;21809:3;21799:37;;21816:18;;:::i;:::-;21868:3;21861:4;21858:1;21854:12;21850:22;21845:27;;;21713:165;;;;:::o;21883:195::-;21921:4;21958;21955:1;21951:12;21990:4;21987:1;21983:12;22015:3;22010;22007:12;22004:38;;;22022:18;;:::i;:::-;22059:13;;;21883:195;-1:-1:-1;;;21883:195:1:o;22818:127::-;22879:10;22874:3;22870:20;22867:1;22860:31;22910:4;22907:1;22900:15;22934:4;22931:1;22924:15;22950:251;23020:6;23073:2;23061:9;23052:7;23048:23;23044:32;23041:52;;;23089:1;23086;23079:12;23041:52;23121:9;23115:16;23140:31;23165:5;23140:31;:::i;23206:980::-;23468:4;23516:3;23505:9;23501:19;23547:6;23536:9;23529:25;23573:2;23611:6;23606:2;23595:9;23591:18;23584:34;23654:3;23649:2;23638:9;23634:18;23627:31;23678:6;23713;23707:13;23744:6;23736;23729:22;23782:3;23771:9;23767:19;23760:26;;23821:2;23813:6;23809:15;23795:29;;23842:1;23852:195;23866:6;23863:1;23860:13;23852:195;;;23931:13;;-1:-1:-1;;;;;23927:39:1;23915:52;;24022:15;;;;23987:12;;;;23963:1;23881:9;23852:195;;;-1:-1:-1;;;;;;;24103:32:1;;;;24098:2;24083:18;;24076:60;-1:-1:-1;;;24167:3:1;24152:19;24145:35;24064:3;23206:980;-1:-1:-1;;;23206:980:1:o;24803:306::-;24891:6;24899;24907;24960:2;24948:9;24939:7;24935:23;24931:32;24928:52;;;24976:1;24973;24966:12;24928:52;25005:9;24999:16;24989:26;;25055:2;25044:9;25040:18;25034:25;25024:35;;25099:2;25088:9;25084:18;25078:25;25068:35;;24803:306;;;;;:::o
Swarm Source
ipfs://c95b24dc0a911d5c57aef18f4b86e735ccae2b3f976d624f81a45ab365bee287
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.