Contract
0x14b0d1af06685eb82d043f3c80659ef74256c258
11
My Name Tag:
Not Available
TokenTracker:
[ Download CSV Export ]
OVERVIEW
Arbi Shib token is a meme coin / utility token, launched on Arbitrum Blockchain.
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Arbishib
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-02-05 */ /* :::. :::::::.. :::::::. ::: .::::::. :: .: ::::::::::. ;;`;; ;;;;``;;;; ;;;'';;' ;;; ;;;` ` ,;; ;;, ;;; ;;;'';;' ,[[ '[[, [[[,/[[[' [[[__[[\.[[[ '[==/[[[[,,[[[,,,[[[ [[[ [[[__[[\. c$$$cc$$$c $$$$$$c $$""""Y$$$$$ ''' $"$$$"""$$$ $$$ $$""""Y$$ 888 888,888b "88bo,_88o,,od8P888 88b dP 888 "88o888_88o,,od8P YMM ""` MMMM "W" ""YUMMMP" MMM "YMmMY" MMM YMMMMM""YUMMMP" Arbi Shib Liquidity 2% 💹 USDC Rewards 3% 💰 Marketing 3% 🧑💻 Telegram: https://t.me/memeshibportal Website: https://memeshib.org **/ // SPDX-License-Identifier: MIT pragma solidity ^0.8.15; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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 IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 internal _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 {} } 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); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns (uint256); function distributeDividends() external payable; function withdrawDividend() external; event DividendsDistributed(address indexed from, uint256 weiAmount); event DividendWithdrawn(address indexed to, uint256 weiAmount); } 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) { 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; } } 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; } } 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; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; 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; } contract DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 internal constant magnitude = 2**128; uint256 internal magnifiedDividendPerShare; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; uint256 public totalDividendsDistributed; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable { distributeDividends(); } function distributeDividends() public payable override { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add( (msg.value).mul(magnitude) / totalSupply() ); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add( msg.value ); } } function withdrawDividend() public virtual override { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal virtual returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); emit DividendWithdrawn(user, _withdrawableDividend); (bool success, ) = user.call{ value: _withdrawableDividend, gas: 3000 }(""); 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); } } } interface ITrueDefiSwap { function triggeredTokenSent(uint256, address) external; } contract Arbishib is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public DEAD = 0x000000000000000000000000000000000000dEaD; bool private swapping; bool private stakingEnabled = false; bool public tradingEnabled = false; uint256 public sellAmount = 1; uint256 public buyAmount = 1; uint256 private totalSellFees; uint256 private totalBuyFees; AshibDividendTracker public dividendTracker; address payable public marketingWallet; address payable public devWallet; // Max tx, dividend threshold and tax variables uint256 public maxWallet; uint256 public swapTokensAtAmount; uint256 public sellRewardsFee; uint256 public sellDeadFees; uint256 public sellMarketingFees; uint256 public sellLiquidityFee; uint256 public buyDeadFees; uint256 public buyMarketingFees; uint256 public buyLiquidityFee; uint256 public buyRewardsFee; uint256 public buyDevFee; uint256 public sellDevFee; uint256 public transferFee; bool public swapAndLiquifyEnabled = true; // gas for processing auto claim dividends uint256 public gasForProcessing = 1000000; // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public automatedMarketMakerPairs; // staking variables mapping(address => uint256) public stakingBonus; mapping(address => uint256) public stakingUntilDate; mapping(uint256 => uint256) public stakingAmounts; //for allowing specific address to trade while trading has not been enabled yet mapping(address => bool) private canTransferBeforeTradingIsEnabled; // Limit variables for bot protection bool public limitsInEffect = true; //boolean used to turn limits on and off uint256 private gasPriceLimit = 7 * 1 gwei; mapping(address => uint256) private _holderLastTransferBlock; // for 1 tx per block mapping(address => uint256) private _holderLastTransferTimestamp; // for sell cooldown timer uint256 public launchblock; uint256 public cooldowntimer = 60; //default cooldown 60s bool public enabledPublicTrading; address tefiRouter; mapping(address => bool) public whitelistForPublicTrade; event EnableAccountStaking(address indexed account, uint256 duration); event UpdateStakingAmounts(uint256 duration, uint256 amount); event EnableSwapAndLiquify(bool enabled); event EnableStaking(bool enabled); event SetPreSaleWallet(address wallet); event UpdateDividendTracker( address indexed newAddress, address indexed oldAddress ); event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event TradingEnabled(); event UpdateFees( uint256 sellDeadFees, uint256 sellMarketingFees, uint256 sellLiquidityFee, uint256 sellRewardsFee, uint256 buyDeadFees, uint256 buyMarketingFees, uint256 buyLiquidityFee, uint256 buyRewardsFee, uint256 buyDevFee, uint256 sellDevFee ); event UpdateTransferFee(uint256 transferFee); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event GasForProcessingUpdated( uint256 indexed newValue, uint256 indexed oldValue ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SendDividends(uint256 amount, uint256 opAmount, bool success); event ProcessedDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); event UpdatePayoutToken(address token); constructor() ERC20("Arbi Shib", "Ashib") { marketingWallet = payable(0x8d8C6D6047569bb57afc142A6DB8aD0214745F9c); devWallet = payable(0x8d8C6D6047569bb57afc142A6DB8aD0214745F9c); address router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; buyDeadFees = 0; sellDeadFees = 0; buyMarketingFees = 3; sellMarketingFees = 3; buyLiquidityFee = 2; sellLiquidityFee = 2; buyRewardsFee = 3; sellRewardsFee = 3; buyDevFee = 0; sellDevFee = 0; transferFee = 0; totalBuyFees = buyRewardsFee .add(buyLiquidityFee) .add(buyMarketingFees) .add(buyDevFee); totalSellFees = sellRewardsFee .add(sellLiquidityFee) .add(sellMarketingFees) .add(sellDevFee); dividendTracker = new AshibDividendTracker( payable(this), router, 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8, "ASHIBTRACKER", "ASHIBTRACKER" ); uniswapV2Router = IUniswapV2Router02(router); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _setAutomatedMarketMakerPair(uniswapV2Pair, true); // exclude from receiving dividends dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(DEAD); dividendTracker.excludedFromDividends(address(0)); dividendTracker.excludeFromDividends(router); // exclude from paying fees or having max transaction amount _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[address(dividendTracker)] = true; _isExcludedFromFees[address(marketingWallet)] = true; _isExcludedFromFees[address(devWallet)] = true; uint256 totalTokenSupply = (1_000_000_000_000_000) * (10**18); _mint(owner(), totalTokenSupply); // only time internal mint function is ever called is to create supply maxWallet = 20000000000000; // 2% swapTokensAtAmount = totalTokenSupply / 1000; // 0.1%; canTransferBeforeTradingIsEnabled[owner()] = true; canTransferBeforeTradingIsEnabled[address(marketingWallet)] = true; whitelistForPublicTrade[msg.sender] = true; } function decimals() public view virtual override returns (uint8) { return 18; } receive() external payable {} function updateStakingAmounts(uint256 duration, uint256 bonus) public onlyOwner { require(stakingAmounts[duration] != bonus); require(bonus <= 100, "Staking bonus can't exceed 100"); stakingAmounts[duration] = bonus; emit UpdateStakingAmounts(duration, bonus); } function isTrading(address _sender, address _recipient) internal view returns (uint) { if (automatedMarketMakerPairs[_sender] && _recipient != address(uniswapV2Router)) return 1; // Buy Case if (automatedMarketMakerPairs[_recipient]) return 2; // Sell Case return 0; } function setWhitelistForPublicTrade(address _addr, bool _flag) external onlyOwner { whitelistForPublicTrade[_addr] = _flag; } function setPublicTrading() external onlyOwner { require(!enabledPublicTrading); enabledPublicTrading = true; } function setDexRouter(address _router) external onlyOwner { tefiRouter = _router; if (_router != address(0)) { whitelistForPublicTrade[_router] = true; _isExcludedFromFees[_router] = true; dividendTracker.excludeFromDividends(_router); } launchblock = block.number; tradingEnabled = true; emit TradingEnabled(); } // use for pre sale wallet, adds all exclusions to it function setPresaleWallet(address wallet) external onlyOwner { canTransferBeforeTradingIsEnabled[wallet] = true; _isExcludedFromFees[wallet] = true; dividendTracker.excludeFromDividends(wallet); emit SetPreSaleWallet(wallet); } // exclude a wallet from fees function setExcludeFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } // exclude from dividends (rewards) function setExcludeDividends(address account) public onlyOwner { dividendTracker.excludeFromDividends(account); } // include in dividends function setIncludeDividends(address account) public onlyOwner { dividendTracker.includeFromDividends(account); dividendTracker.setBalance(account, getStakingBalance(account)); } //allow a wallet to trade before trading enabled function setCanTransferBefore(address wallet, bool enable) external onlyOwner { canTransferBeforeTradingIsEnabled[wallet] = enable; } // turn limits on and off function setLimitsInEffect(bool value) external onlyOwner { limitsInEffect = value; } // set max GWEI function setGasPriceLimit(uint256 GWEI) external onlyOwner { require(GWEI >= 5, "can never be set below 5"); gasPriceLimit = GWEI * 1 gwei; } // set cooldown timer, can only be between 0 and 300 seconds (5 mins max) function setcooldowntimer(uint256 value) external onlyOwner { require(value <= 300, "cooldown timer cannot exceed 5 minutes"); cooldowntimer = value; } // set max wallet, can not be lower than 0.05% of supply function setmaxWallet(uint256 value) external onlyOwner { value = value * (10**18); require(value >= _totalSupply / 1000, "max wallet cannot be set to less than 0.1%"); maxWallet = value; } function enableStaking(bool enable) public onlyOwner { require(stakingEnabled != enable); stakingEnabled = enable; emit EnableStaking(enable); } function stake(uint256 duration) public { require(stakingEnabled, "Staking is not enabled"); require(stakingAmounts[duration] != 0, "Invalid staking duration"); require( stakingUntilDate[_msgSender()] < block.timestamp.add(duration), "already staked for a longer duration" ); stakingBonus[_msgSender()] = stakingAmounts[duration]; stakingUntilDate[_msgSender()] = block.timestamp.add(duration); dividendTracker.setBalance( _msgSender(), getStakingBalance(_msgSender()) ); emit EnableAccountStaking(_msgSender(), duration); } // rewards threshold function setSwapTriggerAmount(uint256 amount) public onlyOwner { swapTokensAtAmount = amount * (10**18); } function enableSwapAndLiquify(bool enabled) public onlyOwner { require(swapAndLiquifyEnabled != enabled); swapAndLiquifyEnabled = enabled; emit EnableSwapAndLiquify(enabled); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { _setAutomatedMarketMakerPair(pair, value); } function setAllowCustomTokens(bool allow) public onlyOwner { dividendTracker.setAllowCustomTokens(allow); } function setAllowAutoReinvest(bool allow) public onlyOwner { dividendTracker.setAllowAutoReinvest(allow); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; if (value) { dividendTracker.excludeFromDividends(pair); } emit SetAutomatedMarketMakerPair(pair, value); } function updateGasForProcessing(uint256 newValue) public onlyOwner { require(newValue >= 200000 && newValue <= 1000000); emit GasForProcessingUpdated(newValue, gasForProcessing); gasForProcessing = newValue; } function transferAdmin(address newOwner) public onlyOwner { dividendTracker.excludeFromDividends(newOwner); _isExcludedFromFees[newOwner] = true; transferOwnership(newOwner); } function updateTransferFee(uint256 newTransferFee) public onlyOwner { require (newTransferFee <= 5, "transfer fee cannot exceed 5%"); transferFee = newTransferFee; emit UpdateTransferFee(transferFee); } function updateFees( uint256 deadBuy, uint256 deadSell, uint256 marketingBuy, uint256 marketingSell, uint256 liquidityBuy, uint256 liquiditySell, uint256 RewardsBuy, uint256 RewardsSell, uint256 devBuy, uint256 devSell ) public onlyOwner { buyDeadFees = deadBuy; buyMarketingFees = marketingBuy; buyLiquidityFee = liquidityBuy; buyRewardsFee = RewardsBuy; sellDeadFees = deadSell; sellMarketingFees = marketingSell; sellLiquidityFee = liquiditySell; sellRewardsFee = RewardsSell; buyDevFee = devBuy; sellDevFee = devSell; totalSellFees = sellRewardsFee .add(sellLiquidityFee) .add(sellMarketingFees) .add(sellDevFee); totalBuyFees = buyRewardsFee .add(buyLiquidityFee) .add(buyMarketingFees) .add(buyDevFee); require(totalSellFees <= 15 && totalBuyFees <= 15, "total fees cannot exceed 15% sell or buy"); emit UpdateFees( sellDeadFees, sellMarketingFees, sellLiquidityFee, sellRewardsFee, buyDeadFees, buyMarketingFees, buyLiquidityFee, buyRewardsFee, buyDevFee, sellDevFee ); } function getStakingInfo(address account) external view returns (uint256, uint256) { return (stakingUntilDate[account], stakingBonus[account]); } function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function withdrawableDividendOf(address account) public view returns (uint256) { return dividendTracker.withdrawableDividendOf(account); } function dividendTokenBalanceOf(address account) public view returns (uint256) { return dividendTracker.balanceOf(account); } function getAccountDividendsInfo(address account) external view returns ( address, int256, int256, uint256, uint256, uint256 ) { return dividendTracker.getAccount(account); } function getAccountDividendsInfoAtIndex(uint256 index) external view returns ( address, int256, int256, uint256, uint256, uint256 ) { return dividendTracker.getAccountAtIndex(index); } function processDividendTracker(uint256 gas) external { ( uint256 iterations, uint256 claims, uint256 lastProcessedIndex ) = dividendTracker.process(gas); emit ProcessedDividendTracker( iterations, claims, lastProcessedIndex, false, gas, tx.origin ); } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function getLastProcessedIndex() external view returns (uint256) { return dividendTracker.getLastProcessedIndex(); } function getNumberOfDividendTokenHolders() external view returns (uint256) { return dividendTracker.getNumberOfTokenHolders(); } function setAutoClaim(bool value) external { dividendTracker.setAutoClaim(msg.sender, value); } function setReinvest(bool value) external { dividendTracker.setReinvest(msg.sender, value); } function setDividendsPaused(bool value) external onlyOwner { dividendTracker.setDividendsPaused(value); } function isExcludedFromAutoClaim(address account) external view returns (bool) { return dividendTracker.isExcludedFromAutoClaim(account); } function isReinvest(address account) external view returns (bool) { return dividendTracker.isReinvest(account); } 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"); uint256 RewardsFee; uint256 deadFees; uint256 marketingFees; uint256 liquidityFee; uint256 devFees; if (!canTransferBeforeTradingIsEnabled[from]) { require(tradingEnabled, "Trading has not yet been enabled"); } if (enabledPublicTrading == false && tefiRouter != address(0)) { require(isTrading(from, to) == 0 || whitelistForPublicTrade[from] || whitelistForPublicTrade[to], "!available trading"); } if (amount == 0) { super._transfer(from, to, 0); return; } else if ( !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { bool isSelling = automatedMarketMakerPairs[to]; bool isBuying = automatedMarketMakerPairs[from]; if (!isBuying && !isSelling) { uint256 tFees = amount.mul(transferFee).div(100); amount = amount.sub(tFees); super._transfer(from, address(this), tFees); super._transfer(from, to, amount); dividendTracker.setBalance(from, getStakingBalance(from)); dividendTracker.setBalance(to, getStakingBalance(to)); return; } else if (!isBuying && stakingEnabled) { require( stakingUntilDate[from] <= block.timestamp, "Tokens are staked and locked!" ); if (stakingUntilDate[from] != 0) { stakingUntilDate[from] = 0; stakingBonus[from] = 0; } } else if (isSelling) { RewardsFee = sellRewardsFee; deadFees = sellDeadFees; marketingFees = sellMarketingFees; liquidityFee = sellLiquidityFee; devFees = sellDevFee; if (limitsInEffect) { require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer, "cooldown period active"); _holderLastTransferTimestamp[tx.origin] = block.timestamp; } } else if (isBuying) { RewardsFee = buyRewardsFee; deadFees = buyDeadFees; marketingFees = buyMarketingFees; liquidityFee = buyLiquidityFee; devFees = buyDevFee; if (limitsInEffect) { require(block.number > launchblock + 2,"you shall not pass"); require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit."); require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block"); _holderLastTransferBlock[tx.origin] = block.number; } uint256 contractBalanceRecipient = balanceOf(to); require(contractBalanceRecipient + amount <= maxWallet, "Exceeds maximum wallet token amount." ); } uint256 totalFees = RewardsFee .add(liquidityFee + marketingFees + devFees); uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && !automatedMarketMakerPairs[from]) { swapping = true; if (swapAndLiquifyEnabled && liquidityFee > 0 && totalBuyFees > 0) { uint256 totalBuySell = buyAmount.add(sellAmount); uint256 swapAmountBought = contractTokenBalance .mul(buyAmount) .div(totalBuySell); uint256 swapAmountSold = contractTokenBalance .mul(sellAmount) .div(totalBuySell); uint256 swapBuyTokens = swapAmountBought .mul(liquidityFee) .div(totalBuyFees); uint256 swapSellTokens = swapAmountSold .mul(liquidityFee) .div(totalSellFees); uint256 swapTokens = swapSellTokens.add(swapBuyTokens); swapAndLiquify(swapTokens); } uint256 remainingBalance = balanceOf(address(this)); swapAndSendDividends(remainingBalance); buyAmount = 0; sellAmount = 0; swapping = false; } uint256 fees = amount.mul(totalFees).div(100); uint256 burntokens; if (deadFees > 0) { burntokens = amount.mul(deadFees) / 100; super._transfer(from, DEAD, burntokens); _totalSupply = _totalSupply.sub(burntokens); } amount = amount.sub(fees + burntokens); if (isSelling) { sellAmount = sellAmount.add(fees); } else { buyAmount = buyAmount.add(fees); } super._transfer(from, address(this), fees); uint256 gas = gasForProcessing; try dividendTracker.process(gas) returns ( uint256 iterations, uint256 claims, uint256 lastProcessedIndex ) { emit ProcessedDividendTracker( iterations, claims, lastProcessedIndex, true, gas, tx.origin ); } catch {} } super._transfer(from, to, amount); dividendTracker.setBalance(from, getStakingBalance(from)); dividendTracker.setBalance(to, getStakingBalance(to)); if (from != address(uniswapV2Router) && !automatedMarketMakerPairs[from] && to == tefiRouter) { ITrueDefiSwap(tefiRouter).triggeredTokenSent(amount, from); } } function getStakingBalance(address account) private view returns (uint256) { return stakingEnabled ? balanceOf(account).mul(stakingBonus[account].add(100)).div( 100 ) : balanceOf(account); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } 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 updatePayoutToken(address token) public onlyOwner { dividendTracker.updatePayoutToken(token); emit UpdatePayoutToken(token); } function getPayoutToken() public view returns (address) { return dividendTracker.getPayoutToken(); } function setMinimumTokenBalanceForAutoDividends(uint256 value) public onlyOwner { dividendTracker.setMinimumTokenBalanceForAutoDividends(value); } function setMinimumTokenBalanceForDividends(uint256 value) public onlyOwner { dividendTracker.setMinimumTokenBalanceForDividends(value); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function forceSwapAndSendDividends(uint256 tokens) public onlyOwner { tokens = tokens * (10**18); uint256 totalAmount = buyAmount.add(sellAmount); uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount); uint256 fromSell = tokens.mul(sellAmount).div(totalAmount); swapAndSendDividends(tokens); buyAmount = buyAmount.sub(fromBuy); sellAmount = sellAmount.sub(fromSell); } function swapAndSendDividends(uint256 tokens) private { if (tokens == 0) { return; } swapTokensForEth(tokens); uint256 totalAmount = buyAmount.add(sellAmount); bool success = true; bool successOp1 = true; bool successOp2 = true; uint256 dividends; uint256 dividendsFromBuy; uint256 dividendsFromSell; if (buyRewardsFee > 0) { dividendsFromBuy = address(this) .balance .mul(buyAmount) .div(totalAmount) .mul(buyRewardsFee) .div(buyRewardsFee + buyMarketingFees + buyDevFee); } if (sellRewardsFee > 0) { dividendsFromSell = address(this) .balance .mul(sellAmount) .div(totalAmount) .mul(sellRewardsFee) .div(sellRewardsFee + sellMarketingFees + sellDevFee); } dividends = dividendsFromBuy.add(dividendsFromSell); if (dividends > 0) { (success, ) = address(dividendTracker).call{value: dividends}(""); } uint256 _completeFees = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee); uint256 feePortions; if (_completeFees > 0) { feePortions = address(this).balance.div(_completeFees); } uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions; uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions; if (marketingPayout > 0) { (successOp1, ) = address(marketingWallet).call{value: marketingPayout}(""); } if (devPayout > 0) { (successOp2, ) = address(devWallet).call{value: devPayout}(""); } emit SendDividends( dividends, marketingPayout + devPayout, success && successOp1 && successOp2 ); } function airdropToWallets( address[] memory airdropWallets, uint256[] memory amount ) external onlyOwner { require(airdropWallets.length == amount.length,"Arrays must be the same length"); require(airdropWallets.length <= 200, "Wallets list length must be <= 200"); for (uint256 i = 0; i < airdropWallets.length; i++) { address wallet = airdropWallets[i]; uint256 airdropAmount = amount[i] * (10**18); super._transfer(msg.sender, wallet, airdropAmount); dividendTracker.setBalance(payable(wallet), balanceOf(wallet)); } } } contract AshibDividendTracker is DividendPayingToken, Ownable { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping(address => bool) public excludedFromDividends; mapping(address => bool) public excludedFromAutoClaim; mapping(address => bool) public autoReinvest; address public defaultToken; // USDC bool public allowCustomTokens; bool public allowAutoReinvest; bool public dividendsPaused = false; string private trackerName; string private trackerTicker; IUniswapV2Router02 public uniswapV2Router; Arbishib public ArbishibContract; mapping(address => uint256) public lastClaimTimes; uint256 private minimumTokenBalanceForAutoDividends; uint256 private minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event DividendReinvested( address indexed acount, uint256 value, bool indexed automatic ); event Claim( address indexed account, uint256 amount, bool indexed automatic ); event DividendsPaused(bool paused); event SetAllowCustomTokens(bool allow); event SetAllowAutoReinvest(bool allow); constructor( address payable mainContract, address router, address token, string memory _name, string memory _ticker ) DividendPayingToken(_name, _ticker) { trackerName = _name; trackerTicker = _ticker; defaultToken = token; ArbishibContract = Arbishib(mainContract); minimumTokenBalanceForAutoDividends = 100000000_000000000000000000; // 100M tokens minimumTokenBalanceForDividends = minimumTokenBalanceForAutoDividends; uniswapV2Router = IUniswapV2Router02(router); allowCustomTokens = true; allowAutoReinvest = false; } function decimals() public view virtual override returns (uint8) { return 18; } function name() public view virtual override returns (string memory) { return trackerName; } function symbol() public view virtual override returns (string memory) { return trackerTicker; } function _transfer( address, address, uint256 ) internal pure override { require(false, "Ashib_Dividend_Tracker: No transfers allowed"); } function withdrawDividend() public pure override { require( false, "Ashib_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main contract." ); } function isExcludedFromAutoClaim(address account) external view onlyOwner returns (bool) { return excludedFromAutoClaim[account]; } function isReinvest(address account) external view onlyOwner returns (bool) { return autoReinvest[account]; } function setAllowCustomTokens(bool allow) external onlyOwner { require(allowCustomTokens != allow); allowCustomTokens = allow; emit SetAllowCustomTokens(allow); } function setAllowAutoReinvest(bool allow) external onlyOwner { require(allowAutoReinvest != allow); allowAutoReinvest = allow; emit SetAllowAutoReinvest(allow); } function excludeFromDividends(address account) external onlyOwner { //require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function includeFromDividends(address account) external onlyOwner { excludedFromDividends[account] = false; } function setAutoClaim(address account, bool value) external onlyOwner { excludedFromAutoClaim[account] = value; } function setReinvest(address account, bool value) external onlyOwner { autoReinvest[account] = value; } function setMinimumTokenBalanceForAutoDividends(uint256 value) external onlyOwner { minimumTokenBalanceForAutoDividends = value * (10**18); } function setMinimumTokenBalanceForDividends(uint256 value) external onlyOwner { minimumTokenBalanceForDividends = value * (10**18); } function setDividendsPaused(bool value) external onlyOwner { require(dividendsPaused != value); dividendsPaused = value; emit DividendsPaused(value); } function getLastProcessedIndex() external view returns (uint256) { return lastProcessedIndex; } function getNumberOfTokenHolders() external view returns (uint256) { return tokenHoldersMap.keys.length; } function getAccount(address _account) public view returns ( address account, int256 index, int256 iterationsUntilProcessed, uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime ) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); iterationsUntilProcessed = -1; if (index >= 0) { if (uint256(index) > lastProcessedIndex) { iterationsUntilProcessed = index.sub( int256(lastProcessedIndex) ); } else { uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length.sub(lastProcessedIndex) : 0; iterationsUntilProcessed = index.add( int256(processesUntilEndOfArray) ); } } withdrawableDividends = withdrawableDividendOf(account); totalDividends = accumulativeDividendOf(account); lastClaimTime = lastClaimTimes[account]; } function getAccountAtIndex(uint256 index) public view returns ( address, int256, int256, uint256, uint256, uint256 ) { if (index >= tokenHoldersMap.size()) { return ( 0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0 ); } address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function setBalance(address account, uint256 newBalance) external onlyOwner { if (excludedFromDividends[account]) { return; } if (newBalance < minimumTokenBalanceForDividends) { tokenHoldersMap.remove(account); _setBalance(account, 0); return; } _setBalance(account, newBalance); if (newBalance >= minimumTokenBalanceForAutoDividends) { tokenHoldersMap.set(account, newBalance); } else { tokenHoldersMap.remove(account); } } function process(uint256 gas) public returns ( uint256, uint256, uint256 ) { uint256 numberOfTokenHolders = tokenHoldersMap.keys.length; if (numberOfTokenHolders == 0 || dividendsPaused) { return (0, 0, lastProcessedIndex); } uint256 _lastProcessedIndex = lastProcessedIndex; uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; uint256 claims = 0; while (gasUsed < gas && iterations < numberOfTokenHolders) { _lastProcessedIndex++; if (_lastProcessedIndex >= numberOfTokenHolders) { _lastProcessedIndex = 0; } address account = tokenHoldersMap.keys[_lastProcessedIndex]; if (!excludedFromAutoClaim[account]) { if (processAccount(payable(account), true)) { claims++; } } iterations++; uint256 newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastProcessedIndex = _lastProcessedIndex; return (iterations, claims, lastProcessedIndex); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { if (dividendsPaused) { return false; } bool reinvest = autoReinvest[account]; if (automatic && reinvest && !allowAutoReinvest) { return false; } uint256 amount = reinvest ? _reinvestDividendOfUser(account) : _withdrawDividendOfUser(account); if (amount > 0) { lastClaimTimes[account] = block.timestamp; if (reinvest) { emit DividendReinvested(account, amount, automatic); } else { emit Claim(account, amount, automatic); } return true; } return false; } function updateUniswapV2Router(address newAddress) public onlyOwner { uniswapV2Router = IUniswapV2Router02(newAddress); } function updatePayoutToken(address token) public onlyOwner { defaultToken = token; } function getPayoutToken() public view returns (address) { return defaultToken; } function _reinvestDividendOfUser(address account) private returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(account); if (_withdrawableDividend > 0) { bool success; withdrawnDividends[account] = withdrawnDividends[account].add( _withdrawableDividend ); address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(ArbishibContract); uint256 prevBalance = ArbishibContract.balanceOf(address(this)); // make the swap try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _withdrawableDividend }( 0, // accept any amount of Tokens path, address(this), block.timestamp ) { uint256 received = ArbishibContract .balanceOf(address(this)) .sub(prevBalance); if (received > 0) { success = true; ArbishibContract.transfer(account, received); } else { success = false; } } catch { success = false; } if (!success) { withdrawnDividends[account] = withdrawnDividends[account].sub( _withdrawableDividend ); return 0; } return _withdrawableDividend; } return 0; } function _withdrawDividendOfUser(address payable user) internal override returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add( _withdrawableDividend ); address tokenAddress = defaultToken; bool success; if (tokenAddress == address(0)) { (success, ) = user.call{ value: _withdrawableDividend, gas: 3000 }(""); } else { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = tokenAddress; try uniswapV2Router .swapExactETHForTokensSupportingFeeOnTransferTokens{ value: _withdrawableDividend }( 0, // accept any amount of Tokens path, user, block.timestamp ) { success = true; } catch { success = false; } } if (!success) { withdrawnDividends[user] = withdrawnDividends[user].sub( _withdrawableDividend ); return 0; } else { emit DividendWithdrawn(user, _withdrawableDividend); } return _withdrawableDividend; } return 0; } } library IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint256) values; mapping(address => uint256) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) internal view returns (uint256) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) internal view returns (int256) { if (!map.inserted[key]) { return -1; } return int256(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint256 index) internal view returns (address) { return map.keys[index]; } function size(Map storage map) internal view returns (uint256) { return map.keys.length; } function set( Map storage map, address key, uint256 val ) internal { 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) internal { 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(); } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"EnableAccountStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","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":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","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":[],"name":"TradingEnabled","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":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDeadFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyRewardsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"UpdatePayoutToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdateStakingAmounts","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"UpdateTransferFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","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":[],"name":"buyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDeadFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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 AshibDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enabledPublicTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPayoutToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStakingInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromAutoClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReinvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDeadFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowAutoReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAllowCustomTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutoClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setDexRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setDividendsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setExcludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"GWEI","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setIncludeDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForAutoDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setPresaleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setReinvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setWhitelistForPublicTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakingAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingUntilDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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 IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBuy","type":"uint256"},{"internalType":"uint256","name":"deadSell","type":"uint256"},{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"RewardsBuy","type":"uint256"},{"internalType":"uint256","name":"RewardsSell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"updatePayoutToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"updateStakingAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransferFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistForPublicTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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
608060405260088054600162ffff0160a01b03191661dead17905560016009819055600a819055601d805460ff199081168317909155620f4240601e556025805490911690911790556401a13b8600602655603c602a553480156200006357600080fd5b506040518060400160405280600981526020016820b931349029b434b160b91b8152506040518060400160405280600581526020016420b9b434b160d91b8152508160039081620000b5919062000a23565b506004620000c4828262000a23565b5050506000620000d96200073360201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600e8054738d8c6d6047569bb57afc142a6db8ad0214745f9c6001600160a01b03199182168117909255600f8054909116909117905560006016819055601381905560036017819055601481905560026018819055601581905560198290556012829055601a839055601b839055601c839055731b02da8cb0d097eb8d57a175b88c7d8b4799750692620001e7929091620001d391908290829062000737602090811b62002d9017901c565b6200073760201b62002d901790919060201c565b600c8190555062000219601b54620001d3601454620001d36015546012546200073760201b62002d901790919060201c565b600b81905550308173ff970a61a04b1ca14834a43f5de4533ebddb5cc8604051620002449062000971565b6001600160a01b0393841681529183166020830152909116604082015260a060608201819052600c9082018190526b20a9a424a12a2920a1a5a2a960a11b60c0830181905260e06080840181905283019190915261010082015261012001604051809103906000f080158015620002bf573d6000803e3d6000fd5b50600d80546001600160a01b039283166001600160a01b0319918216179091556006805492841692909116821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000350919062000aef565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d9919062000aef565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000aef565b600780546001600160a01b0319166001600160a01b0392909216918217905562000479906001620007a5565b600d5460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b158015620004c057600080fd5b505af1158015620004d5573d6000803e3d6000fd5b5050600d5460085460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b1580156200052357600080fd5b505af115801562000538573d6000803e3d6000fd5b5050600d54604051634e7b827f60e01b8152600060048201526001600160a01b039091169250634e7b827f9150602401602060405180830381865afa15801562000586573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005ac919062000b1a565b50600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015620005f557600080fd5b505af11580156200060a573d6000803e3d6000fd5b5050306000908152601f60205260408082208054600160ff199182168117909255600d546001600160a01b0390811685528385208054831684179055600e54811685528385208054831684179055600f541684529190922080549091169091179055506d314dc6448d9338c15b0a0000000090506200069c620006956005546001600160a01b031690565b8262000870565b6512309ce54000601055620006b46103e88262000b3e565b601155600160246000620006d06005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54909116815260248352818120805485166001908117909155338252602c9093522080549092161790555062000b889050565b3390565b60008062000746838562000b61565b9050838110156200079e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b9392505050565b6001600160a01b03821660009081526020805260409020805460ff191682158015919091179091556200083457600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b1580156200081a57600080fd5b505af11580156200082f573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216620008c85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000795565b620008e4816002546200073760201b62002d901790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200091791839062002d9062000737821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b6130e0806200572d83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620009aa57607f821691505b602082108103620009cb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200096c57600081815260208120601f850160051c81016020861015620009fa5750805b601f850160051c820191505b8181101562000a1b5782815560010162000a06565b505050505050565b81516001600160401b0381111562000a3f5762000a3f6200097f565b62000a578162000a50845462000995565b84620009d1565b602080601f83116001811462000a8f576000841562000a765750858301515b600019600386901b1c1916600185901b17855562000a1b565b600085815260208120601f198616915b8281101562000ac05788860151825594840194600190910190840162000a9f565b508582101562000adf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000b0257600080fd5b81516001600160a01b03811681146200079e57600080fd5b60006020828403121562000b2d57600080fd5b815180151581146200079e57600080fd5b60008262000b5c57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000b8357634e487b7160e01b600052601160045260246000fd5b500190565b614b958062000b986000396000f3fe6080604052600436106105065760003560e01c80637d32f34211610297578063aa4704f311610165578063dd62ed3e116100cc578063f2fde38b11610085578063f2fde38b14611007578063f5d3c79a14611027578063f637434214611047578063f72f863b1461105d578063f8b45b051461107d578063fc6b151c1461109357600080fd5b8063dd62ed3e14610f33578063e2f4560514610f79578063e7841ec014610f8f578063f11a24d314610fa4578063f1c0ddff14610fba578063f27fd25414610fe757600080fd5b8063ba079d491161011e578063ba079d4914610e88578063bb8d513114610ea8578063d07a091c14610ebe578063d5e3725114610ede578063d7b837dd14610efe578063d8032ed314610f1357600080fd5b8063aa4704f314610d5e578063acb2ad6f14610db6578063ad56c13c14610dcc578063b494298814610e23578063b62496f514610e39578063b74e3b1114610e6857600080fd5b80639a7a23d611610209578063a0d82dc5116101c2578063a0d82dc514610ca8578063a457c2d714610cbe578063a694fc3a14610cde578063a8b9d24014610cfe578063a9059cbb14610d1e578063a9885de514610d3e57600080fd5b80639a7a23d614610bfc5780639c1b8af514610c1c5780639c3372ea14610c325780639c3b4fdc14610c525780639cefc1da14610c685780639ec1037e14610c8857600080fd5b8063871c128d1161025b578063871c128d14610b5d5780638ca2923a14610b7d5780638da5cb5b14610b935780638ea5220f14610bb157806395451c2914610bd157806395d89b4114610be757600080fd5b80637d32f34214610ab05780637fdde05c14610add578063837ae2d014610afd5780638577a6d514610b1d578063868730c714610b3d57600080fd5b806349bd5a5e116103d457806364b0f65311610346578063715018a6116102ff578063715018a614610a0b57806372d8edf414610a2057806375829def14610a4057806375f0a87414610a6057806377a3b60914610a805780637928dd1d14610a9657600080fd5b806364b0f65314610956578063679ca6e91461096b5780636843cd841461098b5780636d48467b146109ab578063700bb191146109cb57806370a08231146109eb57600080fd5b80634fbee193116103985780634fbee193146108915780635124f874146108ca5780635a84c5eb146108e05780635c234bb6146109005780635ebf4db9146109165780635eee4bae1461093657600080fd5b806349bd5a5e146108075780634a62bb65146108275780634a74bb02146108415780634ada218b1461085b5780634e71d92d1461087c57600080fd5b806321cbb02411610478578063313ce56711610431578063313ce567146107485780633599bb171461076457806339509351146107845780633f407b84146107a457806340ffdd80146107ba578063435c89e4146107da57600080fd5b806321cbb0241461068e5780632307b441146106be57806323b872dd146106de57806325cd3598146106fe5780632c1f52161461071357806330bb4cff1461073357600080fd5b8063095ea7b3116104ca578063095ea7b3146105d35780630ef35b7e146106035780631694505e1461062357806318160ddd146106435780631d7b1fb4146106625780631fa705311461067857600080fd5b806303fd2a451461051257806305ca5f081461054f57806306fdde031461057157806308dfe8a51461059357806309231602146105b357600080fd5b3661050d57005b600080fd5b34801561051e57600080fd5b50600854610532906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561055b57600080fd5b5061056f61056a36600461443a565b6110b3565b005b34801561057d57600080fd5b50610586611184565b6040516105469190614453565b34801561059f57600080fd5b5061056f6105ae3660046144cb565b611216565b3480156105bf57600080fd5b5061056f6105ce36600461443a565b61129f565b3480156105df57600080fd5b506105f36105ee366004614504565b61132e565b6040519015158152602001610546565b34801561060f57600080fd5b5061056f61061e366004614530565b611345565b34801561062f57600080fd5b50600654610532906001600160a01b031681565b34801561064f57600080fd5b506002545b604051908152602001610546565b34801561066e57600080fd5b50610654602a5481565b34801561068457600080fd5b50610654600a5481565b34801561069a57600080fd5b506105f36106a9366004614552565b602c6020526000908152604090205460ff1681565b3480156106ca57600080fd5b5061056f6106d9366004614645565b61142a565b3480156106ea57600080fd5b506105f36106f9366004614707565b6115fb565b34801561070a57600080fd5b50610532611664565b34801561071f57600080fd5b50600d54610532906001600160a01b031681565b34801561073f57600080fd5b506106546116d7565b34801561075457600080fd5b5060405160128152602001610546565b34801561077057600080fd5b5061056f61077f366004614748565b611745565b34801561079057600080fd5b506105f361079f366004614504565b6117d2565b3480156107b057600080fd5b5061065460095481565b3480156107c657600080fd5b5061056f6107d5366004614748565b611808565b3480156107e657600080fd5b506106546107f536600461443a565b60236020526000908152604090205481565b34801561081357600080fd5b50600754610532906001600160a01b031681565b34801561083357600080fd5b506025546105f39060ff1681565b34801561084d57600080fd5b50601d546105f39060ff1681565b34801561086757600080fd5b506008546105f390600160b01b900460ff1681565b34801561088857600080fd5b5061056f611863565b34801561089d57600080fd5b506105f36108ac366004614552565b6001600160a01b03166000908152601f602052604090205460ff1690565b3480156108d657600080fd5b5061065460175481565b3480156108ec57600080fd5b5061056f6108fb36600461443a565b6118db565b34801561090c57600080fd5b5061065460165481565b34801561092257600080fd5b5061056f61093136600461443a565b611936565b34801561094257600080fd5b5061056f61095136600461443a565b611991565b34801561096257600080fd5b506106546119d3565b34801561097757600080fd5b5061056f610986366004614748565b611a1d565b34801561099757600080fd5b506106546109a6366004614552565b611a5a565b3480156109b757600080fd5b506105f36109c6366004614552565b611aca565b3480156109d757600080fd5b5061056f6109e636600461443a565b611b3a565b3480156109f757600080fd5b50610654610a06366004614552565b611c0c565b348015610a1757600080fd5b5061056f611c27565b348015610a2c57600080fd5b5061056f610a3b366004614552565b611c9b565b348015610a4c57600080fd5b5061056f610a5b366004614552565b611cf7565b348015610a6c57600080fd5b50600e54610532906001600160a01b031681565b348015610a8c57600080fd5b5061065460195481565b348015610aa257600080fd5b50602b546105f39060ff1681565b348015610abc57600080fd5b50610654610acb366004614552565b60226020526000908152604090205481565b348015610ae957600080fd5b5061056f610af83660046144cb565b611dac565b348015610b0957600080fd5b5061056f610b18366004614765565b611e01565b348015610b2957600080fd5b5061056f610b3836600461443a565b611fab565b348015610b4957600080fd5b5061056f610b58366004614748565b612062565b348015610b6957600080fd5b5061056f610b7836600461443a565b61209a565b348015610b8957600080fd5b5061065460135481565b348015610b9f57600080fd5b506005546001600160a01b0316610532565b348015610bbd57600080fd5b50600f54610532906001600160a01b031681565b348015610bdd57600080fd5b5061065460145481565b348015610bf357600080fd5b50610586612116565b348015610c0857600080fd5b5061056f610c173660046144cb565b612125565b348015610c2857600080fd5b50610654601e5481565b348015610c3e57600080fd5b5061056f610c4d366004614748565b61215d565b348015610c5e57600080fd5b50610654601a5481565b348015610c7457600080fd5b5061056f610c83366004614748565b6121b9565b348015610c9457600080fd5b5061056f610ca3366004614552565b61224f565b348015610cb457600080fd5b50610654601b5481565b348015610cca57600080fd5b506105f3610cd9366004614504565b612326565b348015610cea57600080fd5b5061056f610cf936600461443a565b612375565b348015610d0a57600080fd5b50610654610d19366004614552565b612598565b348015610d2a57600080fd5b506105f3610d39366004614504565b6125cb565b348015610d4a57600080fd5b5061056f610d593660046144cb565b6125d8565b348015610d6a57600080fd5b50610da1610d79366004614552565b6001600160a01b03166000908152602260209081526040808320546021909252909120549091565b60408051928352602083019190915201610546565b348015610dc257600080fd5b50610654601c5481565b348015610dd857600080fd5b50610dec610de7366004614552565b61262d565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c001610546565b348015610e2f57600080fd5b5061065460295481565b348015610e4557600080fd5b506105f3610e54366004614552565b602080526000908152604090205460ff1681565b348015610e7457600080fd5b5061056f610e8336600461443a565b6126bd565b348015610e9457600080fd5b506105f3610ea3366004614552565b61274d565b348015610eb457600080fd5b5061065460125481565b348015610eca57600080fd5b5061056f610ed9366004614552565b612780565b348015610eea57600080fd5b5061056f610ef9366004614748565b612875565b348015610f0a57600080fd5b5061056f6128f7565b348015610f1f57600080fd5b5061056f610f2e366004614552565b612940565b348015610f3f57600080fd5b50610654610f4e3660046147cd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610f8557600080fd5b5061065460115481565b348015610f9b57600080fd5b50610654612a03565b348015610fb057600080fd5b5061065460185481565b348015610fc657600080fd5b50610654610fd5366004614552565b60216020526000908152604090205481565b348015610ff357600080fd5b50610dec61100236600461443a565b612a4d565b34801561101357600080fd5b5061056f611022366004614552565b612a8b565b34801561103357600080fd5b5061056f611042366004614748565b612b76565b34801561105357600080fd5b5061065460155481565b34801561106957600080fd5b5061056f611078366004614552565b612bae565b34801561108957600080fd5b5061065460105481565b34801561109f57600080fd5b5061056f6110ae36600461443a565b612cdb565b6005546001600160a01b031633146110e65760405162461bcd60e51b81526004016110dd906147fb565b60405180910390fd5b6110f881670de0b6b3a7640000614846565b90506000611113600954600a54612d9090919063ffffffff16565b9050600061113682611130600a5486612df690919063ffffffff16565b90612e78565b905060006111538361113060095487612df690919063ffffffff16565b905061115e84612eba565b600a5461116b90836131ba565b600a5560095461117b90826131ba565b60095550505050565b60606003805461119390614865565b80601f01602080910402602001604051908101604052809291908181526020018280546111bf90614865565b801561120c5780601f106111e15761010080835404028352916020019161120c565b820191906000526020600020905b8154815290600101906020018083116111ef57829003601f168201915b5050505050905090565b6005546001600160a01b031633146112405760405162461bcd60e51b81526004016110dd906147fb565b6001600160a01b0382166000818152601f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112c95760405162461bcd60e51b81526004016110dd906147fb565b600581101561131a5760405162461bcd60e51b815260206004820152601860248201527f63616e206e65766572206265207365742062656c6f772035000000000000000060448201526064016110dd565b61132881633b9aca00614846565b60265550565b600061133b3384846131fc565b5060015b92915050565b6005546001600160a01b0316331461136f5760405162461bcd60e51b81526004016110dd906147fb565b60008281526023602052604090205481900361138a57600080fd5b60648111156113db5760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e6720626f6e75732063616e27742065786365656420313030000060448201526064016110dd565b60008281526023602090815260409182902083905581518481529081018390527f065c0eec5c5d031ee25323575d53db5536226ab058b74d8bdb03c517dd4f605d910160405180910390a15050565b6005546001600160a01b031633146114545760405162461bcd60e51b81526004016110dd906147fb565b80518251146114a55760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016110dd565b60c8825111156115025760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016110dd565b60005b82518110156115f65760008382815181106115225761152261489f565b6020026020010151905060008383815181106115405761154061489f565b6020026020010151670de0b6b3a764000061155b9190614846565b9050611568338383613321565b600d546001600160a01b031663e30443bc8361158381611c0c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156115c957600080fd5b505af11580156115dd573d6000803e3d6000fd5b50505050505080806115ee906148b5565b915050611505565b505050565b600061160884848461342a565b61165a843361165585604051806060016040528060288152602001614b13602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190613f8f565b6131fc565b5060019392505050565b600d54604080516304b9a6b360e31b815290516000926001600160a01b0316916325cd35989160048083019260209291908290030181865afa1580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d291906148ce565b905090565b600d54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d291906148eb565b6005546001600160a01b0316331461176f5760405162461bcd60e51b81526004016110dd906147fb565b600d54604051633599bb1760e01b815282151560048201526001600160a01b0390911690633599bb17906024015b600060405180830381600087803b1580156117b757600080fd5b505af11580156117cb573d6000803e3d6000fd5b5050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161133b9185906116559086612d90565b6005546001600160a01b031633146118325760405162461bcd60e51b81526004016110dd906147fb565b600d546040516281ffbb60e71b815282151560048201526001600160a01b03909116906340ffdd809060240161179d565b600d5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af11580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d89190614904565b50565b6005546001600160a01b031633146119055760405162461bcd60e51b81526004016110dd906147fb565b600d54604051635a84c5eb60e01b8152600481018390526001600160a01b0390911690635a84c5eb9060240161179d565b6005546001600160a01b031633146119605760405162461bcd60e51b81526004016110dd906147fb565b600d54604051635ebf4db960e01b8152600481018390526001600160a01b0390911690635ebf4db99060240161179d565b6005546001600160a01b031633146119bb5760405162461bcd60e51b81526004016110dd906147fb565b6119cd81670de0b6b3a7640000614846565b60115550565b600d54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611721573d6000803e3d6000fd5b6005546001600160a01b03163314611a475760405162461bcd60e51b81526004016110dd906147fb565b6025805460ff1916911515919091179055565b600d546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611aa6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133f91906148eb565b600d54604051636d48467b60e01b81526001600160a01b0383811660048301526000921690636d48467b906024015b602060405180830381865afa158015611b16573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133f9190614904565b600d546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af1158015611b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb19190614921565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611c515760405162461bcd60e51b81526004016110dd906147fb565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611cc55760405162461bcd60e51b81526004016110dd906147fb565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db09060240161179d565b6005546001600160a01b03163314611d215760405162461bcd60e51b81526004016110dd906147fb565b600d5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b158015611d6857600080fd5b505af1158015611d7c573d6000803e3d6000fd5b5050506001600160a01b0382166000908152601f60205260409020805460ff19166001179055506118d881612a8b565b6005546001600160a01b03163314611dd65760405162461bcd60e51b81526004016110dd906147fb565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e2b5760405162461bcd60e51b81526004016110dd906147fb565b60168a90556017889055601886905560198490556013899055601487905560158590556012839055601a829055601b819055611e7381611e6d8981878a612d90565b90612d90565b600b81905550611e9c601a54611e6d601754611e6d601854601954612d9090919063ffffffff16565b600c55600b54600f10801590611eb55750600f600c5411155b611f125760405162461bcd60e51b815260206004820152602860248201527f746f74616c20666565732063616e6e6f7420657863656564203135252073656c6044820152676c206f722062757960c01b60648201526084016110dd565b601354601454601554601254601654601754601854601954601a54601b54604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526101208201527f07cec4532bdb36ce729ae72905c09f7bfbf8682c2cc2f1999f745188d9975122906101400160405180910390a150505050505050505050565b6005546001600160a01b03163314611fd55760405162461bcd60e51b81526004016110dd906147fb565b60058111156120265760405162461bcd60e51b815260206004820152601d60248201527f7472616e73666572206665652063616e6e6f742065786365656420352500000060448201526064016110dd565b601c8190556040518181527f6fbeac6c79c640ca4f5f47271bd7a36c7eb83076224c65a3b3378c8844720343906020015b60405180910390a150565b600d54604051638bc1d63960e01b815233600482015282151560248201526001600160a01b0390911690638bc1d6399060440161179d565b6005546001600160a01b031633146120c45760405162461bcd60e51b81526004016110dd906147fb565b62030d4081101580156120da5750620f42408111155b6120e357600080fd5b601e5460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601e55565b60606004805461119390614865565b6005546001600160a01b0316331461214f5760405162461bcd60e51b81526004016110dd906147fb565b6121598282613fc9565b5050565b6005546001600160a01b031633146121875760405162461bcd60e51b81526004016110dd906147fb565b600d54604051634e19b97560e11b815282151560048201526001600160a01b0390911690639c3372ea9060240161179d565b6005546001600160a01b031633146121e35760405162461bcd60e51b81526004016110dd906147fb565b801515600860159054906101000a900460ff1615150361220257600080fd5b60088054821515600160a81b0260ff60a81b199091161790556040517f0d240c24014ec8c204fc1bdcc286f7d01fd2ab6a07c558a9b2d3f12904323a879061205790831515815260200190565b6005546001600160a01b031633146122795760405162461bcd60e51b81526004016110dd906147fb565b600d54604051630928847160e01b81526001600160a01b03838116600483015290911690630928847190602401600060405180830381600087803b1580156122c057600080fd5b505af11580156122d4573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc9050826122f581614091565b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260440161179d565b600061133b338461165585604051806060016040528060258152602001614b3b602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190613f8f565b600854600160a81b900460ff166123c75760405162461bcd60e51b815260206004820152601660248201527514dd185ada5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064016110dd565b60008181526023602052604081205490036124245760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207374616b696e67206475726174696f6e000000000000000060448201526064016110dd565b61242e4282612d90565b33600090815260226020526040902054106124975760405162461bcd60e51b8152602060048201526024808201527f616c7265616479207374616b656420666f722061206c6f6e67657220647572616044820152633a34b7b760e11b60648201526084016110dd565b6000818152602360209081526040808320543384526021909252909120556124bf4282612d90565b33600081815260226020526040902091909155600d546001600160a01b03169063e30443bc906124ee81614091565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561253457600080fd5b505af1158015612548573d6000803e3d6000fd5b505050506125533390565b6001600160a01b03167f13dd201d7da4f9b31a9064a09abc1a6ce420dacd837a77abafaec5bd9d28d2c88260405161258d91815260200190565b60405180910390a250565b600d546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611a89565b600061133b33848461342a565b6005546001600160a01b031633146126025760405162461bcd60e51b81526004016110dd906147fb565b6001600160a01b03919091166000908152602c60205260409020805460ff1916911515919091179055565b600d5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283929091169063fbcbc0f1906024015b60c060405180830381865afa158015612685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a9919061494f565b949c939b5091995097509550909350915050565b6005546001600160a01b031633146126e75760405162461bcd60e51b81526004016110dd906147fb565b61012c8111156127485760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016110dd565b602a55565b600d5460405163ba079d4960e01b81526001600160a01b038381166004830152600092169063ba079d4990602401611af9565b6005546001600160a01b031633146127aa5760405162461bcd60e51b81526004016110dd906147fb565b6001600160a01b0381811660008181526024602081815260408084208054600160ff199182168117909255601f9093529381902080549092169093179055600d54915163031e79db60e41b815260048101939093529216916331e79db09101600060405180830381600087803b15801561282357600080fd5b505af1158015612837573d6000803e3d6000fd5b50506040516001600160a01b03841681527f85d097e432d8e396fa72c83ebd34196326e1cf1694ef910cd53554b2ee7597c592506020019050612057565b6005546001600160a01b0316331461289f5760405162461bcd60e51b81526004016110dd906147fb565b601d5481151560ff9091161515036128b657600080fd5b601d805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001612057565b6005546001600160a01b031633146129215760405162461bcd60e51b81526004016110dd906147fb565b602b5460ff161561293157600080fd5b602b805460ff19166001179055565b6005546001600160a01b0316331461296a5760405162461bcd60e51b81526004016110dd906147fb565b600d5460405163d8032ed360e01b81526001600160a01b0383811660048301529091169063d8032ed390602401600060405180830381600087803b1580156129b157600080fd5b505af11580156129c5573d6000803e3d6000fd5b50506040516001600160a01b03841681527f7597aa09105646b4cc4486748aecd1d7c5dbcbb7bbe2863c3fc27e613b64432d92506020019050612057565b600d546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015611721573d6000803e3d6000fd5b600d54604051635183d6fd60e01b815260048101839052600091829182918291829182916001600160a01b0390911690635183d6fd90602401612668565b6005546001600160a01b03163314612ab55760405162461bcd60e51b81526004016110dd906147fb565b6001600160a01b038116612b1a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016110dd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604051632c8be28160e21b815233600482015282151560248201526001600160a01b039091169063b22f8a049060440161179d565b6005546001600160a01b03163314612bd85760405162461bcd60e51b81526004016110dd906147fb565b602b8054610100600160a81b0319166101006001600160a01b0384169081029190911790915515612c98576001600160a01b038181166000818152602c602090815260408083208054600160ff199182168117909255601f9093529281902080549092169092179055600d54905163031e79db60e41b81526004810192909252909116906331e79db090602401600060405180830381600087803b158015612c7f57600080fd5b505af1158015612c93573d6000803e3d6000fd5b505050505b436029556008805460ff60b01b1916600160b01b1790556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b6005546001600160a01b03163314612d055760405162461bcd60e51b81526004016110dd906147fb565b612d1781670de0b6b3a7640000614846565b90506103e8600254612d2991906149a2565b811015612d8b5760405162461bcd60e51b815260206004820152602a60248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015269207468616e20302e312560b01b60648201526084016110dd565b601055565b600080612d9d83856149c4565b905083811015612def5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016110dd565b9392505050565b600082600003612e085750600061133f565b6000612e148385614846565b905082612e2185836149a2565b14612def5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016110dd565b6000612def83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140ea565b80600003612ec55750565b612ece81614118565b6000612ee7600954600a54612d9090919063ffffffff16565b601954909150600190819081906000908190819015612f4857612f45601a54601754601954612f1691906149c4565b612f2091906149c4565b611130601954612f3f8b611130600a5447612df690919063ffffffff16565b90612df6565b91505b60125415612f9257612f8f601b54601454601254612f6691906149c4565b612f7091906149c4565b611130601254612f3f8b61113060095447612df690919063ffffffff16565b90505b612f9c8282612d90565b92508215612ffc57600d546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612ff1576040519150601f19603f3d011682016040523d82523d6000602084013e612ff6565b606091505b50909650505b6000613015601a54601754612d9090919063ffffffff16565b601b5460145461302491612d90565b61302e91906149c4565b905060008115613045576130424783612e78565b90505b60008161305f601454601754612d9090919063ffffffff16565b6130699190614846565b9050600082613085601b54601a54612d9090919063ffffffff16565b61308f9190614846565b905081156130ef57600e546040516001600160a01b03909116908390600081818185875af1925050503d80600081146130e4576040519150601f19603f3d011682016040523d82523d6000602084013e6130e9565b606091505b50909950505b801561314d57600f546040516001600160a01b03909116908290600081818185875af1925050503d8060008114613142576040519150601f19603f3d011682016040523d82523d6000602084013e613147565b606091505b50909850505b7f8e09ec88c0d24c22e3a9b8555c029afcc4a7c609daabf6d7849e814c2d14efd08761317983856149c4565b8c801561318357508b5b801561318c57508a5b60408051938452602084019290925215159082015260600160405180910390a1505050505050505050505050565b6000612def83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f8f565b6001600160a01b03831661325e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016110dd565b6001600160a01b0382166132bf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016110dd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166133475760405162461bcd60e51b81526004016110dd906149dc565b6001600160a01b03821661336d5760405162461bcd60e51b81526004016110dd90614a21565b6133aa81604051806060016040528060268152602001614aed602691396001600160a01b0386166000908152602081905260409020549190613f8f565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546133d99082612d90565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101613314565b6001600160a01b0383166134505760405162461bcd60e51b81526004016110dd906149dc565b6001600160a01b0382166134765760405162461bcd60e51b81526004016110dd90614a21565b6001600160a01b038316600090815260246020526040812054819081908190819060ff166134f757600854600160b01b900460ff166134f75760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016110dd565b602b5460ff161580156135195750602b5461010090046001600160a01b031615155b156135b0576135288888614272565b158061354c57506001600160a01b0388166000908152602c602052604090205460ff165b8061356f57506001600160a01b0387166000908152602c602052604090205460ff165b6135b05760405162461bcd60e51b815260206004820152601260248201527121617661696c61626c652074726164696e6760701b60448201526064016110dd565b856000036135ce576135c488886000613321565b5050505050505050565b600854600160a01b900460ff1615801561360157506001600160a01b0388166000908152601f602052604090205460ff16155b801561362657506001600160a01b0387166000908152601f602052604090205460ff16155b15613dc0576001600160a01b03808816600090815260208052604080822054928b16825290205460ff918216911680158015613660575081155b156137a65760006136816064611130601c548c612df690919063ffffffff16565b905061368d89826131ba565b985061369a8b3083613321565b6136a58b8b8b613321565b600d546001600160a01b031663e30443bc8c6136c081614091565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561370657600080fd5b505af115801561371a573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc90508b61373b81614091565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561378157600080fd5b505af1158015613795573d6000803e3d6000fd5b505050505050505050505050505050565b801580156137bd5750600854600160a81b900460ff165b15613874576001600160a01b038a1660009081526022602052604090205442101561382a5760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e7320617265207374616b656420616e64206c6f636b65642100000060448201526064016110dd565b6001600160a01b038a166000908152602260205260409020541561386f576001600160a01b038a16600090815260226020908152604080832083905560219091528120555b613acd565b811561391d57601254601354601454601554601b54602554949b509299509097509550935060ff161561386f57602a54326000908152602860205260409020546138be91906149c4565b4210156139065760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016110dd565b326000908152602860205260409020429055613acd565b8015613acd57601954601654601754601854601a54602554949b509299509097509550935060ff1615613a56576029546139589060026149c4565b431161399b5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016110dd565b6026543a11156139ed5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016110dd565b32600090815260276020526040902054439003613a435760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016110dd565b3260009081526027602052604090204390555b6000613a618a611c0c565b601054909150613a718a836149c4565b1115613acb5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016110dd565b505b6000613aee84613add88886149c4565b613ae791906149c4565b8990612d90565b90506000613afb30611c0c565b60115490915081108015908190613b2a57506001600160a01b038d16600090815260208052604090205460ff16155b15613c43576008805460ff60a01b1916600160a01b179055601d5460ff168015613b545750600087115b8015613b6257506000600c54115b15613c14576000613b80600954600a54612d9090919063ffffffff16565b90506000613b9d82611130600a5487612df690919063ffffffff16565b90506000613bba8361113060095488612df690919063ffffffff16565b90506000613bd7600c546111308d86612df690919063ffffffff16565b90506000613bf4600b546111308e86612df690919063ffffffff16565b90506000613c028284612d90565b9050613c0d816142e5565b5050505050505b6000613c1f30611c0c565b9050613c2a81612eba565b506000600a8190556009556008805460ff60a01b191690555b6000613c5460646111308e87612df6565b905060008a15613ca7576064613c6a8e8d612df6565b613c7491906149a2565b9050613c968f600860009054906101000a90046001600160a01b031683613321565b600254613ca390826131ba565b6002555b613cbb613cb482846149c4565b8e906131ba565b9c508615613cd857600954613cd09083612d90565b600955613ce9565b600a54613ce59083612d90565b600a555b613cf48f3084613321565b601e54600d546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af1925050508015613d61575060408051601f3d908101601f19168201909252613d5e91810190614921565b60015b15613db75760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b50505050505050505b613dcb888888613321565b600d546001600160a01b031663e30443bc89613de681614091565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613e2c57600080fd5b505af1158015613e40573d6000803e3d6000fd5b5050600d546001600160a01b0316915063e30443bc905088613e6181614091565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613ea757600080fd5b505af1158015613ebb573d6000803e3d6000fd5b50506006546001600160a01b038b8116911614801592509050613ef657506001600160a01b038816600090815260208052604090205460ff16155b8015613f145750602b546001600160a01b0388811661010090920416145b156135c457602b54604051633fb6b04560e11b8152600481018890526001600160a01b038a8116602483015261010090920490911690637f6d608a90604401600060405180830381600087803b158015613f6d57600080fd5b505af1158015613f81573d6000803e3d6000fd5b505050505050505050505050565b60008184841115613fb35760405162461bcd60e51b81526004016110dd9190614453565b506000613fc08486614a64565b95945050505050565b6001600160a01b03821660009081526020805260409020805460ff1916821580159190911790915561405557600d5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561403c57600080fd5b505af1158015614050573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b600854600090600160a81b900460ff166140b3576140ae82611c0c565b61133f565b6001600160a01b03821660009081526021602052604090205461133f90606490611130906140e19083612d90565b612f3f86611c0c565b6000818361410b5760405162461bcd60e51b81526004016110dd9190614453565b506000613fc084866149a2565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061414d5761414d61489f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156141a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ca91906148ce565b816001815181106141dd576141dd61489f565b6001600160a01b03928316602091820292909201015260065461420391309116846131fc565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061423c908590600090869030904290600401614a7b565b600060405180830381600087803b15801561425657600080fd5b505af115801561426a573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600090815260208052604081205460ff1680156142a757506006546001600160a01b03838116911614155b156142b45750600161133f565b6001600160a01b038216600090815260208052604090205460ff16156142dc5750600261133f565b50600092915050565b60006142f2826002612e78565b9050600061430083836131ba565b90504761430c83614118565b600061431847836131ba565b9050614324838261436c565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b6006546143849030906001600160a01b0316846131fc565b6006546001600160a01b031663f305d7198230856000806143ad6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015614415573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117cb9190614921565b60006020828403121561444c57600080fd5b5035919050565b600060208083528351808285015260005b8181101561448057858101830151858201604001528201614464565b81811115614492576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146118d857600080fd5b80151581146118d857600080fd5b600080604083850312156144de57600080fd5b82356144e9816144a8565b915060208301356144f9816144bd565b809150509250929050565b6000806040838503121561451757600080fd5b8235614522816144a8565b946020939093013593505050565b6000806040838503121561454357600080fd5b50508035926020909101359150565b60006020828403121561456457600080fd5b8135612def816144a8565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156145ae576145ae61456f565b604052919050565b600067ffffffffffffffff8211156145d0576145d061456f565b5060051b60200190565b600082601f8301126145eb57600080fd5b813560206146006145fb836145b6565b614585565b82815260059290921b8401810191818101908684111561461f57600080fd5b8286015b8481101561463a5780358352918301918301614623565b509695505050505050565b6000806040838503121561465857600080fd5b823567ffffffffffffffff8082111561467057600080fd5b818501915085601f83011261468457600080fd5b813560206146946145fb836145b6565b82815260059290921b840181019181810190898411156146b357600080fd5b948201945b838610156146da5785356146cb816144a8565b825294820194908201906146b8565b965050860135925050808211156146f057600080fd5b506146fd858286016145da565b9150509250929050565b60008060006060848603121561471c57600080fd5b8335614727816144a8565b92506020840135614737816144a8565b929592945050506040919091013590565b60006020828403121561475a57600080fd5b8135612def816144bd565b6000806000806000806000806000806101408b8d03121561478557600080fd5b505088359a60208a01359a5060408a013599606081013599506080810135985060a0810135975060c0810135965060e081013595506101008101359450610120013592509050565b600080604083850312156147e057600080fd5b82356147eb816144a8565b915060208301356144f9816144a8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561486057614860614830565b500290565b600181811c9082168061487957607f821691505b60208210810361489957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016148c7576148c7614830565b5060010190565b6000602082840312156148e057600080fd5b8151612def816144a8565b6000602082840312156148fd57600080fd5b5051919050565b60006020828403121561491657600080fd5b8151612def816144bd565b60008060006060848603121561493657600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c0878903121561496857600080fd5b8651614973816144a8565b6020880151604089015160608a015160808b015160a0909b0151939c929b509099909850965090945092505050565b6000826149bf57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156149d7576149d7614830565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015614a7657614a76614830565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015614acb5784516001600160a01b031683529383019391830191600101614aa6565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a0afcda968270b76251d51c1e73818adcda4189d9ed71f6b87585fea11e4338f64736f6c634300080f003360806040526012805460ff60b01b191690553480156200001e57600080fd5b50604051620030e0380380620030e0833981016040819052620000419162000243565b8181818160036200005383826200037d565b5060046200006282826200037d565b50505050506000620000796200015960201b60201c565b600980546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013620000d583826200037d565b506014620000e482826200037d565b505060128054601680546001600160a01b03199081166001600160a01b03988916179091556a52b7d2dcc80cd2e400000060188190556019556015805490911695871695909517909455600160a01b929094166001600160a81b0319909316929092171760ff60a81b19169091555062000449565b3390565b6001600160a01b03811681146200017357600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019e57600080fd5b81516001600160401b0380821115620001bb57620001bb62000176565b604051601f8301601f19908116603f01168101908282118183101715620001e657620001e662000176565b816040528381526020925086838588010111156200020357600080fd5b600091505b8382101562000227578582018301518183018401529082019062000208565b83821115620002395760008385830101525b9695505050505050565b600080600080600060a086880312156200025c57600080fd5b855162000269816200015d565b60208701519095506200027c816200015d565b60408701519094506200028f816200015d565b60608701519093506001600160401b0380821115620002ad57600080fd5b620002bb89838a016200018c565b93506080880151915080821115620002d257600080fd5b50620002e1888289016200018c565b9150509295509295909350565b600181811c908216806200030357607f821691505b6020821081036200032457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037857600081815260208120601f850160051c81016020861015620003535750805b601f850160051c820191505b8181101562000374578281556001016200035f565b5050505b505050565b81516001600160401b0381111562000399576200039962000176565b620003b181620003aa8454620002ee565b846200032a565b602080601f831160018114620003e95760008415620003d05750858301515b600019600386901b1c1916600185901b17855562000374565b600085815260208120601f198616915b828110156200041a57888601518255948401946001909101908401620003f9565b5085821015620004395787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612c8780620004596000396000f3fe60806040526004361061031e5760003560e01c80636b69163b116101ab578063a457c2d7116100f7578063d8032ed311610095578063e7841ec01161006f578063e7841ec0146109ed578063f2fde38b14610a02578063fbcbc0f114610a22578063ffb2c47914610a4257600080fd5b8063d8032ed314610967578063dd62ed3e14610987578063e30443bc146109cd57600080fd5b8063aafd847a116100d1578063aafd847a146108d1578063b22f8a0414610907578063ba079d4914610927578063bc4c4b371461094757600080fd5b8063a457c2d714610871578063a8b9d24014610891578063a9059cbb146108b157600080fd5b80638bc1d6391161016457806395d89b411161013e57806395d89b41146107fa5780639c3372ea1461080f5780639eec101e1461082f578063a42340691461085057600080fd5b80638bc1d6391461079c5780638da5cb5b146107bc57806391b89fba146107da57600080fd5b80636b69163b146106cb5780636d48467b146106fb57806370a082311461071b578063715018a61461075157806374c13fda1461076657806385a6b3ae1461078657600080fd5b8063313ce5671161026a5780634e7b827f116102235780635a84c5eb116101fd5780635a84c5eb146106565780635ebf4db91461067657806365b8dbc0146106965780636a474002146106b657600080fd5b80634e7b827f146105af5780634eedf397146105df5780635183d6fd146105ff57600080fd5b8063313ce567146104f257806331e79db01461050e5780633599bb171461052e578063395093511461054e57806340ffdd801461056e578063418089041461058e57600080fd5b806318160ddd116102d757806323b872dd116102b157806323b872dd1461047e57806325cd35981461049e57806327ce0147146104bc5780633009a609146104dc57600080fd5b806318160ddd1461040c5780631d4ff89a14610421578063226cfa3d1461045157600080fd5b806303c833021461033257806306fdde031461033a5780630928847114610365578063095ea7b31461038557806309bbedde146103b55780631694505e146103d457600080fd5b3661032d5761032b610a7d565b005b600080fd5b61032b610a7d565b34801561034657600080fd5b5061034f610b10565b60405161035c91906127ba565b60405180910390f35b34801561037157600080fd5b5061032b610380366004612827565b610ba2565b34801561039157600080fd5b506103a56103a0366004612844565b610bf6565b604051901515815260200161035c565b3480156103c157600080fd5b50600a545b60405190815260200161035c565b3480156103e057600080fd5b506015546103f4906001600160a01b031681565b6040516001600160a01b03909116815260200161035c565b34801561041857600080fd5b506002546103c6565b34801561042d57600080fd5b506103a561043c366004612827565b60116020526000908152604090205460ff1681565b34801561045d57600080fd5b506103c661046c366004612827565b60176020526000908152604090205481565b34801561048a57600080fd5b506103a5610499366004612870565b610c0d565b3480156104aa57600080fd5b506012546001600160a01b03166103f4565b3480156104c857600080fd5b506103c66104d7366004612827565b610c76565b3480156104e857600080fd5b506103c6600e5481565b3480156104fe57600080fd5b506040516012815260200161035c565b34801561051a57600080fd5b5061032b610529366004612827565b610cd2565b34801561053a57600080fd5b5061032b6105493660046128bf565b610d6c565b34801561055a57600080fd5b506103a5610569366004612844565b610e0d565b34801561057a57600080fd5b5061032b6105893660046128bf565b610e43565b34801561059a57600080fd5b506012546103a590600160a81b900460ff1681565b3480156105bb57600080fd5b506103a56105ca366004612827565b600f6020526000908152604090205460ff1681565b3480156105eb57600080fd5b506016546103f4906001600160a01b031681565b34801561060b57600080fd5b5061061f61061a3660046128dc565b610ed9565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161035c565b34801561066257600080fd5b5061032b6106713660046128dc565b610f39565b34801561068257600080fd5b5061032b6106913660046128dc565b610f7b565b3480156106a257600080fd5b5061032b6106b1366004612827565b610fbd565b3480156106c257600080fd5b5061032b611009565b3480156106d757600080fd5b506103a56106e6366004612827565b60106020526000908152604090205460ff1681565b34801561070757600080fd5b506103a5610716366004612827565b6110a7565b34801561072757600080fd5b506103c6610736366004612827565b6001600160a01b031660009081526020819052604090205490565b34801561075d57600080fd5b5061032b6110f3565b34801561077257600080fd5b506012546103f4906001600160a01b031681565b34801561079257600080fd5b506103c660085481565b3480156107a857600080fd5b5061032b6107b73660046128f5565b611167565b3480156107c857600080fd5b506009546001600160a01b03166103f4565b3480156107e657600080fd5b506103c66107f5366004612827565b6111bc565b34801561080657600080fd5b5061034f6111c7565b34801561081b57600080fd5b5061032b61082a3660046128bf565b6111d6565b34801561083b57600080fd5b506012546103a590600160a01b900460ff1681565b34801561085c57600080fd5b506012546103a590600160b01b900460ff1681565b34801561087d57600080fd5b506103a561088c366004612844565b61126c565b34801561089d57600080fd5b506103c66108ac366004612827565b6112bb565b3480156108bd57600080fd5b506103a56108cc366004612844565b6112e7565b3480156108dd57600080fd5b506103c66108ec366004612827565b6001600160a01b031660009081526007602052604090205490565b34801561091357600080fd5b5061032b6109223660046128f5565b6112f4565b34801561093357600080fd5b506103a5610942366004612827565b611349565b34801561095357600080fd5b506103a56109623660046128f5565b611395565b34801561097357600080fd5b5061032b610982366004612827565b611516565b34801561099357600080fd5b506103c66109a236600461292e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109d957600080fd5b5061032b6109e8366004612844565b611562565b3480156109f957600080fd5b50600e546103c6565b348015610a0e57600080fd5b5061032b610a1d366004612827565b6115fa565b348015610a2e57600080fd5b5061061f610a3d366004612827565b6116e5565b348015610a4e57600080fd5b50610a62610a5d3660046128dc565b611794565b6040805193845260208401929092529082015260600161035c565b6000610a8860025490565b11610a9257600080fd5b3415610b0e57610ac5610aa460025490565b610ab234600160801b6118ba565b610abc9190612972565b60055490611943565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b0a9034611943565b6008555b565b606060138054610b1f90612994565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b90612994565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b5050505050905090565b6009546001600160a01b03163314610bd55760405162461bcd60e51b8152600401610bcc906129ce565b60405180910390fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6000610c033384846119a2565b5060015b92915050565b6000610c1a848484611ac6565b610c6c8433610c6785604051806060016040528060288152602001612c05602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b28565b6119a2565b5060019392505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b92610cc892610cc392610cbd91610cb891906118ba565b611b62565b90611b72565b611bb0565b610c079190612972565b6009546001600160a01b03163314610cfc5760405162461bcd60e51b8152600401610bcc906129ce565b6001600160a01b0381166000908152600f60205260408120805460ff19166001179055610d2a908290611bc3565b610d35600a82611c22565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546001600160a01b03163314610d965760405162461bcd60e51b8152600401610bcc906129ce565b801515601260169054906101000a900460ff16151503610db557600080fd5b60128054821515600160b01b0260ff60b01b199091161790556040517f3da2593f2c4724acfbd754045321e852cad26f3974834b1890045530f89c21b390610e0290831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c03918590610c679086611943565b6009546001600160a01b03163314610e6d5760405162461bcd60e51b8152600401610bcc906129ce565b801515601260159054906101000a900460ff16151503610e8c57600080fd5b60128054821515600160a81b0260ff60a81b199091161790556040517fc138a28750b971696f46ea59731c471ef1e08e4015404afdb139fd2e87dca1bb90610e0290831515815260200190565b600080600080600080610eeb600a5490565b8710610f0a575060009450600019935083925084915081905080610f30565b6000610f17600a89611d5d565b9050610f22816116e5565b965096509650965096509650505b91939550919395565b6009546001600160a01b03163314610f635760405162461bcd60e51b8152600401610bcc906129ce565b610f7581670de0b6b3a7640000612a03565b60185550565b6009546001600160a01b03163314610fa55760405162461bcd60e51b8152600401610bcc906129ce565b610fb781670de0b6b3a7640000612a03565b60195550565b6009546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610bcc906129ce565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152606160248201527f41736869625f4469766964656e645f547261636b65723a20776974686472617760448201527f4469766964656e642064697361626c65642e20557365207468652027636c616960648201527f6d272066756e6374696f6e206f6e20746865206d61696e20636f6e74726163746084820152601760f91b60a482015260c401610bcc565b6009546000906001600160a01b031633146110d45760405162461bcd60e51b8152600401610bcc906129ce565b506001600160a01b031660009081526010602052604090205460ff1690565b6009546001600160a01b0316331461111d5760405162461bcd60e51b8152600401610bcc906129ce565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b6009546001600160a01b031633146111915760405162461bcd60e51b8152600401610bcc906129ce565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000610c07826112bb565b606060148054610b1f90612994565b6009546001600160a01b031633146112005760405162461bcd60e51b8152600401610bcc906129ce565b801515601260149054906101000a900460ff1615150361121f57600080fd5b60128054821515600160a01b0260ff60a01b199091161790556040517f8d34c313963017194ed726d050e868657d0e2d2c6748d13e358cd4b89d4ee7c890610e0290831515815260200190565b6000610c033384610c6785604051806060016040528060258152602001612c2d602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b28565b6001600160a01b038116600090815260076020526040812054610c07906112e184610c76565b90611d90565b6000610c03338484611ac6565b6009546001600160a01b0316331461131e5760405162461bcd60e51b8152600401610bcc906129ce565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6009546000906001600160a01b031633146113765760405162461bcd60e51b8152600401610bcc906129ce565b506001600160a01b031660009081526011602052604090205460ff1690565b6009546000906001600160a01b031633146113c25760405162461bcd60e51b8152600401610bcc906129ce565b601254600160b01b900460ff16156113dc57506000610c07565b6001600160a01b03831660009081526011602052604090205460ff168280156114025750805b80156114185750601254600160a81b900460ff16155b15611427576000915050610c07565b60008161143c5761143785611dd2565b611445565b6114458561208b565b9050801561150b576001600160a01b038516600090815260176020526040902042905581156114b957831515856001600160a01b03167ffbd928dd3806a2bdf802f3a28a2cc55205f95dbcd2c3ed313abfca278366f80c836040516114ac91815260200190565b60405180910390a3611500565b831515856001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516114f791815260200190565b60405180910390a35b600192505050610c07565b506000949350505050565b6009546001600160a01b031633146115405760405162461bcd60e51b8152600401610bcc906129ce565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b0316331461158c5760405162461bcd60e51b8152600401610bcc906129ce565b6001600160a01b0382166000908152600f602052604090205460ff166115cc576019548110156115d0576115c1600a83611c22565b6115cc826000611bc3565b5050565b6115da8282611bc3565b60185481106115ef576115cc600a83836123fe565b6115cc600a83611c22565b6009546001600160a01b031633146116245760405162461bcd60e51b8152600401610bcc906129ce565b6001600160a01b0381166116895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bcc565b6009546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b806000808080806116f7600a876124a7565b945060001993506000851261175957600e5485111561172557600e5461171e9086906124f2565b9350611759565b600e54600a546000911061173a576000611749565b600e54600a5461174991611d90565b90506117558682611b72565b9450505b611762866112bb565b925061176d86610c76565b6001600160a01b038716600090815260176020526040902054969895975093959294915050565b600a54600090819081908015806117b45750601254600160b01b900460ff165b156117ca575050600e54600092508291506118b3565b600e546000805a90506000805b89841080156117e557508582105b156118a257846117f481612a22565b95505085851061180357600094505b6000600a600001868154811061181b5761181b612a3b565b60009182526020808320909101546001600160a01b0316808352601090915260409091205490915060ff1661186857611855816001611395565b15611868578161186481612a22565b9250505b8261187281612a22565b93505060005a9050808511156118995761189661188f8683611d90565b8790611943565b95505b93506117d79050565b600e85905590975095509193505050505b9193909250565b6000826000036118cc57506000610c07565b60006118d88385612a03565b9050826118e58583612972565b1461193c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610bcc565b9392505050565b6000806119508385612a51565b90508381101561193c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bcc565b6001600160a01b038316611a045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bcc565b6001600160a01b038216611a655760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bcc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602c60248201527f41736869625f4469766964656e645f547261636b65723a204e6f207472616e7360448201526b19995c9cc8185b1b1bddd95960a21b6064820152608401610bcc565b505050565b60008184841115611b4c5760405162461bcd60e51b8152600401610bcc91906127ba565b506000611b598486612a69565b95945050505050565b60008181811215610c0757600080fd5b600080611b7f8385612a80565b905060008312158015611b925750838112155b80611ba75750600083128015611ba757508381125b61193c57600080fd5b600080821215611bbf57600080fd5b5090565b6001600160a01b03821660009081526020819052604090205480821115611c02576000611bf08383611d90565b9050611bfc848261252f565b50505050565b80821015611b23576000611c168284611d90565b9050611bfc8482612593565b6001600160a01b038116600090815260038301602052604090205460ff16611c48575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff1916905560018086018352818420849055600286019092528220548454909291611c9291612a69565b90506000846000018281548110611cab57611cab612a3b565b60009182526020808320909101546001600160a01b03908116808452600289019092526040808420879055908716835282209190915585549091508190869085908110611cfa57611cfa612a3b565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558454859080611d3457611d34612ac1565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6000826000018281548110611d7457611d74612a3b565b6000918252602090912001546001600160a01b03169392505050565b600061193c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b28565b600080611dde836112bb565b90508015612082576001600160a01b038316600090815260076020526040902054611e099082611943565b6001600160a01b03808516600090815260076020526040812092909255601254169081611e8e576040516001600160a01b03861690610bb89085906000818181858888f193505050503d8060008114611e7e576040519150601f19603f3d011682016040523d82523d6000602084013e611e83565b606091505b505080915050611fe8565b6040805160028082526060820183526000926020830190803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1c9190612ad7565b81600081518110611f2f57611f2f612a3b565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110611f6357611f63612a3b565b6001600160a01b03928316602091820292909201015260155460405163b6f9de9560e01b815291169063b6f9de95908690611fa99060009086908c904290600401612b38565b6000604051808303818588803b158015611fc257600080fd5b505af193505050508015611fd4575060015b611fe15760009150611fe6565b600191505b505b80612036576001600160a01b0385166000908152600760205260409020546120109084611d90565b6001600160a01b0390951660009081526007602052604081209590955550929392505050565b846001600160a01b03167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d8460405161207191815260200190565b60405180910390a250909392505050565b50600092915050565b600080612097836112bb565b90508015612082576001600160a01b0383166000908152600760205260408120546120c29083611943565b6001600160a01b03851660009081526007602052604080822092909255815160028082526060820190935290918160200160208202803683375050601554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561214a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216e9190612ad7565b8160008151811061218157612181612a3b565b6001600160a01b0392831660209182029290920101526016548251911690829060019081106121b2576121b2612a3b565b6001600160a01b0392831660209182029290920101526016546040516370a0823160e01b815230600482015260009291909116906370a0823190602401602060405180830381865afa15801561220c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122309190612b6d565b60155460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de9590869061226a90600090879030904290600401612b38565b6000604051808303818588803b15801561228357600080fd5b505af193505050508015612295575060015b6122a257600092506123a5565b6016546040516370a0823160e01b81523060048201526000916123159184916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e19190612b6d565b9050801561239e5760165460405163a9059cbb60e01b81526001600160a01b03898116600483015260248201849052600196509091169063a9059cbb906044016020604051808303816000875af1158015612374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123989190612b86565b506123a3565b600093505b505b826123f4576001600160a01b0386166000908152600760205260409020546123cd9085611d90565b6001600160a01b039096166000908152600760205260408120969096555093949350505050565b5091949350505050565b6001600160a01b038216600090815260038401602052604090205460ff1615612443576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166124d25750600019610c07565b506001600160a01b03166000908152600291909101602052604090205490565b6000806124ff8385612ba3565b9050600083121580156125125750838113155b80611ba75750600083128015611ba7575083811361193c57600080fd5b61253982826125d7565b612573612554610cb8836005546118ba90919063ffffffff16565b6001600160a01b038416600090815260066020526040902054906124f2565b6001600160a01b0390921660009081526006602052604090209190915550565b61259d82826126b6565b6125736125b8610cb8836005546118ba90919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611b72565b6001600160a01b03821661262d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bcc565b60025461263a9082611943565b6002556001600160a01b0382166000908152602081905260409020546126609082611943565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b0382166127165760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bcc565b61275381604051806060016040528060228152602001612be3602291396001600160a01b0385166000908152602081905260409020549190611b28565b6001600160a01b0383166000908152602081905260409020556002546127799082611d90565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016126aa565b600060208083528351808285015260005b818110156127e7578581018301518582016040015282016127cb565b818111156127f9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461282457600080fd5b50565b60006020828403121561283957600080fd5b813561193c8161280f565b6000806040838503121561285757600080fd5b82356128628161280f565b946020939093013593505050565b60008060006060848603121561288557600080fd5b83356128908161280f565b925060208401356128a08161280f565b929592945050506040919091013590565b801515811461282457600080fd5b6000602082840312156128d157600080fd5b813561193c816128b1565b6000602082840312156128ee57600080fd5b5035919050565b6000806040838503121561290857600080fd5b82356129138161280f565b91506020830135612923816128b1565b809150509250929050565b6000806040838503121561294157600080fd5b823561294c8161280f565b915060208301356129238161280f565b634e487b7160e01b600052601160045260246000fd5b60008261298f57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806129a857607f821691505b6020821081036129c857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000816000190483118215151615612a1d57612a1d61295c565b500290565b600060018201612a3457612a3461295c565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60008219821115612a6457612a6461295c565b500190565b600082821015612a7b57612a7b61295c565b500390565b600080821280156001600160ff1b0384900385131615612aa257612aa261295c565b600160ff1b8390038412811615612abb57612abb61295c565b50500190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612ae957600080fd5b815161193c8161280f565b600081518084526020808501945080840160005b83811015612b2d5781516001600160a01b031687529582019590820190600101612b08565b509495945050505050565b848152608060208201526000612b516080830186612af4565b6001600160a01b03949094166040830152506060015292915050565b600060208284031215612b7f57600080fd5b5051919050565b600060208284031215612b9857600080fd5b815161193c816128b1565b60008083128015600160ff1b850184121615612bc157612bc161295c565b6001600160ff1b0384018313811615612bdc57612bdc61295c565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122019521417010212d4912c05c8af83fe33a856bf71923878aba76643fef7da5d3c64736f6c634300080f0033
Deployed ByteCode Sourcemap
26030:29452:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26193:64;;;;;;;;;;-1:-1:-1;26193:64:0;;;;-1:-1:-1;;;;;26193:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;26193:64:0;;;;;;;;52388:443;;;;;;;;;;-1:-1:-1;52388:443:0;;;;;:::i;:::-;;:::i;:::-;;6207:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34633:181::-;;;;;;;;;;-1:-1:-1;34633:181:0;;;;;:::i;:::-;;:::i;35628:164::-;;;;;;;;;;-1:-1:-1;35628:164:0;;;;;:::i;:::-;;:::i;7262:210::-;;;;;;;;;;-1:-1:-1;7262:210:0;;;;;:::i;:::-;;:::i;:::-;;;2140:14:1;;2133:22;2115:41;;2103:2;2088:18;7262:210:0;1975:187:1;32833:326:0;;;;;;;;;;-1:-1:-1;32833:326:0;;;;;:::i;:::-;;:::i;26108:41::-;;;;;;;;;;-1:-1:-1;26108:41:0;;;;-1:-1:-1;;;;;26108:41:0;;;6528:108;;;;;;;;;;-1:-1:-1;6616:12:0;;6528:108;;;2801:25:1;;;2789:2;2774:18;6528:108:0;2655:177:1;28252:33:0;;;;;;;;;;;;;;;;26413:28;;;;;;;;;;;;;;;;28381:55;;;;;;;;;;-1:-1:-1;28381:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;54842:637;;;;;;;;;;-1:-1:-1;54842:637:0;;;;;:::i;:::-;;:::i;7480:454::-;;;;;;;;;;-1:-1:-1;7480:454:0;;;;;:::i;:::-;;:::i;51371:114::-;;;;;;;;;;;;;:::i;26523:43::-;;;;;;;;;;-1:-1:-1;26523:43:0;;;;-1:-1:-1;;;;;26523:43:0;;;40641:141;;;;;;;;;;;;;:::i;32695:93::-;;;;;;;;;;-1:-1:-1;32695:93:0;;32778:2;6424:36:1;;6412:2;6397:18;32695:93:0;6282:184:1;42984:119:0;;;;;;;;;;-1:-1:-1;42984:119:0;;;;;:::i;:::-;;:::i;7942:300::-;;;;;;;;;;-1:-1:-1;7942:300:0;;;;;:::i;:::-;;:::i;26377:29::-;;;;;;;;;;;;;;;;37882:121;;;;;;;;;;-1:-1:-1;37882:121:0;;;;;:::i;:::-;;:::i;27639:49::-;;;;;;;;;;-1:-1:-1;27639:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;26158:28;;;;;;;;;;-1:-1:-1;26158:28:0;;;;-1:-1:-1;;;;;26158:28:0;;;27901:33;;;;;;;;;;-1:-1:-1;27901:33:0;;;;;;;;27173:40;;;;;;;;;;-1:-1:-1;27173:40:0;;;;;;;;26334:34;;;;;;;;;;-1:-1:-1;26334:34:0;;;;-1:-1:-1;;;26334:34:0;;;;;;42353:103;;;;;;;;;;;;;:::i;40790:126::-;;;;;;;;;;-1:-1:-1;40790:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;40880:28:0;40856:4;40880:28;;;:19;:28;;;;;;;;;40790:126;26965:31;;;;;;;;;;;;;;;;51493:183;;;;;;;;;;-1:-1:-1;51493:183:0;;;;;:::i;:::-;;:::i;26932:26::-;;;;;;;;;;;;;;;;51684:175;;;;;;;;;;-1:-1:-1;51684:175:0;;;;;:::i;:::-;;:::i;37238:120::-;;;;;;;;;;-1:-1:-1;37238:120:0;;;;;:::i;:::-;;:::i;42602:142::-;;;;;;;;;;;;;:::i;35500:99::-;;;;;;;;;;-1:-1:-1;35500:99:0;;;;;:::i;:::-;;:::i;41116:171::-;;;;;;;;;;-1:-1:-1;41116:171:0;;;;;:::i;:::-;;:::i;43111:185::-;;;;;;;;;;-1:-1:-1;43111:185:0;;;;;:::i;:::-;;:::i;41935:410::-;;;;;;;;;;-1:-1:-1;41935:410:0;;;;;:::i;:::-;;:::i;6644:177::-;;;;;;;;;;-1:-1:-1;6644:177:0;;;;;:::i;:::-;;:::i;13621:148::-;;;;;;;;;;;;;:::i;34863:127::-;;;;;;;;;;-1:-1:-1;34863:127:0;;;;;:::i;:::-;;:::i;38548:208::-;;;;;;;;;;-1:-1:-1;38548:208:0;;;;;:::i;:::-;;:::i;26575:38::-;;;;;;;;;;-1:-1:-1;26575:38:0;;;;-1:-1:-1;;;;;26575:38:0;;;27040:28;;;;;;;;;;;;;;;;28317:32;;;;;;;;;;-1:-1:-1;28317:32:0;;;;;;;;27581:51;;;;;;;;;;-1:-1:-1;27581:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;35291:170;;;;;;;;;;-1:-1:-1;35291:170:0;;;;;:::i;:::-;;:::i;39006:1429::-;;;;;;;;;;-1:-1:-1;39006:1429:0;;;;;:::i;:::-;;:::i;38764:234::-;;;;;;;;;;-1:-1:-1;38764:234:0;;;;;:::i;:::-;;:::i;42752:109::-;;;;;;;;;;-1:-1:-1;42752:109:0;;;;;:::i;:::-;;:::i;38299:241::-;;;;;;;;;;-1:-1:-1;38299:241:0;;;;;:::i;:::-;;:::i;26821:27::-;;;;;;;;;;;;;;;;13407:79;;;;;;;;;;-1:-1:-1;13472:6:0;;-1:-1:-1;;;;;13472:6:0;13407:79;;26620:32;;;;;;;;;;-1:-1:-1;26620:32:0;;;;-1:-1:-1;;;;;26620:32:0;;;26855;;;;;;;;;;;;;;;;6315:104;;;;;;;;;;;;;:::i;37582:163::-;;;;;;;;;;-1:-1:-1;37582:163:0;;;;;:::i;:::-;;:::i;27271:41::-;;;;;;;;;;;;;;;;37753:121;;;;;;;;;;-1:-1:-1;37753:121:0;;;;;:::i;:::-;;:::i;27075:24::-;;;;;;;;;;;;;;;;36358:176;;;;;;;;;;-1:-1:-1;36358:176:0;;;;;:::i;:::-;;:::i;35028:201::-;;;;;;;;;;-1:-1:-1;35028:201:0;;;;;:::i;:::-;;:::i;27106:25::-;;;;;;;;;;;;;;;;8250:400;;;;;;;;;;-1:-1:-1;8250:400:0;;;;;:::i;:::-;;:::i;36542:662::-;;;;;;;;;;-1:-1:-1;36542:662:0;;;;;:::i;:::-;;:::i;40924:184::-;;;;;;;;;;-1:-1:-1;40924:184:0;;;;;:::i;:::-;;:::i;6829:216::-;;;;;;;;;;-1:-1:-1;6829:216:0;;;;;:::i;:::-;;:::i;33510:143::-;;;;;;;;;;-1:-1:-1;33510:143:0;;;;;:::i;:::-;;:::i;40443:190::-;;;;;;;;;;-1:-1:-1;40443:190:0;;;;;:::i;:::-;-1:-1:-1;;;;;40576:25:0;40534:7;40576:25;;;:16;:25;;;;;;;;;40603:12;:21;;;;;;;40576:25;;40443:190;;;;;7919:25:1;;;7975:2;7960:18;;7953:34;;;;7892:18;40443:190:0;7745:248:1;27138:26:0;;;;;;;;;;;;;;;;41295:307;;;;;;;;;;-1:-1:-1;41295:307:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;8299:32:1;;;8281:51;;8363:2;8348:18;;8341:34;;;;8391:18;;;8384:34;;;;8449:2;8434:18;;8427:34;8492:3;8477:19;;8470:35;8319:3;8521:19;;8514:35;8268:3;8253:19;41295:307:0;7998:557:1;28219:26:0;;;;;;;;;;;;;;;;27435:57;;;;;;;;;;-1:-1:-1;27435:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35879:174;;;;;;;;;;-1:-1:-1;35879:174:0;;;;;:::i;:::-;;:::i;43304:127::-;;;;;;;;;;-1:-1:-1;43304:127:0;;;;;:::i;:::-;;:::i;26785:29::-;;;;;;;;;;;;;;;;34317:268;;;;;;;;;;-1:-1:-1;34317:268:0;;;;;:::i;:::-;;:::i;37366:208::-;;;;;;;;;;-1:-1:-1;37366:208:0;;;;;:::i;:::-;;:::i;33669:146::-;;;;;;;;;;;;;:::i;51205:158::-;;;;;;;;;;-1:-1:-1;51205:158:0;;;;;:::i;:::-;;:::i;7053:201::-;;;;;;;;;;-1:-1:-1;7053:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;7219:18:0;;;7187:7;7219:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7053:201;26745:33;;;;;;;;;;;;;;;;42464:130;;;;;;;;;;;;;:::i;27003:30::-;;;;;;;;;;;;;;;;27527:47;;;;;;;;;;-1:-1:-1;27527:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;41610:317;;;;;;;;;;-1:-1:-1;41610:317:0;;;;;:::i;:::-;;:::i;13777:281::-;;;;;;;;;;-1:-1:-1;13777:281:0;;;;;:::i;:::-;;:::i;42869:107::-;;;;;;;;;;-1:-1:-1;42869:107:0;;;;;:::i;:::-;;:::i;26894:31::-;;;;;;;;;;;;;;;;33831:415;;;;;;;;;;-1:-1:-1;33831:415:0;;;;;:::i;:::-;;:::i;26714:24::-;;;;;;;;;;;;;;;;36123:221;;;;;;;;;;-1:-1:-1;36123:221:0;;;;;:::i;:::-;;:::i;52388:443::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;;;;;;;;;52476:17:::1;:6:::0;52486::::1;52476:17;:::i;:::-;52467:26;;52504:19;52526:25;52540:10;;52526:9;;:13;;:25;;;;:::i;:::-;52504:47;;52562:15;52580:38;52606:11;52580:21;52591:9;;52580:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;52562:56;;52629:16;52648:39;52675:11;52648:22;52659:10;;52648:6;:10;;:22;;;;:::i;:39::-;52629:58;;52700:28;52721:6;52700:20;:28::i;:::-;52753:9;::::0;:22:::1;::::0;52767:7;52753:13:::1;:22::i;:::-;52741:9;:34:::0;52799:10:::1;::::0;:24:::1;::::0;52814:8;52799:14:::1;:24::i;:::-;52786:10;:37:::0;-1:-1:-1;;;;52388:443:0:o;6207:100::-;6261:13;6294:5;6287:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6207:100;:::o;34633:181::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34717:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;34717:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34772:34;;2115:41:1;;;34772:34:0::1;::::0;2088:18:1;34772:34:0::1;;;;;;;34633:181:::0;;:::o;35628:164::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;35714:1:::1;35706:4;:9;;35698:46;;;::::0;-1:-1:-1;;;35698:46:0;;10206:2:1;35698:46:0::1;::::0;::::1;10188:21:1::0;10245:2;10225:18;;;10218:30;10284:26;10264:18;;;10257:54;10328:18;;35698:46:0::1;10004:348:1::0;35698:46:0::1;35771:13;:4:::0;35778:6:::1;35771:13;:::i;:::-;35755;:29:::0;-1:-1:-1;35628:164:0:o;7262:210::-;7381:4;7403:39;793:10;7426:7;7435:6;7403:8;:39::i;:::-;-1:-1:-1;7460:4:0;7262:210;;;;;:::o;32833:326::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;32955:24:::1;::::0;;;:14:::1;:24;::::0;;;;;:33;;;32947:42:::1;;;::::0;::::1;;33017:3;33008:5;:12;;33000:55;;;::::0;-1:-1:-1;;;33000:55:0;;10559:2:1;33000:55:0::1;::::0;::::1;10541:21:1::0;10598:2;10578:18;;;10571:30;10637:32;10617:18;;;10610:60;10687:18;;33000:55:0::1;10357:354:1::0;33000:55:0::1;33066:24;::::0;;;:14:::1;:24;::::0;;;;;;;;:32;;;33114:37;;7919:25:1;;;7960:18;;;7953:34;;;33114:37:0::1;::::0;7892:18:1;33114:37:0::1;;;;;;;32833:326:::0;;:::o;54842:637::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;55014:6:::1;:13;54989:14;:21;:38;54981:80;;;::::0;-1:-1:-1;;;54981:80:0;;10918:2:1;54981:80:0::1;::::0;::::1;10900:21:1::0;10957:2;10937:18;;;10930:30;10996:32;10976:18;;;10969:60;11046:18;;54981:80:0::1;10716:354:1::0;54981:80:0::1;55105:3;55080:14;:21;:28;;55072:75;;;::::0;-1:-1:-1;;;55072:75:0;;11277:2:1;55072:75:0::1;::::0;::::1;11259:21:1::0;11316:2;11296:18;;;11289:30;11355:34;11335:18;;;11328:62;-1:-1:-1;;;11406:18:1;;;11399:32;11448:19;;55072:75:0::1;11075:398:1::0;55072:75:0::1;55163:9;55158:314;55182:14;:21;55178:1;:25;55158:314;;;55225:14;55242;55257:1;55242:17;;;;;;;;:::i;:::-;;;;;;;55225:34;;55274:21;55298:6;55305:1;55298:9;;;;;;;;:::i;:::-;;;;;;;55311:6;55298:20;;;;:::i;:::-;55274:44;;55333:50;55349:10;55361:6;55369:13;55333:15;:50::i;:::-;55398:15;::::0;-1:-1:-1;;;;;55398:15:0::1;:26;55433:6:::0;55442:17:::1;55433:6:::0;55442:9:::1;:17::i;:::-;55398:62;::::0;-1:-1:-1;;;;;;55398:62:0::1;::::0;;;;;;-1:-1:-1;;;;;11810:32:1;;;55398:62:0::1;::::0;::::1;11792:51:1::0;11859:18;;;11852:34;11765:18;;55398:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55210:262;;55205:3;;;;;:::i;:::-;;;;55158:314;;;;54842:637:::0;;:::o;7480:454::-;7620:4;7637:36;7647:6;7655:9;7666:6;7637:9;:36::i;:::-;7684:220;7707:6;793:10;7755:138;7811:6;7755:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7755:19:0;;;;;;:11;:19;;;;;;;;793:10;7755:33;;;;;;;;;;:37;:138::i;:::-;7684:8;:220::i;:::-;-1:-1:-1;7922:4:0;7480:454;;;;;:::o;51371:114::-;51445:15;;:32;;;-1:-1:-1;;;51445:32:0;;;;51418:7;;-1:-1:-1;;;;;51445:15:0;;:30;;:32;;;;;;;;;;;;;;:15;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51438:39;;51371:114;:::o;40641:141::-;40731:15;;:43;;;-1:-1:-1;;;40731:43:0;;;;40704:7;;-1:-1:-1;;;;;40731:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;42984:119::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;43054:15:::1;::::0;:41:::1;::::0;-1:-1:-1;;;43054:41:0;;2140:14:1;;2133:22;43054:41:0::1;::::0;::::1;2115::1::0;-1:-1:-1;;;;;43054:15:0;;::::1;::::0;:34:::1;::::0;2088:18:1;;43054:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42984:119:::0;:::o;7942:300::-;793:10;8057:4;8151:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8151:34:0;;;;;;;;;;8057:4;;8079:133;;8129:7;;8151:50;;8190:10;8151:38;:50::i;37882:121::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;37952:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;37952:43:0;;2140:14:1;;2133:22;37952:43:0::1;::::0;::::1;2115:41:1::0;-1:-1:-1;;;;;37952:15:0;;::::1;::::0;:36:::1;::::0;2088:18:1;;37952:43:0::1;1975:187:1::0;42353:103:0;42390:15;;:58;;-1:-1:-1;;;42390:58:0;;42429:10;42390:58;;;12666:51:1;42390:15:0;12733:18:1;;;12726:50;-1:-1:-1;;;;;42390:15:0;;;;:30;;12639:18:1;;42390:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42353:103::o;51493:183::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;51607:15:::1;::::0;:61:::1;::::0;-1:-1:-1;;;51607:61:0;;::::1;::::0;::::1;2801:25:1::0;;;-1:-1:-1;;;;;51607:15:0;;::::1;::::0;:54:::1;::::0;2774:18:1;;51607:61:0::1;2655:177:1::0;51684:175:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;51794:15:::1;::::0;:57:::1;::::0;-1:-1:-1;;;51794:57:0;;::::1;::::0;::::1;2801:25:1::0;;;-1:-1:-1;;;;;51794:15:0;;::::1;::::0;:50:::1;::::0;2774:18:1;;51794:57:0::1;2655:177:1::0;37238:120:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;37333:17:::1;:6:::0;37343::::1;37333:17;:::i;:::-;37312:18;:38:::0;-1:-1:-1;37238:120:0:o;42602:142::-;42695:15;;:41;;;-1:-1:-1;;;42695:41:0;;;;42668:7;;-1:-1:-1;;;;;42695:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;35500:99;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;35569:14:::1;:22:::0;;-1:-1:-1;;35569:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35500:99::o;41116:171::-;41245:15;;:34;;-1:-1:-1;;;41245:34:0;;-1:-1:-1;;;;;178:32:1;;;41245:34:0;;;160:51:1;41213:7:0;;41245:15;;:25;;133:18:1;;41245:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43111:185::-;43240:15;;:48;;-1:-1:-1;;;43240:48:0;;-1:-1:-1;;;;;178:32:1;;;43240:48:0;;;160:51:1;43211:4:0;;43240:15;;:39;;133:18:1;;43240:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41935:410::-;42117:15;;:28;;-1:-1:-1;;;;;;42117:28:0;;;;;2801:25:1;;;42015:18:0;;;;;;-1:-1:-1;;;;;42117:15:0;;:23;;2774:18:1;;42117:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42161:176;;;13579:25:1;;;13635:2;13620:18;;13613:34;;;13663:18;;;13656:34;;;13721:2;13706:18;;13699:34;;;42000:145:0;;-1:-1:-1;42000:145:0;;-1:-1:-1;42000:145:0;-1:-1:-1;42317:9:0;;42279:5;;42161:176;;13566:3:1;13551:19;42161:176:0;;;;;;;41989:356;;;41935:410;:::o;6644:177::-;-1:-1:-1;;;;;6795:18:0;6763:7;6795:18;;;;;;;;;;;;6644:177::o;13621:148::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;13712:6:::1;::::0;13691:40:::1;::::0;13728:1:::1;::::0;-1:-1:-1;;;;;13712:6:0::1;::::0;13691:40:::1;::::0;13728:1;;13691:40:::1;13742:6;:19:::0;;-1:-1:-1;;;;;;13742:19:0::1;::::0;;13621:148::o;34863:127::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;34937:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;34937:45:0;;-1:-1:-1;;;;;178:32:1;;;34937:45:0::1;::::0;::::1;160:51:1::0;34937:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;34937:45:0::1;14:203:1::0;38548:208:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;38617:15:::1;::::0;:46:::1;::::0;-1:-1:-1;;;38617:46:0;;-1:-1:-1;;;;;178:32:1;;;38617:46:0::1;::::0;::::1;160:51:1::0;38617:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;38617:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;38674:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:36;;-1:-1:-1;;38674:36:0::1;38706:4;38674:36;::::0;;-1:-1:-1;38721:27:0::1;38694:8:::0;38721:17:::1;:27::i;35291:170::-:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35403:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;35403:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35291:170::o;39006:1429::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;39350:11:::1;:21:::0;;;39382:16:::1;:31:::0;;;39424:15:::1;:30:::0;;;39465:13:::1;:26:::0;;;39502:12:::1;:23:::0;;;39536:17:::1;:33:::0;;;39580:16:::1;:32:::0;;;39623:14:::1;:28:::0;;;39662:9:::1;:18:::0;;;39691:10:::1;:20:::0;;;39740:117:::1;39704:7:::0;39740:87:::1;39556:13:::0;39740:87;39640:11;39599:13;39740:32:::1;:50::i;:::-;:68:::0;::::1;:87::i;:117::-;39724:13;:133;;;;39885:113;39988:9;;39885:84;39952:16;;39885:48;39917:15;;39885:13;;:31;;:48;;;;:::i;:113::-;39870:12;:128:::0;40019:13:::1;::::0;40036:2:::1;-1:-1:-1::0;40019:19:0;::::1;::::0;:41:::1;;;40058:2;40042:12;;:18;;40019:41;40011:94;;;::::0;-1:-1:-1;;;40011:94:0;;13946:2:1;40011:94:0::1;::::0;::::1;13928:21:1::0;13985:2;13965:18;;;13958:30;14024:34;14004:18;;;13997:62;-1:-1:-1;;;14075:18:1;;;14068:38;14123:19;;40011:94:0::1;13744:404:1::0;40011:94:0::1;40148:12;::::0;40175:17:::1;::::0;40207:16:::1;::::0;40238:14:::1;::::0;40267:11:::1;::::0;40293:16:::1;::::0;40324:15:::1;::::0;40354:13:::1;::::0;40382:9:::1;::::0;40406:10:::1;::::0;40123:304:::1;::::0;;14552:25:1;;;14608:2;14593:18;;14586:34;;;;14636:18;;;14629:34;;;;14694:2;14679:18;;14672:34;;;;14737:3;14722:19;;14715:35;;;;14781:3;14766:19;;14759:35;14825:3;14810:19;;14803:35;14869:3;14854:19;;14847:35;14913:3;14898:19;;14891:35;14957:3;14942:19;;14935:35;40123:304:0::1;::::0;14539:3:1;14524:19;40123:304:0::1;;;;;;;39006:1429:::0;;;;;;;;;;:::o;38764:234::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;38870:1:::1;38852:14;:19;;38843:62;;;::::0;-1:-1:-1;;;38843:62:0;;15183:2:1;38843:62:0::1;::::0;::::1;15165:21:1::0;15222:2;15202:18;;;15195:30;15261:31;15241:18;;;15234:59;15310:18;;38843:62:0::1;14981:353:1::0;38843:62:0::1;38916:11;:28:::0;;;38960:30:::1;::::0;2801:25:1;;;38960:30:0::1;::::0;2789:2:1;2774:18;38960:30:0::1;;;;;;;;38764:234:::0;:::o;42752:109::-;42806:15;;:47;;-1:-1:-1;;;42806:47:0;;42835:10;42806:47;;;12666:51:1;12760:14;;12753:22;12733:18;;;12726:50;-1:-1:-1;;;;;42806:15:0;;;;:28;;12639:18:1;;42806:47:0;12482:300:1;38299:241:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;38397:6:::1;38385:8;:18;;:41;;;;;38419:7;38407:8;:19;;38385:41;38377:50;;;::::0;::::1;;38477:16;::::0;38443:51:::1;::::0;38467:8;;38443:51:::1;::::0;;;::::1;38505:16;:27:::0;38299:241::o;6315:104::-;6371:13;6404:7;6397:14;;;;;:::i;37582:163::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;37696:41:::1;37725:4;37731:5;37696:28;:41::i;:::-;37582:163:::0;;:::o;37753:121::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;37823:15:::1;::::0;:43:::1;::::0;-1:-1:-1;;;37823:43:0;;2140:14:1;;2133:22;37823:43:0::1;::::0;::::1;2115:41:1::0;-1:-1:-1;;;;;37823:15:0;;::::1;::::0;:36:::1;::::0;2088:18:1;;37823:43:0::1;1975:187:1::0;36358:176:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;36448:6:::1;36430:24;;:14;;;;;;;;;;;:24;;::::0;36422:33:::1;;;::::0;::::1;;36466:14;:23:::0;;;::::1;;-1:-1:-1::0;;;36466:23:0::1;-1:-1:-1::0;;;;36466:23:0;;::::1;;::::0;;36505:21:::1;::::0;::::1;::::0;::::1;::::0;36483:6;2140:14:1;2133:22;2115:41;;2103:2;2088:18;;1975:187;35028:201:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;35102:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;35102:45:0;;-1:-1:-1;;;;;178:32:1;;;35102:45:0::1;::::0;::::1;160:51:1::0;35102:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;35102:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;35158:15:0::1;::::0;-1:-1:-1;;;;;35158:15:0::1;::::0;-1:-1:-1;35158:26:0::1;::::0;-1:-1:-1;35185:7:0;35194:26:::1;35185:7:::0;35194:17:::1;:26::i;:::-;35158:63;::::0;-1:-1:-1;;;;;;35158:63:0::1;::::0;;;;;;-1:-1:-1;;;;;11810:32:1;;;35158:63:0::1;::::0;::::1;11792:51:1::0;11859:18;;;11852:34;11765:18;;35158:63:0::1;11610:282:1::0;8250:400:0;8370:4;8392:228;793:10;8442:7;8464:145;8521:15;8464:145;;;;;;;;;;;;;;;;;793:10;8464:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8464:34:0;;;;;;;;;;;;:38;:145::i;36542:662::-;36601:14;;-1:-1:-1;;;36601:14:0;;;;36593:49;;;;-1:-1:-1;;;36593:49:0;;16109:2:1;36593:49:0;;;16091:21:1;16148:2;16128:18;;;16121:30;-1:-1:-1;;;16167:18:1;;;16160:52;16229:18;;36593:49:0;15907:346:1;36593:49:0;36661:24;;;;:14;:24;;;;;;:29;;36653:66;;;;-1:-1:-1;;;36653:66:0;;16460:2:1;36653:66:0;;;16442:21:1;16499:2;16479:18;;;16472:30;16538:26;16518:18;;;16511:54;16582:18;;36653:66:0;16258:348:1;36653:66:0;36785:29;:15;36805:8;36785:19;:29::i;:::-;793:10;36752:30;;;;:16;:30;;;;;;:62;36730:148;;;;-1:-1:-1;;;36730:148:0;;16813:2:1;36730:148:0;;;16795:21:1;16852:2;16832:18;;;16825:30;16891:34;16871:18;;;16864:62;-1:-1:-1;;;16942:18:1;;;16935:34;16986:19;;36730:148:0;16611:400:1;36730:148:0;36918:24;;;;:14;:24;;;;;;;;;793:10;36889:26;;:12;:26;;;;;;:53;36986:29;:15;36918:24;36986:19;:29::i;:::-;793:10;36953:30;;;;:16;:30;;;;;:62;;;;37026:15;;-1:-1:-1;;;;;37026:15:0;;:26;;37094:31;793:10;37094:17;:31::i;:::-;37026:110;;-1:-1:-1;;;;;;37026:110:0;;;;;;;-1:-1:-1;;;;;11810:32:1;;;37026:110:0;;;11792:51:1;11859:18;;;11852:34;11765:18;;37026:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37173:12;793:10;;713:98;37173:12;-1:-1:-1;;;;;37152:44:0;;37187:8;37152:44;;;;2801:25:1;;2789:2;2774:18;;2655:177;37152:44:0;;;;;;;;36542:662;:::o;40924:184::-;41053:15;;:47;;-1:-1:-1;;;41053:47:0;;-1:-1:-1;;;;;178:32:1;;;41053:47:0;;;160:51:1;41021:7:0;;41053:15;;:38;;133:18:1;;41053:47:0;14:203:1;6829:216:0;6951:4;6973:42;793:10;6997:9;7008:6;6973:9;:42::i;33510:143::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33603:30:0;;;::::1;;::::0;;;:23:::1;:30;::::0;;;;:38;;-1:-1:-1;;33603:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33510:143::o;41295:307::-;41559:15;;:35;;-1:-1:-1;;;41559:35:0;;-1:-1:-1;;;;;178:32:1;;;41559:35:0;;;160:51:1;41409:7:0;;;;;;;;;;;;41559:15;;;;:26;;133:18:1;;41559:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41552:42;;;;-1:-1:-1;41552:42:0;;-1:-1:-1;41552:42:0;-1:-1:-1;41552:42:0;-1:-1:-1;41552:42:0;;-1:-1:-1;41295:307:0;-1:-1:-1;;41295:307:0:o;35879:174::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;35967:3:::1;35958:5;:12;;35950:63;;;::::0;-1:-1:-1;;;35950:63:0;;17780:2:1;35950:63:0::1;::::0;::::1;17762:21:1::0;17819:2;17799:18;;;17792:30;17858:34;17838:18;;;17831:62;-1:-1:-1;;;17909:18:1;;;17902:36;17955:19;;35950:63:0::1;17578:402:1::0;35950:63:0::1;36024:13;:21:::0;35879:174::o;43304:127::-;43388:15;;:35;;-1:-1:-1;;;43388:35:0;;-1:-1:-1;;;;;178:32:1;;;43388:35:0;;;160:51:1;43364:4:0;;43388:15;;:26;;133:18:1;;43388:35:0;14:203:1;34317:268:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34389:41:0;;::::1;;::::0;;;:33:::1;:41;::::0;;;;;;;:48;;34433:4:::1;-1:-1:-1::0;;34389:48:0;;::::1;::::0;::::1;::::0;;;34448:19:::1;:27:::0;;;;;;;:34;;;;::::1;::::0;;::::1;::::0;;34493:15:::1;::::0;:44;;-1:-1:-1;;;34493:44:0;;::::1;::::0;::::1;160:51:1::0;;;;34493:15:0;::::1;::::0;:36:::1;::::0;133:18:1;34493:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34553:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;34553:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;34553:24:0::1;14:203:1::0;37366:208:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;37446:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;37438:41:::1;;;::::0;::::1;;37490:21;:31:::0;;-1:-1:-1;;37490:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37537:29:::1;::::0;2115:41:1;;;37537:29:0::1;::::0;2103:2:1;2088:18;37537:29:0::1;1975:187:1::0;33669:146:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;33736:20:::1;::::0;::::1;;33735:21;33727:30;;;::::0;::::1;;33776:20;:27:::0;;-1:-1:-1;;33776:27:0::1;33799:4;33776:27;::::0;;33669:146::o;51205:158::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;51275:15:::1;::::0;:40:::1;::::0;-1:-1:-1;;;51275:40:0;;-1:-1:-1;;;;;178:32:1;;;51275:40:0::1;::::0;::::1;160:51:1::0;51275:15:0;;::::1;::::0;:33:::1;::::0;133:18:1;;51275:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;51331:24:0::1;::::0;-1:-1:-1;;;;;178:32:1;;160:51;;51331:24:0::1;::::0;-1:-1:-1;148:2:1;133:18;;-1:-1:-1;51331:24:0::1;14:203:1::0;42464:130:0;42547:15;;:39;;;-1:-1:-1;;;42547:39:0;;;;42520:7;;-1:-1:-1;;;;;42547:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;41610:317;41879:15;;:40;;-1:-1:-1;;;41879:40:0;;;;;2801:25:1;;;41729:7:0;;;;;;;;;;;;-1:-1:-1;;;;;41879:15:0;;;;:33;;2774:18:1;;41879:40:0;2655:177:1;13777:281:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13880:22:0;::::1;13858:110;;;::::0;-1:-1:-1;;;13858:110:0;;18187:2:1;13858:110:0::1;::::0;::::1;18169:21:1::0;18226:2;18206:18;;;18199:30;18265:34;18245:18;;;18238:62;-1:-1:-1;;;18316:18:1;;;18309:36;18362:19;;13858:110:0::1;17985:402:1::0;13858:110:0::1;14005:6;::::0;13984:38:::1;::::0;-1:-1:-1;;;;;13984:38:0;;::::1;::::0;14005:6:::1;::::0;13984:38:::1;::::0;14005:6:::1;::::0;13984:38:::1;14033:6;:17:::0;;-1:-1:-1;;;;;;14033:17:0::1;-1:-1:-1::0;;;;;14033:17:0;;;::::1;::::0;;;::::1;::::0;;13777:281::o;42869:107::-;42922:15;;:46;;-1:-1:-1;;;42922:46:0;;42950:10;42922:46;;;12666:51:1;12760:14;;12753:22;12733:18;;;12726:50;-1:-1:-1;;;;;42922:15:0;;;;:27;;12639:18:1;;42922:46:0;12482:300:1;33831:415:0;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;33900:10:::1;:20:::0;;-1:-1:-1;;;;;;33900:20:0::1;;-1:-1:-1::0;;;;;33900:20:0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;33935:21;33931:203:::1;;-1:-1:-1::0;;;;;33973:32:0;;::::1;;::::0;;;:23:::1;:32;::::0;;;;;;;:39;;34008:4:::1;-1:-1:-1::0;;33973:39:0;;::::1;::::0;::::1;::::0;;;34027:19:::1;:28:::0;;;;;;;:35;;;;::::1;::::0;;::::1;::::0;;34077:15:::1;::::0;:45;;-1:-1:-1;;;34077:45:0;;::::1;::::0;::::1;160:51:1::0;;;;34077:15:0;;::::1;::::0;:36:::1;::::0;133:18:1;;34077:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33931:203;34158:12;34144:11;:26:::0;34181:14:::1;:21:::0;;-1:-1:-1;;;;34181:21:0::1;-1:-1:-1::0;;;34181:21:0::1;::::0;;34218:16:::1;::::0;::::1;::::0;34181:21;;34218:16:::1;33831:415:::0;:::o;36123:221::-;13534:6;;-1:-1:-1;;;;;13534:6:0;793:10;13534:22;13526:67;;;;-1:-1:-1;;;13526:67:0;;;;;;;:::i;:::-;36198:16:::1;:5:::0;36207:6:::1;36198:16;:::i;:::-;36190:24;;36257:4;36242:12;;:19;;;;:::i;:::-;36233:5;:28;;36225:83;;;::::0;-1:-1:-1;;;36225:83:0;;18816:2:1;36225:83:0::1;::::0;::::1;18798:21:1::0;18855:2;18835:18;;;18828:30;18894:34;18874:18;;;18867:62;-1:-1:-1;;;18945:18:1;;;18938:40;18995:19;;36225:83:0::1;18614:406:1::0;36225:83:0::1;36319:9;:17:::0;36123:221::o;11433:181::-;11491:7;;11523:5;11527:1;11523;:5;:::i;:::-;11511:17;;11552:1;11547;:6;;11539:46;;;;-1:-1:-1;;;11539:46:0;;19360:2:1;11539:46:0;;;19342:21:1;19399:2;19379:18;;;19372:30;19438:29;19418:18;;;19411:57;19485:18;;11539:46:0;19158:351:1;11539:46:0;11605:1;11433:181;-1:-1:-1;;;11433:181:0:o;12000:250::-;12058:7;12082:1;12087;12082:6;12078:47;;-1:-1:-1;12112:1:0;12105:8;;12078:47;12137:9;12149:5;12153:1;12149;:5;:::i;:::-;12137:17;-1:-1:-1;12182:1:0;12173:5;12177:1;12137:17;12173:5;:::i;:::-;:10;12165:56;;;;-1:-1:-1;;;12165:56:0;;19716:2:1;12165:56:0;;;19698:21:1;19755:2;19735:18;;;19728:30;19794:34;19774:18;;;19767:62;-1:-1:-1;;;19845:18:1;;;19838:31;19886:19;;12165:56:0;19514:397:1;12258:132:0;12316:7;12343:39;12347:1;12350;12343:39;;;;;;;;;;;;;;;;;:3;:39::i;52839:1995::-;52908:6;52918:1;52908:11;52904:50;;52839:1995;:::o;52904:50::-;52964:24;52981:6;52964:16;:24::i;:::-;52999:19;53021:25;53035:10;;53021:9;;:13;;:25;;;;:::i;:::-;53262:13;;52999:47;;-1:-1:-1;53074:4:0;;;;;;53059:12;;;;;;53262:17;53258:261;;53315:192;53497:9;;53478:16;;53462:13;;:32;;;;:::i;:::-;:44;;;;:::i;:::-;53315:128;53429:13;;53315:95;53398:11;53315:64;53369:9;;53315:35;:53;;:64;;;;:::i;:95::-;:113;;:128::i;:192::-;53296:211;;53258:261;53533:14;;:18;53529:268;;53588:197;53774:10;;53754:17;;53737:14;;:34;;;;:::i;:::-;:47;;;;:::i;:::-;53588:130;53703:14;;53588:96;53672:11;53588:65;53642:10;;53588:35;:53;;:65;;;;:::i;:197::-;53568:217;;53529:268;53819:39;:16;53840:17;53819:20;:39::i;:::-;53807:51;-1:-1:-1;53875:13:0;;53871:111;;53927:15;;53919:51;;-1:-1:-1;;;;;53927:15:0;;;;53956:9;;53919:51;;;;53956:9;53927:15;53919:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53905:65:0;;-1:-1:-1;;53871:111:0;54002:21;54075:31;54096:9;;54075:16;;:20;;:31;;;;:::i;:::-;54048:10;;54026:17;;:33;;:21;:33::i;:::-;:80;;;;:::i;:::-;54002:104;-1:-1:-1;54119:19:0;54153:17;;54149:104;;54201:40;:21;54227:13;54201:25;:40::i;:::-;54187:54;;54149:104;54263:23;54331:11;54289:39;54310:17;;54289:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;54263:79;;54353:17;54401:11;54373:25;54387:10;;54373:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;54353:59;-1:-1:-1;54429:19:0;;54425:126;;54490:15;;54482:57;;-1:-1:-1;;;;;54490:15:0;;;;54519;;54482:57;;;;54519:15;54490;54482:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54465:74:0;;-1:-1:-1;;54425:126:0;54565:13;;54561:108;;54620:9;;54612:45;;-1:-1:-1;;;;;54620:9:0;;;;54643;;54612:45;;;;54643:9;54620;54612:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54595:62:0;;-1:-1:-1;;54561:108:0;54686:140;54714:9;54738:27;54756:9;54738:15;:27;:::i;:::-;54780:7;:21;;;;;54791:10;54780:21;:35;;;;;54805:10;54780:35;54686:140;;;20322:25:1;;;20378:2;20363:18;;20356:34;;;;20433:14;20426:22;20406:18;;;20399:50;20310:2;20295:18;54686:140:0;;;;;;;52893:1941;;;;;;;;;;;52839:1995;:::o;11622:136::-;11680:7;11707:43;11711:1;11714;11707:43;;;;;;;;;;;;;;;;;:3;:43::i;10125:380::-;-1:-1:-1;;;;;10261:19:0;;10253:68;;;;-1:-1:-1;;;10253:68:0;;20662:2:1;10253:68:0;;;20644:21:1;20701:2;20681:18;;;20674:30;20740:34;20720:18;;;20713:62;-1:-1:-1;;;20791:18:1;;;20784:34;20835:19;;10253:68:0;20460:400:1;10253:68:0;-1:-1:-1;;;;;10340:21:0;;10332:68;;;;-1:-1:-1;;;10332:68:0;;21067:2:1;10332:68:0;;;21049:21:1;21106:2;21086:18;;;21079:30;21145:34;21125:18;;;21118:62;-1:-1:-1;;;21196:18:1;;;21189:32;21238:19;;10332:68:0;20865:398:1;10332:68:0;-1:-1:-1;;;;;10413:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10465:32;;2801:25:1;;;10465:32:0;;2774:18:1;10465:32:0;;;;;;;;10125:380;;;:::o;8658:610::-;-1:-1:-1;;;;;8798:20:0;;8790:70;;;;-1:-1:-1;;;8790:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8879:23:0;;8871:71;;;;-1:-1:-1;;;8871:71:0;;;;;;;:::i;:::-;9035:108;9071:6;9035:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9035:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;9015:17:0;;;:9;:17;;;;;;;;;;;:128;;;;9177:20;;;;;;;:32;;9202:6;9177:24;:32::i;:::-;-1:-1:-1;;;;;9154:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;9225:35;2801:25:1;;;9154:20:0;;9225:35;;;;;;2774:18:1;9225:35:0;2655:177:1;43439:6466:0;-1:-1:-1;;;;;43571:18:0;;43563:68;;;;-1:-1:-1;;;43563:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43650:16:0;;43642:64;;;;-1:-1:-1;;;43642:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43869:39:0;;43717:18;43869:39;;;:33;:39;;;;;;43717:18;;;;;;;;43869:39;;43864:132;;43933:14;;-1:-1:-1;;;43933:14:0;;;;43925:59;;;;-1:-1:-1;;;43925:59:0;;22280:2:1;43925:59:0;;;22262:21:1;;;22299:18;;;22292:30;22358:34;22338:18;;;22331:62;22410:18;;43925:59:0;22078:356:1;43925:59:0;44020:20;;;;:29;;;:57;;-1:-1:-1;44053:10:0;;;;;-1:-1:-1;;;;;44053:10:0;:24;;44020:57;44016:209;;;44102:19;44112:4;44118:2;44102:9;:19::i;:::-;:24;;:57;;-1:-1:-1;;;;;;44130:29:0;;;;;;:23;:29;;;;;;;;44102:57;:88;;;-1:-1:-1;;;;;;44163:27:0;;;;;;:23;:27;;;;;;;;44102:88;44094:119;;;;-1:-1:-1;;;44094:119:0;;22641:2:1;44094:119:0;;;22623:21:1;22680:2;22660:18;;;22653:30;-1:-1:-1;;;22699:18:1;;;22692:48;22757:18;;44094:119:0;22439:342:1;44094:119:0;44257:6;44267:1;44257:11;44253:5268;;44285:28;44301:4;44307:2;44311:1;44285:15;:28::i;:::-;44328:7;;;;;43439:6466;;;:::o;44253:5268::-;44371:8;;-1:-1:-1;;;44371:8:0;;;;44370:9;:39;;;;-1:-1:-1;;;;;;44384:25:0;;;;;;:19;:25;;;;;;;;44383:26;44370:39;:67;;;;-1:-1:-1;;;;;;44414:23:0;;;;;;:19;:23;;;;;;;;44413:24;44370:67;44352:5169;;;-1:-1:-1;;;;;44481:29:0;;;44464:14;44481:29;;;:25;:29;;;;;;;44541:31;;;;;;;;44481:29;;;;;44541:31;44593:9;;:23;;;;;44607:9;44606:10;44593:23;44589:2286;;;44637:13;44653:32;44681:3;44653:23;44664:11;;44653:6;:10;;:23;;;;:::i;:32::-;44637:48;-1:-1:-1;44713:17:0;:6;44637:48;44713:10;:17::i;:::-;44704:26;;44749:43;44765:4;44779;44786:5;44749:15;:43::i;:::-;44811:33;44827:4;44833:2;44837:6;44811:15;:33::i;:::-;44863:15;;-1:-1:-1;;;;;44863:15:0;:26;44890:4;44896:23;44890:4;44896:17;:23::i;:::-;44863:57;;-1:-1:-1;;;;;;44863:57:0;;;;;;;-1:-1:-1;;;;;11810:32:1;;;44863:57:0;;;11792:51:1;11859:18;;;11852:34;11765:18;;44863:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44939:15:0;;-1:-1:-1;;;;;44939:15:0;;-1:-1:-1;44939:26:0;;-1:-1:-1;44966:2:0;44970:21;44966:2;44970:17;:21::i;:::-;44939:53;;-1:-1:-1;;;;;;44939:53:0;;;;;;;-1:-1:-1;;;;;11810:32:1;;;44939:53:0;;;11792:51:1;11859:18;;;11852:34;11765:18;;44939:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45011:7;;;;;;;;43439:6466;;;:::o;44589:2286::-;45071:8;45070:9;:27;;;;-1:-1:-1;45083:14:0;;-1:-1:-1;;;45083:14:0;;;;45070:27;45066:1809;;;-1:-1:-1;;;;;45148:22:0;;;;;;:16;:22;;;;;;45174:15;-1:-1:-1;45148:41:0;45118:144;;;;-1:-1:-1;;;45118:144:0;;22988:2:1;45118:144:0;;;22970:21:1;23027:2;23007:18;;;23000:30;23066:31;23046:18;;;23039:59;23115:18;;45118:144:0;22786:353:1;45118:144:0;-1:-1:-1;;;;;45285:22:0;;;;;;:16;:22;;;;;;:27;45281:147;;-1:-1:-1;;;;;45337:22:0;;45362:1;45337:22;;;:16;:22;;;;;;;;:26;;;45386:12;:18;;;;;:22;45281:147;45066:1809;;;45468:9;45464:1411;;;45511:14;;45555:12;;45602:17;;45653:16;;45698:10;;45733:14;;45511;;-1:-1:-1;45555:12:0;;-1:-1:-1;45602:17:0;;-1:-1:-1;45653:16:0;-1:-1:-1;45698:10:0;-1:-1:-1;45733:14:0;;45729:271;;;45837:13;;45824:9;45795:39;;;;:28;:39;;;;;;:55;;45837:13;45795:55;:::i;:::-;45776:15;:74;;45768:134;;;;-1:-1:-1;;;45768:134:0;;23346:2:1;45768:134:0;;;23328:21:1;23385:2;23365:18;;;23358:30;-1:-1:-1;;;23404:18:1;;;23397:52;23466:18;;45768:134:0;23144:346:1;45768:134:0;45950:9;45921:39;;;;:28;:39;;;;;45963:15;45921:57;;45464:1411;;;46027:8;46023:852;;;46069:13;;46112:11;;46158:16;;46208:15;;46252:9;;46286:14;;46069:13;;-1:-1:-1;46112:11:0;;-1:-1:-1;46158:16:0;;-1:-1:-1;46208:15:0;-1:-1:-1;46252:9:0;-1:-1:-1;46286:14:0;;46282:369;;;46344:11;;:15;;46358:1;46344:15;:::i;:::-;46329:12;:30;46321:60;;;;-1:-1:-1;;;46321:60:0;;23697:2:1;46321:60:0;;;23679:21:1;23736:2;23716:18;;;23709:30;-1:-1:-1;;;23755:18:1;;;23748:48;23813:18;;46321:60:0;23495:342:1;46321:60:0;46423:13;;46408:11;:28;;46400:64;;;;-1:-1:-1;;;46400:64:0;;24044:2:1;46400:64:0;;;24026:21:1;24083:2;24063:18;;;24056:30;24122:26;24102:18;;;24095:54;24166:18;;46400:64:0;23842:348:1;46400:64:0;46516:9;46491:35;;;;:24;:35;;;;;;46530:12;46491:51;;46483:83;;;;-1:-1:-1;;;46483:83:0;;24397:2:1;46483:83:0;;;24379:21:1;24436:2;24416:18;;;24409:30;-1:-1:-1;;;24455:18:1;;;24448:50;24515:18;;46483:83:0;24195:344:1;46483:83:0;46610:9;46585:35;;;;:24;:35;;;;;46623:12;46585:50;;46282:369;46679:32;46714:13;46724:2;46714:9;:13::i;:::-;46787:9;;46679:48;;-1:-1:-1;46750:33:0;46777:6;46679:48;46750:33;:::i;:::-;:46;;46742:117;;;;-1:-1:-1;;;46742:117:0;;24746:2:1;46742:117:0;;;24728:21:1;24785:2;24765:18;;;24758:30;24824:34;24804:18;;;24797:62;-1:-1:-1;;;24875:18:1;;;24868:34;24919:19;;46742:117:0;24544:400:1;46742:117:0;46037:838;46023:852;46891:17;46911:72;46975:7;46944:28;46959:13;46944:12;:28;:::i;:::-;:38;;;;:::i;:::-;46911:10;;:32;:72::i;:::-;46891:92;;47000:28;47031:24;47049:4;47031:9;:24::i;:::-;47111:18;;47000:55;;-1:-1:-1;47087:42:0;;;;;;;47150:43;;-1:-1:-1;;;;;;47162:31:0;;;;;;:25;:31;;;;;;;;47161:32;47150:43;47146:1251;;;47214:8;:15;;-1:-1:-1;;;;47214:15:0;-1:-1:-1;;;47214:15:0;;;47254:21;;47214:15;47254:21;:41;;;;;47294:1;47279:12;:16;47254:41;:61;;;;;47314:1;47299:12;;:16;47254:61;47250:903;;;47340:20;47363:25;47377:10;;47363:9;;:13;;:25;;;;:::i;:::-;47340:48;;47411:24;47438:105;47530:12;47438:61;47489:9;;47438:20;:50;;:61;;;;:::i;:105::-;47411:132;;47566:22;47591:106;47684:12;47591:62;47642:10;;47591:20;:50;;:62;;;;:::i;:106::-;47566:131;;47722:21;47746:104;47837:12;;47746:60;47793:12;47746:16;:46;;:60;;;;:::i;:104::-;47722:128;;47875:22;47900:103;47989:13;;47900:58;47945:12;47900:14;:44;;:58;;;;:::i;:103::-;47875:128;-1:-1:-1;48028:18:0;48049:33;47875:128;48068:13;48049:18;:33::i;:::-;48028:54;;48107:26;48122:10;48107:14;:26::i;:::-;47317:836;;;;;;47250:903;48173:24;48200;48218:4;48200:9;:24::i;:::-;48173:51;;48243:38;48264:16;48243:20;:38::i;:::-;-1:-1:-1;48312:1:0;48300:9;:13;;;48332:10;:14;48365:8;:16;;-1:-1:-1;;;;48365:16:0;;;47146:1251;48413:12;48428:30;48454:3;48428:21;:6;48439:9;48428:10;:21::i;:30::-;48413:45;-1:-1:-1;48473:18:0;48512:12;;48508:202;;48577:3;48554:20;:6;48565:8;48554:10;:20::i;:::-;:26;;;;:::i;:::-;48541:39;;48595;48611:4;48617;;;;;;;;;-1:-1:-1;;;;;48617:4:0;48623:10;48595:15;:39::i;:::-;48664:12;;:28;;48681:10;48664:16;:28::i;:::-;48649:12;:43;48508:202;48735:29;48746:17;48753:10;48746:4;:17;:::i;:::-;48735:6;;:10;:29::i;:::-;48726:38;;48785:9;48781:155;;;48828:10;;:20;;48843:4;48828:14;:20::i;:::-;48815:10;:33;48781:155;;;48901:9;;:19;;48915:4;48901:13;:19::i;:::-;48889:9;:31;48781:155;48952:42;48968:4;48982;48989;48952:15;:42::i;:::-;49025:16;;49062:15;;:28;;-1:-1:-1;;;;;;49062:28:0;;;;;2801:25:1;;;-1:-1:-1;;;;;49062:15:0;;;;:23;;2774:18:1;;49062:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;49062:28:0;;;;;;;;-1:-1:-1;;49062:28:0;;;;;;;;;;;;:::i;:::-;;;49058:452;;;49254:231;;;13579:25:1;;;13635:2;13620:18;;13613:34;;;13663:18;;;13656:34;;;13721:2;13706:18;;13699:34;;;49457:9:0;;49404:4;;49254:231;;13566:3:1;13551:19;49254:231:0;;;;;;;49091:410;;;49058:452;44449:5072;;;;;;;;44352:5169;49533:33;49549:4;49555:2;49559:6;49533:15;:33::i;:::-;49577:15;;-1:-1:-1;;;;;49577:15:0;:26;49604:4;49610:23;49604:4;49610:17;:23::i;:::-;49577:57;;-1:-1:-1;;;;;;49577:57:0;;;;;;;-1:-1:-1;;;;;11810:32:1;;;49577:57:0;;;11792:51:1;11859:18;;;11852:34;11765:18;;49577:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49645:15:0;;-1:-1:-1;;;;;49645:15:0;;-1:-1:-1;49645:26:0;;-1:-1:-1;49672:2:0;49676:21;49672:2;49676:17;:21::i;:::-;49645:53;;-1:-1:-1;;;;;;49645:53:0;;;;;;;-1:-1:-1;;;;;11810:32:1;;;49645:53:0;;;11792:51:1;11859:18;;;11852:34;11765:18;;49645:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49735:15:0;;-1:-1:-1;;;;;49719:32:0;;;49735:15;;49719:32;;;;-1:-1:-1;49719:32:0;-1:-1:-1;49719:68:0;;-1:-1:-1;;;;;;49756:31:0;;;;;;:25;:31;;;;;;;;49755:32;49719:68;:88;;;;-1:-1:-1;49797:10:0;;-1:-1:-1;;;;;49791:16:0;;;49797:10;;;;;49791:16;49719:88;49715:179;;;49838:10;;49824:58;;-1:-1:-1;;;49824:58:0;;;;;25123:25:1;;;-1:-1:-1;;;;;25184:32:1;;;25164:18;;;25157:60;49838:10:0;;;;;;;;49824:44;;25096:18:1;;49824:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43552:6353;;;;;43439:6466;;;:::o;11766:226::-;11886:7;11922:12;11914:6;;;;11906:29;;;;-1:-1:-1;;;11906:29:0;;;;;;;;:::i;:::-;-1:-1:-1;11946:9:0;11958:5;11962:1;11958;:5;:::i;:::-;11946:17;11766:226;-1:-1:-1;;;;;11766:226:0:o;38011:280::-;-1:-1:-1;;;;;38094:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;38094:39:0;;;;;;;;;;;;38146:80;;38172:15;;:42;;-1:-1:-1;;;38172:42:0;;-1:-1:-1;;;;;178:32:1;;;38172:42:0;;;160:51:1;38172:15:0;;;;:36;;133:18:1;;38172:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38146:80;38243:40;;;;;;-1:-1:-1;;;;;38243:40:0;;;;;;;;38011:280;;:::o;49913:289::-;50019:14;;49979:7;;-1:-1:-1;;;50019:14:0;;;;:175;;50176:18;50186:7;50176:9;:18::i;:::-;50019:175;;;-1:-1:-1;;;;;50076:21:0;;;;;;:12;:21;;;;;;50053:103;;50134:3;;50053:54;;50076:30;;50134:3;50076:25;:30::i;:::-;50053:18;50063:7;50053:9;:18::i;12398:312::-;12518:7;12553:12;12546:5;12538:28;;;;-1:-1:-1;;;12538:28:0;;;;;;;;:::i;:::-;-1:-1:-1;12577:9:0;12589:5;12593:1;12589;:5;:::i;50698:499::-;50788:16;;;50802:1;50788:16;;;;;;;;50764:21;;50788:16;;;;;;;;;;-1:-1:-1;50788:16:0;50764:40;;50833:4;50815;50820:1;50815:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50815:23:0;;;:7;;;;;;;;;;:23;;;;50859:15;;:22;;;-1:-1:-1;;;50859:22:0;;;;:15;;;;;:20;;:22;;;;;50815:7;;50859:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50849:4;50854:1;50849:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50849:32:0;;;:7;;;;;;;;;:32;50924:15;;50892:62;;50909:4;;50924:15;50942:11;50892:8;:62::i;:::-;50965:15;;:224;;-1:-1:-1;;;50965:224:0;;-1:-1:-1;;;;;50965:15:0;;;;:66;;:224;;51046:11;;50965:15;;51116:4;;51143;;51163:15;;50965:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50753:444;50698:499;:::o;33167:327::-;-1:-1:-1;;;;;33290:34:0;;33264:4;33290:34;;;:25;:34;;;;;;;;:76;;;;-1:-1:-1;33350:15:0;;-1:-1:-1;;;;;33328:38:0;;;33350:15;;33328:38;;33290:76;33286:90;;;-1:-1:-1;33375:1:0;33368:8;;33286:90;-1:-1:-1;;;;;33405:37:0;;;;;;:25;:37;;;;;;;;33401:51;;;-1:-1:-1;33451:1:0;33444:8;;33401:51;-1:-1:-1;33485:1:0;33167:327;;;;:::o;50210:480::-;50269:12;50284:13;:6;50295:1;50284:10;:13::i;:::-;50269:28;-1:-1:-1;50308:17:0;50328:16;:6;50269:28;50328:10;:16::i;:::-;50308:36;-1:-1:-1;50380:21:0;50412:22;50429:4;50412:16;:22::i;:::-;50515:18;50536:41;:21;50562:14;50536:25;:41::i;:::-;50515:62;;50588:35;50601:9;50612:10;50588:12;:35::i;:::-;50639:43;;;26545:25:1;;;26601:2;26586:18;;26579:34;;;26629:18;;;26622:34;;;50639:43:0;;26533:2:1;26518:18;50639:43:0;;;;;;;50258:432;;;;50210:480;:::o;51867:513::-;52047:15;;52015:62;;52032:4;;-1:-1:-1;;;;;52047:15:0;52065:11;52015:8;:62::i;:::-;52120:15;;-1:-1:-1;;;;;52120:15:0;:31;52159:9;52192:4;52212:11;52120:15;;52324:7;13472:6;;-1:-1:-1;;;;;13472:6:0;;13407:79;52324:7;52120:252;;;;;;-1:-1:-1;;;;;;52120:252:0;;;-1:-1:-1;;;;;27026:15:1;;;52120:252:0;;;27008:34:1;27058:18;;;27051:34;;;;27101:18;;;27094:34;;;;27144:18;;;27137:34;27208:15;;;27187:19;;;27180:44;52346:15:0;27240:19:1;;;27233:35;26942:19;;52120:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;222:180:1:-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:597::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;845:6;842:1;839:13;836:91;;;915:1;910:2;901:6;890:9;886:22;882:31;875:42;836:91;-1:-1:-1;988:2:1;967:15;-1:-1:-1;;963:29:1;948:45;;;;995:2;944:54;;407:597;-1:-1:-1;;;407:597:1:o;1009:131::-;-1:-1:-1;;;;;1084:31:1;;1074:42;;1064:70;;1130:1;1127;1120:12;1145:118;1231:5;1224:13;1217:21;1210:5;1207:32;1197:60;;1253:1;1250;1243:12;1268:382;1333:6;1341;1394:2;1382:9;1373:7;1369:23;1365:32;1362:52;;;1410:1;1407;1400:12;1362:52;1449:9;1436:23;1468:31;1493:5;1468:31;:::i;:::-;1518:5;-1:-1:-1;1575:2:1;1560:18;;1547:32;1588:30;1547:32;1588:30;:::i;:::-;1637:7;1627:17;;;1268:382;;;;;:::o;1655:315::-;1723:6;1731;1784:2;1772:9;1763:7;1759:23;1755:32;1752:52;;;1800:1;1797;1790:12;1752:52;1839:9;1826:23;1858:31;1883:5;1858:31;:::i;:::-;1908:5;1960:2;1945:18;;;;1932:32;;-1:-1:-1;;;1655:315:1:o;2167:248::-;2235:6;2243;2296:2;2284:9;2275:7;2271:23;2267:32;2264:52;;;2312:1;2309;2302:12;2264:52;-1:-1:-1;;2335:23:1;;;2405:2;2390:18;;;2377:32;;-1:-1:-1;2167:248:1:o;2837:247::-;2896:6;2949:2;2937:9;2928:7;2924:23;2920:32;2917:52;;;2965:1;2962;2955:12;2917:52;3004:9;2991:23;3023:31;3048:5;3023:31;:::i;3089:127::-;3150:10;3145:3;3141:20;3138:1;3131:31;3181:4;3178:1;3171:15;3205:4;3202:1;3195:15;3221:275;3292:2;3286:9;3357:2;3338:13;;-1:-1:-1;;3334:27:1;3322:40;;3392:18;3377:34;;3413:22;;;3374:62;3371:88;;;3439:18;;:::i;:::-;3475:2;3468:22;3221:275;;-1:-1:-1;3221:275:1:o;3501:183::-;3561:4;3594:18;3586:6;3583:30;3580:56;;;3616:18;;:::i;:::-;-1:-1:-1;3661:1:1;3657:14;3673:4;3653:25;;3501:183::o;3689:662::-;3743:5;3796:3;3789:4;3781:6;3777:17;3773:27;3763:55;;3814:1;3811;3804:12;3763:55;3850:6;3837:20;3876:4;3900:60;3916:43;3956:2;3916:43;:::i;:::-;3900:60;:::i;:::-;3994:15;;;4080:1;4076:10;;;;4064:23;;4060:32;;;4025:12;;;;4104:15;;;4101:35;;;4132:1;4129;4122:12;4101:35;4168:2;4160:6;4156:15;4180:142;4196:6;4191:3;4188:15;4180:142;;;4262:17;;4250:30;;4300:12;;;;4213;;4180:142;;;-1:-1:-1;4340:5:1;3689:662;-1:-1:-1;;;;;;3689:662:1:o;4356:1215::-;4474:6;4482;4535:2;4523:9;4514:7;4510:23;4506:32;4503:52;;;4551:1;4548;4541:12;4503:52;4591:9;4578:23;4620:18;4661:2;4653:6;4650:14;4647:34;;;4677:1;4674;4667:12;4647:34;4715:6;4704:9;4700:22;4690:32;;4760:7;4753:4;4749:2;4745:13;4741:27;4731:55;;4782:1;4779;4772:12;4731:55;4818:2;4805:16;4840:4;4864:60;4880:43;4920:2;4880:43;:::i;4864:60::-;4958:15;;;5040:1;5036:10;;;;5028:19;;5024:28;;;4989:12;;;;5064:19;;;5061:39;;;5096:1;5093;5086:12;5061:39;5120:11;;;;5140:217;5156:6;5151:3;5148:15;5140:217;;;5236:3;5223:17;5253:31;5278:5;5253:31;:::i;:::-;5297:18;;5173:12;;;;5335;;;;5140:217;;;5376:5;-1:-1:-1;;5419:18:1;;5406:32;;-1:-1:-1;;5450:16:1;;;5447:36;;;5479:1;5476;5469:12;5447:36;;5502:63;5557:7;5546:8;5535:9;5531:24;5502:63;:::i;:::-;5492:73;;;4356:1215;;;;;:::o;5576:456::-;5653:6;5661;5669;5722:2;5710:9;5701:7;5697:23;5693:32;5690:52;;;5738:1;5735;5728:12;5690:52;5777:9;5764:23;5796:31;5821:5;5796:31;:::i;:::-;5846:5;-1:-1:-1;5903:2:1;5888:18;;5875:32;5916:33;5875:32;5916:33;:::i;:::-;5576:456;;5968:7;;-1:-1:-1;;;6022:2:1;6007:18;;;;5994:32;;5576:456::o;6471:241::-;6527:6;6580:2;6568:9;6559:7;6555:23;6551:32;6548:52;;;6596:1;6593;6586:12;6548:52;6635:9;6622:23;6654:28;6676:5;6654:28;:::i;6941:799::-;7081:6;7089;7097;7105;7113;7121;7129;7137;7145;7153;7206:3;7194:9;7185:7;7181:23;7177:33;7174:53;;;7223:1;7220;7213:12;7174:53;-1:-1:-1;;7246:23:1;;;7316:2;7301:18;;7288:32;;-1:-1:-1;7367:2:1;7352:18;;7339:32;;7418:2;7403:18;;7390:32;;-1:-1:-1;7469:3:1;7454:19;;7441:33;;-1:-1:-1;7521:3:1;7506:19;;7493:33;;-1:-1:-1;7573:3:1;7558:19;;7545:33;;-1:-1:-1;7625:3:1;7610:19;;7597:33;;-1:-1:-1;7677:3:1;7662:19;;7649:33;;-1:-1:-1;7729:3:1;7714:19;7701:33;;-1:-1:-1;6941:799:1;-1:-1:-1;6941:799:1:o;8560:388::-;8628:6;8636;8689:2;8677:9;8668:7;8664:23;8660:32;8657:52;;;8705:1;8702;8695:12;8657:52;8744:9;8731:23;8763:31;8788:5;8763:31;:::i;:::-;8813:5;-1:-1:-1;8870:2:1;8855:18;;8842:32;8883:33;8842:32;8883:33;:::i;8953:356::-;9155:2;9137:21;;;9174:18;;;9167:30;9233:34;9228:2;9213:18;;9206:62;9300:2;9285:18;;8953:356::o;9314:127::-;9375:10;9370:3;9366:20;9363:1;9356:31;9406:4;9403:1;9396:15;9430:4;9427:1;9420:15;9446:168;9486:7;9552:1;9548;9544:6;9540:14;9537:1;9534:21;9529:1;9522:9;9515:17;9511:45;9508:71;;;9559:18;;:::i;:::-;-1:-1:-1;9599:9:1;;9446:168::o;9619:380::-;9698:1;9694:12;;;;9741;;;9762:61;;9816:4;9808:6;9804:17;9794:27;;9762:61;9869:2;9861:6;9858:14;9838:18;9835:38;9832:161;;9915:10;9910:3;9906:20;9903:1;9896:31;9950:4;9947:1;9940:15;9978:4;9975:1;9968:15;9832:161;;9619:380;;;:::o;11478:127::-;11539:10;11534:3;11530:20;11527:1;11520:31;11570:4;11567:1;11560:15;11594:4;11591:1;11584:15;11897:135;11936:3;11957:17;;;11954:43;;11977:18;;:::i;:::-;-1:-1:-1;12024:1:1;12013:13;;11897:135::o;12037:251::-;12107:6;12160:2;12148:9;12139:7;12135:23;12131:32;12128:52;;;12176:1;12173;12166:12;12128:52;12208:9;12202:16;12227:31;12252:5;12227:31;:::i;12293:184::-;12363:6;12416:2;12404:9;12395:7;12391:23;12387:32;12384:52;;;12432:1;12429;12422:12;12384:52;-1:-1:-1;12455:16:1;;12293:184;-1:-1:-1;12293:184:1:o;12787:245::-;12854:6;12907:2;12895:9;12886:7;12882:23;12878:32;12875:52;;;12923:1;12920;12913:12;12875:52;12955:9;12949:16;12974:28;12996:5;12974:28;:::i;13037:306::-;13125:6;13133;13141;13194:2;13182:9;13173:7;13169:23;13165:32;13162:52;;;13210:1;13207;13200:12;13162:52;13239:9;13233:16;13223:26;;13289:2;13278:9;13274:18;13268:25;13258:35;;13333:2;13322:9;13318:18;13312:25;13302:35;;13037:306;;;;;:::o;17016:557::-;17129:6;17137;17145;17153;17161;17169;17222:3;17210:9;17201:7;17197:23;17193:33;17190:53;;;17239:1;17236;17229:12;17190:53;17271:9;17265:16;17290:31;17315:5;17290:31;:::i;:::-;17385:2;17370:18;;17364:25;17429:2;17414:18;;17408:25;17473:2;17458:18;;17452:25;17517:3;17502:19;;17496:26;17562:3;17547:19;;;17541:26;17340:5;;17364:25;;-1:-1:-1;17408:25:1;;17452;;-1:-1:-1;17496:26:1;-1:-1:-1;17541:26:1;;-1:-1:-1;17016:557:1;-1:-1:-1;;;17016:557:1:o;18392:217::-;18432:1;18458;18448:132;;18502:10;18497:3;18493:20;18490:1;18483:31;18537:4;18534:1;18527:15;18565:4;18562:1;18555:15;18448:132;-1:-1:-1;18594:9:1;;18392:217::o;19025:128::-;19065:3;19096:1;19092:6;19089:1;19086:13;19083:39;;;19102:18;;:::i;:::-;-1:-1:-1;19138:9:1;;19025:128::o;21268:401::-;21470:2;21452:21;;;21509:2;21489:18;;;21482:30;21548:34;21543:2;21528:18;;21521:62;-1:-1:-1;;;21614:2:1;21599:18;;21592:35;21659:3;21644:19;;21268:401::o;21674:399::-;21876:2;21858:21;;;21915:2;21895:18;;;21888:30;21954:34;21949:2;21934:18;;21927:62;-1:-1:-1;;;22020:2:1;22005:18;;21998:33;22063:3;22048:19;;21674:399::o;25228:125::-;25268:4;25296:1;25293;25290:8;25287:34;;;25301:18;;:::i;:::-;-1:-1:-1;25338:9:1;;25228:125::o;25358:980::-;25620:4;25668:3;25657:9;25653:19;25699:6;25688:9;25681:25;25725:2;25763:6;25758:2;25747:9;25743:18;25736:34;25806:3;25801:2;25790:9;25786:18;25779:31;25830:6;25865;25859:13;25896:6;25888;25881:22;25934:3;25923:9;25919:19;25912:26;;25973:2;25965:6;25961:15;25947:29;;25994:1;26004:195;26018:6;26015:1;26012:13;26004:195;;;26083:13;;-1:-1:-1;;;;;26079:39:1;26067:52;;26174:15;;;;26139:12;;;;26115:1;26033:9;26004:195;;;-1:-1:-1;;;;;;;26255:32:1;;;;26250:2;26235:18;;26228:60;-1:-1:-1;;;26319:3:1;26304:19;26297:35;26216:3;25358:980;-1:-1:-1;;;25358:980:1:o
Metadata Hash
19521417010212d4912c05c8af83fe33a856bf71923878aba76643fef7da5d3c
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.