More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 620 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19162395 | 241 days ago | IN | 0 ETH | 0.00074845 | ||||
Exclude From Div... | 19162392 | 241 days ago | IN | 0 ETH | 0.00146174 | ||||
Approve | 19162313 | 241 days ago | IN | 0 ETH | 0.00068353 | ||||
Set Max Wallet A... | 19162307 | 241 days ago | IN | 0 ETH | 0.00049072 | ||||
Set Max Transact... | 19162307 | 241 days ago | IN | 0 ETH | 0.00048966 | ||||
Allow Trading Wh... | 19162304 | 241 days ago | IN | 0 ETH | 0.00077834 | ||||
Claim ETH Overfl... | 19162303 | 241 days ago | IN | 0 ETH | 0.00058453 | ||||
Transfer Ownersh... | 19162288 | 241 days ago | IN | 0 ETH | 0.00047487 | ||||
Approve | 18061761 | 396 days ago | IN | 0 ETH | 0.00037211 | ||||
Approve | 18061760 | 396 days ago | IN | 0 ETH | 0.00038072 | ||||
Deactivate Tradi... | 17831417 | 428 days ago | IN | 0 ETH | 0.00043482 | ||||
Approve | 17610714 | 459 days ago | IN | 0 ETH | 0.00066009 | ||||
Approve | 17594831 | 461 days ago | IN | 0 ETH | 0.00111832 | ||||
Approve | 17594790 | 461 days ago | IN | 0 ETH | 0.00101854 | ||||
Approve | 17594722 | 461 days ago | IN | 0 ETH | 0.00110561 | ||||
Approve | 17594156 | 461 days ago | IN | 0 ETH | 0.00130394 | ||||
Approve | 17593264 | 461 days ago | IN | 0 ETH | 0.00102521 | ||||
Approve | 17593262 | 461 days ago | IN | 0 ETH | 0.00182719 | ||||
Approve | 17590555 | 462 days ago | IN | 0 ETH | 0.00096634 | ||||
Approve | 17590514 | 462 days ago | IN | 0 ETH | 0.00109218 | ||||
Transfer | 17590509 | 462 days ago | IN | 0 ETH | 0.00398497 | ||||
Transfer | 17590499 | 462 days ago | IN | 0 ETH | 0.00061109 | ||||
Transfer | 17590488 | 462 days ago | IN | 0 ETH | 0.00063833 | ||||
Transfer | 17590478 | 462 days ago | IN | 0 ETH | 0.00486857 | ||||
Approve | 17590464 | 462 days ago | IN | 0 ETH | 0.00102265 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
19162303 | 241 days ago | 0.07397584 ETH | ||||
17610716 | 459 days ago | 0.00407859 ETH | ||||
17610716 | 459 days ago | 0.00045317 ETH | ||||
17610716 | 459 days ago | 0.0018127 ETH | ||||
17610716 | 459 days ago | 0.00634448 ETH | ||||
17594833 | 461 days ago | 0.00643416 ETH | ||||
17594833 | 461 days ago | 0.0007149 ETH | ||||
17594833 | 461 days ago | 0.00285963 ETH | ||||
17594833 | 461 days ago | 0.0100087 ETH | ||||
17594793 | 461 days ago | 0.0069849 ETH | ||||
17594793 | 461 days ago | 0.0007761 ETH | ||||
17594793 | 461 days ago | 0.0031044 ETH | ||||
17594793 | 461 days ago | 0.01086541 ETH | ||||
17594724 | 461 days ago | 0.00758201 ETH | ||||
17594724 | 461 days ago | 0.00084244 ETH | ||||
17594724 | 461 days ago | 0.00336978 ETH | ||||
17594724 | 461 days ago | 0.01179425 ETH | ||||
17594162 | 461 days ago | 0.00762884 ETH | ||||
17594162 | 461 days ago | 0.00084764 ETH | ||||
17594162 | 461 days ago | 0.00339059 ETH | ||||
17594162 | 461 days ago | 0.01186709 ETH | ||||
17593273 | 461 days ago | 0.00638826 ETH | ||||
17593273 | 461 days ago | 0.0007098 ETH | ||||
17593273 | 461 days ago | 0.00283922 ETH | ||||
17593273 | 461 days ago | 0.0099373 ETH |
Loading...
Loading
Contract Name:
MivieToken
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-20 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns(uint256); function distributeDividends() external payable; function withdrawDividend() external; event DividendsDistributed( address indexed from, uint256 weiAmount ); event DividendWithdrawn( address indexed to, uint256 weiAmount ); } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns(uint256); function withdrawnDividendOf(address _owner) external view returns(uint256); function accumulativeDividendOf(address _owner) external view returns(uint256); } library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } library IterableMapping { struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int) { if(!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 public totalDividendsDistributed; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable { distributeDividends(); } function distributeDividends() public override onlyOwner payable { 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 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); } } } contract MivieToken is ERC20, Ownable { IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "Mivie Token"; string private constant _symbol = "MET"; uint8 private constant _decimals = 18; MivieDividendTracker public dividendTracker; bool public isTradingEnabled; // initialSupply uint256 constant initialSupply = 100000000 * (10**18); // max wallet is 2% of initialSupply uint256 public maxWalletAmount = initialSupply * 200 / 10000; // max tx is 100% initialSupply uint256 public maxTxAmount = initialSupply; bool private _swapping; uint256 public minimumTokensBeforeSwap = initialSupply * 25 / 100000; address public liquidityWallet; address public operationsWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 operationsFeeOnBuy; uint8 operationsFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod('default',0,0,1,1,2,2,4,4); uint256 public launchTokens; uint256 private _launchStartTimestamp; uint256 private _launchBlockNumber; bool public _launchTokensClaimed; mapping (address => bool) private _isBlocked; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMaxWalletLimit; mapping (address => bool) private _isExcludedFromMaxTransactionLimit; mapping (address => bool) public automatedMarketMakerPairs; mapping (address => bool) private _feeOnSelectedWalletTransfers; mapping (address => bool) private _isAllowedToTradeWhenDisabled; uint8 private _liquidityFee; uint8 private _operationsFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event BlockedAccountChange(address indexed holder, bool indexed status); event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange(string indexed walletIdentifier, address indexed newWallet, address indexed oldWallet); event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 operationsFee, uint8 holdersFee); event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period); event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransactionChange(address indexed account, bool isExcluded); event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue); event DividendsSent(uint256 tokensSwapped); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event ClaimOverflow(address token, uint256 amount); event TradingStatusChange(bool indexed newValue, bool indexed oldValue); event FeesApplied(uint8 liquidityFee, uint8 operationsFee, uint8 holdersFee, uint8 totalFee); constructor() ERC20(_name, _symbol) { liquidityWallet = owner(); operationsWallet = owner(); dividendTracker = new MivieDividendTracker(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(dividendTracker)] = true; dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(address(0x000000000000000000000000000000000000dEaD)); dividendTracker.excludeFromDividends(owner()); dividendTracker.excludeFromDividends(address(_uniswapV2Router)); _isAllowedToTradeWhenDisabled[owner()] = true; _isAllowedToTradeWhenDisabled[address(this)] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(dividendTracker)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[address(dividendTracker)] = true; _mint(owner(), initialSupply); } receive() external payable {} // Setters function activateTrading() external onlyOwner { isTradingEnabled = true; if (_launchStartTimestamp == 0) { _launchStartTimestamp = block.timestamp; _launchBlockNumber = block.number; } emit TradingStatusChange(true, false); } function deactivateTrading() external onlyOwner { isTradingEnabled = false; emit TradingStatusChange(false, true); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "Mivie: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; if(value) { dividendTracker.excludeFromDividends(pair); } emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function blockAccount(address account) external onlyOwner { require(!_isBlocked[account], "Mivie: Account is already blocked"); if (_launchStartTimestamp > 0) { require((block.timestamp - _launchStartTimestamp) < 172800, "Mivie: Time to block accounts has expired"); } _isBlocked[account] = true; emit BlockedAccountChange(account, true); } function unblockAccount(address account) external onlyOwner { require(_isBlocked[account], "Mivie: Account is not blcoked"); _isBlocked[account] = false; emit BlockedAccountChange(account, false); } function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner { require(_feeOnSelectedWalletTransfers[account] != value, "Mivie: The selected wallet is already set to the value "); _feeOnSelectedWalletTransfers[account] = value; emit FeeOnSelectedWalletTransfersChange(account, value); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "Mivie: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromDividends(address account) external onlyOwner { dividendTracker.excludeFromDividends(account); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWalletLimit[account] != excluded, "Mivie: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxTransactionLimit[account] != excluded, "Mivie: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransactionChange(account, excluded); } function setWallets(address newLiquidityWallet, address newOperationsWallet) external onlyOwner { if(liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "Mivie: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(operationsWallet != newOperationsWallet) { require(newOperationsWallet != address(0), "Mivie: The operationsWallet cannot be 0"); emit WalletChange('operationsWallet', newOperationsWallet, operationsWallet); operationsWallet = newOperationsWallet; } } // Base Fees function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _operationsFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner { _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _operationsFeeOnBuy, _holdersFeeOnBuy); emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _operationsFeeOnBuy, _holdersFeeOnBuy); } function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _operationsFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner { _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _operationsFeeOnSell, _holdersFeeOnSell); emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _operationsFeeOnSell, _holdersFeeOnSell); } function setUniswapRouter(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "Mivie: The router already has that address"); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "Mivie: Cannot update maxWalletAmount to same value"); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMaxTransactionAmount(uint256 newValue) external onlyOwner { require(newValue != maxTxAmount, "Mivie: Cannot update maxTxAmount to same value"); emit MaxTransactionAmountChange(newValue, maxTxAmount); maxTxAmount = newValue; } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "Mivie: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function claimLaunchTokens() external onlyOwner { require(_launchStartTimestamp > 0, "Mivie: Launch must have occurred"); require(!_launchTokensClaimed, "Mivie: Launch tokens have already been claimed"); require(block.number - _launchBlockNumber > 5, "Mivie: Only claim launch tokens after launch"); uint256 tokenBalance = balanceOf(address(this)); _launchTokensClaimed = true; require(launchTokens <= tokenBalance, "Mivie: A swap and liquify has already occurred"); uint256 amount = launchTokens; launchTokens = 0; (bool success) = IERC20(address(this)).transfer(owner(), amount); if (success){ emit ClaimOverflow(address(this), amount); } } function claimETHOverflow(uint256 amount) external onlyOwner { require(amount < address(this).balance, "Mivie: Cannot send more than contract balance"); (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimOverflow(uniswapV2Router.WETH(), amount); } } // Getters function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function getNumberOfDividendTokenHolders() external view returns(uint256) { return dividendTracker.getNumberOfTokenHolders(); } function getBaseBuyFees() external view returns (uint8, uint8, uint8){ return (_base.liquidityFeeOnBuy, _base.operationsFeeOnBuy, _base.holdersFeeOnBuy); } function getBaseSellFees() external view returns (uint8, uint8, uint8){ return (_base.liquidityFeeOnSell, _base.operationsFeeOnSell, _base.holdersFeeOnSell); } // Main function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "Mivie: Trading is currently disabled."); require(!_isBlocked[to], "Mivie: Account is blocked"); require(!_isBlocked[from], "Mivie: Account is blocked"); if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "Mivie: Expected wallet amount exceeds the maxWalletAmount."); } if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "Mivie: Transfer amount exceeds the maxTxAmount."); } } _adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], from, to); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } if (takeFee && _totalFee > 0) { uint256 fee = amount * _totalFee / 100; amount = amount - fee; if (_launchStartTimestamp > 0 && (block.number - _launchBlockNumber <= 5)) { launchTokens += fee; } super._transfer(from, address(this), fee); } super._transfer(from, to, amount); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp, address from, address to) private { _liquidityFee = 0; _operationsFee = 0; _holdersFee = 0; if (isBuyFromLp) { if ((block.number - _launchBlockNumber) <= 5) { _liquidityFee = 100; } else { _liquidityFee = _base.liquidityFeeOnBuy; _operationsFee = _base.operationsFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _operationsFee = _base.operationsFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) { _liquidityFee = _base.liquidityFeeOnSell; _operationsFee = _base.operationsFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } _totalFee = _liquidityFee + _operationsFee + _holdersFee; emit FeesApplied(_liquidityFee, _operationsFee, _holdersFee, _totalFee); } function _setCustomSellTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _operationsFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.operationsFeeOnSell != _operationsFeeOnSell) { emit CustomTaxPeriodChange(_operationsFeeOnSell, map.operationsFeeOnSell, 'operationsFeeOnSell', map.periodName); map.operationsFeeOnSell = _operationsFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _operationsFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.operationsFeeOnBuy != _operationsFeeOnBuy) { emit CustomTaxPeriodChange(_operationsFeeOnBuy, map.operationsFeeOnBuy, 'operationsFeeOnBuy', map.periodName); map.operationsFeeOnBuy = _operationsFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; uint8 totalFeePrior = _totalFee; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwap = contractBalance - amountToLiquify; _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - (_liquidityFee / 2); uint256 amountETHLiquidity = ETHBalanceAfterSwap * _liquidityFee / totalETHFee / 2; uint256 amountETHOperations = ETHBalanceAfterSwap * _operationsFee / totalETHFee; uint256 amountETHHolders = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHOperations); Address.sendValue(payable(operationsWallet),amountETHOperations); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify(amountToSwap, amountETHLiquidity, amountToLiquify); } (bool dividendSuccess,) = address(dividendTracker).call{value: amountETHHolders}(""); if(dividendSuccess) { emit DividendsSent(amountETHHolders); } _totalFee = totalFeePrior; } function _swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp ); } } contract MivieDividendTracker is DividendPayingToken { 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 => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor() DividendPayingToken("Mivie_Dividend_Tracker", "Mivie_Dividend_Tracker") { claimWait = 3600; minimumTokenBalanceForDividends = 0 * (10**18); } function _transfer(address, address, uint256) internal pure override { require(false, "Mivie_Dividend_Tracker: No transfers allowed"); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function setTokenBalanceForDividends(uint256 newValue) external onlyOwner { require(minimumTokenBalanceForDividends != newValue, "Mivie_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'."); minimumTokenBalanceForDividends = newValue; } function getNumberOfTokenHolders() external view returns(uint256) { return tokenHoldersMap.keys.length; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if(excludedFromDividends[account]) { return; } if(newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if(amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransactionChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"operationsFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"walletIdentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"_launchTokensClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLaunchTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract MivieDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_operationsFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newOperationsWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526127106200001f6a52b7d2dcc80cd2e400000060c862000adb565b6200002b919062000af5565b6008556a52b7d2dcc80cd2e4000000600955620186a06a52b7d2dcc80cd2e400000060196200005b919062000adb565b62000067919062000af5565b600b55604080516101208101825266191959985d5b1d60ca1b81526000602082018190529181018290526001606082018190526080820152600260a0820181905260c0820152600460e0820181905261010090910152600e80546001600160c01b03191666191959985d5b1d60821b179055600f55601080546504040202010165ffffffffffff199091161790553480156200010257600080fd5b506040518060400160405280600b81526020016a26b4bb34b2902a37b5b2b760a91b8152506040518060400160405280600381526020016213515560ea1b815250816003908162000154919062000bbc565b50600462000163828262000bbc565b505050600062000178620007cf60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600554600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054909216179055604051620002019062000ab7565b604051809103906000f0801580156200021e573d6000803e3d6000fd5b50600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c5919062000c88565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000339919062000c88565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000387573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ad919062000c88565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003e1816001620007e2565b600160166000620003fa6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260169093528183208054851660019081179091556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b1580156200049057600080fd5b505af1158015620004a5573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620004ef57600080fd5b505af115801562000504573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200055057600080fd5b505af115801562000565573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db090506200058f6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620005d157600080fd5b505af1158015620005e6573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200063257600080fd5b505af115801562000647573d6000803e3d6000fd5b505050506001601b600062000661620007d360201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252601b85528382208054871660019081179091558784168352601795869052848320805488168217905560075484168352848320805488168217905560065490931682528382208054871684179055815291822080549094168117909355620007036005546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190601890620007476005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526018909352818320805485166001908117909155600754909116835291208054909216179055620007c7620007b56005546001600160a01b031690565b6a52b7d2dcc80cd2e40000006200094a565b505062000cc9565b3390565b6005546001600160a01b031690565b6001600160a01b03821660009081526019602052604090205481151560ff9091161515036200087e5760405162461bcd60e51b815260206004820152603f60248201527f4d697669653a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601960205260409020805460ff191682158015919091179091556200090e5760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015620008f457600080fd5b505af115801562000909573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b038216620009a25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000875565b620009be8160025462000a4b60201b620020241790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620009f19183906200202462000a4b821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b60008062000a5a838562000cb3565b90508381101562000aae5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000875565b90505b92915050565b611bfa806200469383390190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000ab15762000ab162000ac5565b60008262000b1357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000b4357607f821691505b60208210810362000b6457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a4657600081815260208120601f850160051c8101602086101562000b935750805b601f850160051c820191505b8181101562000bb45782815560010162000b9f565b505050505050565b81516001600160401b0381111562000bd85762000bd862000b18565b62000bf08162000be9845462000b2e565b8462000b6a565b602080601f83116001811462000c28576000841562000c0f5750858301515b600019600386901b1c1916600185901b17855562000bb4565b600085815260208120601f198616915b8281101562000c595788860151825594840194600190910190840162000c38565b508582101562000c785787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c9b57600080fd5b81516001600160a01b038116811462000aae57600080fd5b8082018082111562000ab15762000ab162000ac5565b6080516139ae62000ce5600039600061055c01526139ae6000f3fe6080604052600436106102cd5760003560e01c8063715018a611610175578063b62496f5116100dc578063d3f6a15711610095578063e62572461161006f578063e6257246146108b6578063f2fde38b146108d6578063fd72e22a146108f6578063fe0175351461091657600080fd5b8063d3f6a15714610830578063d469801614610850578063dd62ed3e1461087057600080fd5b8063b62496f51461073c578063bea9849e1461076c578063c02466681461078c578063cd43e228146107ac578063d2d7ad83146107fa578063d32215761461081057600080fd5b80638da5cb5b1161012e5780638da5cb5b1461069357806395d89b41146106b1578063a457c2d7146106c6578063a9059cbb146106e6578063aa4bde2814610706578063aee50b1e1461071c57600080fd5b8063715018a6146105e857806376dca835146105fd578063781edb3c1461061d5780637c0a893d1461063d578063880bcbc11461065d5780638c0b5e221461067d57600080fd5b80632c1f52161161023457806339509351116101ed5780634d78fdc6116101c75780634d78fdc61461057e5780634e71d92d1461059e57806364b0f653146105b357806370a08231146105c857600080fd5b8063395093511461050a57806345a423291461052a57806349bd5a5e1461054a57600080fd5b80632c1f52161461046f5780632cc25d141461048f57806330bb4cff146104a4578063313ce567146104b957806331e79db0146104d557806334cf1fea146104f557600080fd5b80631694505e116102865780631694505e146103a257806318160ddd146103da5780631e293c10146103f95780631fcfefcd1461041957806323b872dd1461042f57806327a14fc21461044f57600080fd5b8063064a59d0146102d957806306fdde031461030f578063095ea7b314610331578063098df585146103515780630bd05b691461037357806314fbc5f31461038857600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506007546102fa90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561031b57600080fd5b50610324610948565b60405161030691906133d9565b34801561033d57600080fd5b506102fa61034c36600461343c565b6109da565b34801561035d57600080fd5b5061037161036c366004613468565b6109f1565b005b34801561037f57600080fd5b50610371610ba9565b34801561039457600080fd5b506014546102fa9060ff1681565b3480156103ae57600080fd5b506006546103c2906001600160a01b031681565b6040516001600160a01b039091168152602001610306565b3480156103e657600080fd5b506002545b604051908152602001610306565b34801561040557600080fd5b50610371610414366004613468565b610c29565b34801561042557600080fd5b506103eb60115481565b34801561043b57600080fd5b506102fa61044a366004613481565b610cee565b34801561045b57600080fd5b5061037161046a366004613468565b610d57565b34801561047b57600080fd5b506007546103c2906001600160a01b031681565b34801561049b57600080fd5b50610371610e20565b3480156104b057600080fd5b506103eb6110d7565b3480156104c557600080fd5b5060405160128152602001610306565b3480156104e157600080fd5b506103716104f03660046134c2565b61114a565b34801561050157600080fd5b506103716111d6565b34801561051657600080fd5b506102fa61052536600461343c565b61123d565b34801561053657600080fd5b506103716105453660046134ed565b611273565b34801561055657600080fd5b506103c27f000000000000000000000000000000000000000000000000000000000000000081565b34801561058a57600080fd5b506103716105993660046134c2565b611393565b3480156105aa57600080fd5b50610371611472565b3480156105bf57600080fd5b506103eb6114ea565b3480156105d457600080fd5b506103eb6105e33660046134c2565b611534565b3480156105f457600080fd5b5061037161154f565b34801561060957600080fd5b5061037161061836600461353c565b6115c3565b34801561062957600080fd5b506103716106383660046134ed565b611667565b34801561064957600080fd5b506103716106583660046134c2565b611729565b34801561066957600080fd5b506103716106783660046134ed565b611891565b34801561068957600080fd5b506103eb60095481565b34801561069f57600080fd5b506005546001600160a01b03166103c2565b3480156106bd57600080fd5b50610324611953565b3480156106d257600080fd5b506102fa6106e136600461343c565b611962565b3480156106f257600080fd5b506102fa61070136600461343c565b6119b1565b34801561071257600080fd5b506103eb60085481565b34801561072857600080fd5b50610371610737366004613468565b6119be565b34801561074857600080fd5b506102fa6107573660046134c2565b60196020526000908152604090205460ff1681565b34801561077857600080fd5b506103716107873660046134c2565b611a92565b34801561079857600080fd5b506103716107a73660046134ed565b611b8a565b3480156107b857600080fd5b5060105460ff80821691620100008104821691640100000000909104165b6040805160ff94851681529284166020840152921691810191909152606001610306565b34801561080657600080fd5b506103eb600b5481565b34801561081c57600080fd5b5061037161082b3660046134ed565b611c4c565b34801561083c57600080fd5b5061037161084b36600461357f565b611cce565b34801561085c57600080fd5b50600c546103c2906001600160a01b031681565b34801561087c57600080fd5b506103eb61088b36600461357f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108c257600080fd5b506103716108d136600461353c565b611ee5565b3480156108e257600080fd5b506103716108f13660046134c2565b611f39565b34801561090257600080fd5b50600d546103c2906001600160a01b031681565b34801561092257600080fd5b5060105460ff610100820481169163010000008104821691600160281b909104166107d6565b606060038054610957906135ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610983906135ad565b80156109d05780601f106109a5576101008083540402835291602001916109d0565b820191906000526020600020905b8154815290600101906020018083116109b357829003601f168201915b5050505050905090565b60006109e733848461208a565b5060015b92915050565b6005546001600160a01b03163314610a245760405162461bcd60e51b8152600401610a1b906135e7565b60405180910390fd5b478110610a895760405162461bcd60e51b815260206004820152602d60248201527f4d697669653a2043616e6e6f742073656e64206d6f7265207468616e20636f6e60448201526c74726163742062616c616e636560981b6064820152608401610a1b565b6000610a9d6005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b505090508015610ba557600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061361c565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6005546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610a1b906135e7565b6007805460ff60a01b1916600160a01b179055601254600003610bf95742601255436013555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6005546001600160a01b03163314610c535760405162461bcd60e51b8152600401610a1b906135e7565b6009548103610cbb5760405162461bcd60e51b815260206004820152602e60248201527f4d697669653a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608401610a1b565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610cfb8484846121af565b610d4d8433610d488560405180606001604052806028815260200161390c602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906127b2565b61208a565b5060019392505050565b6005546001600160a01b03163314610d815760405162461bcd60e51b8152600401610a1b906135e7565b6008548103610ded5760405162461bcd60e51b815260206004820152603260248201527f4d697669653a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608401610a1b565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6005546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610a1b906135e7565b600060125411610e9c5760405162461bcd60e51b815260206004820181905260248201527f4d697669653a204c61756e6368206d7573742068617665206f636375727265646044820152606401610a1b565b60145460ff1615610f065760405162461bcd60e51b815260206004820152602e60248201527f4d697669653a204c61756e636820746f6b656e73206861766520616c7265616460448201526d1e481899595b8818db185a5b595960921b6064820152608401610a1b565b600560135443610f16919061364f565b11610f785760405162461bcd60e51b815260206004820152602c60248201527f4d697669653a204f6e6c7920636c61696d206c61756e636820746f6b656e732060448201526b0c2cce8cae440d8c2eadcc6d60a31b6064820152608401610a1b565b6000610f8330611534565b6014805460ff19166001179055601154909150811015610ffc5760405162461bcd60e51b815260206004820152602e60248201527f4d697669653a2041207377617020616e64206c6971756966792068617320616c60448201526d1c9958591e481bd8d8dd5c9c995960921b6064820152608401610a1b565b60118054600091829055903063a9059cbb61101f6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190613662565b905080156110d25760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611121573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611145919061367f565b905090565b6005546001600160a01b031633146111745760405162461bcd60e51b8152600401610a1b906135e7565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b5050505050565b6005546001600160a01b031633146112005760405162461bcd60e51b8152600401610a1b906135e7565b6007805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109e7918590610d489086612024565b6005546001600160a01b0316331461129d5760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036113335760405162461bcd60e51b815260206004820152603760248201527f4d697669653a205468652073656c65637465642077616c6c657420697320616c60448201527f72656164792073657420746f207468652076616c7565200000000000000000006064820152608401610a1b565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6005546001600160a01b031633146113bd5760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03811660009081526015602052604090205460ff166114255760405162461bcd60e51b815260206004820152601d60248201527f4d697669653a204163636f756e74206973206e6f7420626c636f6b65640000006044820152606401610a1b565b6001600160a01b038116600081815260156020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af11580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e79190613662565b50565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611121573d6000803e3d6000fd5b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146115795760405162461bcd60e51b8152600401610a1b906135e7565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115ed5760405162461bcd60e51b8152600401610a1b906135e7565b6115fa600e8484846127ec565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6005546001600160a01b031633146116915760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036116d15760405162461bcd60e51b8152600401610a1b90613698565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611387565b6005546001600160a01b031633146117535760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03811660009081526015602052604090205460ff16156117c65760405162461bcd60e51b815260206004820152602160248201527f4d697669653a204163636f756e7420697320616c726561647920626c6f636b656044820152601960fa1b6064820152608401610a1b565b6012541561183f576202a300601254426117e0919061364f565b1061183f5760405162461bcd60e51b815260206004820152602960248201527f4d697669653a2054696d6520746f20626c6f636b206163636f756e74732068616044820152681cc8195e1c1a5c995960ba1b6064820152608401610a1b565b6001600160a01b038116600081815260156020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6005546001600160a01b031633146118bb5760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036118fb5760405162461bcd60e51b8152600401610a1b90613698565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f590b452f33c2ce4c8d34a3c2605002d05726f44c785969820a0bafeb361566409101611387565b606060048054610957906135ad565b60006109e73384610d4885604051806060016040528060258152602001613954602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906127b2565b60006109e73384846121af565b6005546001600160a01b031633146119e85760405162461bcd60e51b8152600401610a1b906135e7565b600b548103611a5f5760405162461bcd60e51b815260206004820152603a60248201527f4d697669653a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c75650000000000006064820152608401610a1b565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6005546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610a1b906135e7565b6006546001600160a01b0390811690821603611b2d5760405162461bcd60e51b815260206004820152602a60248201527f4d697669653a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610a1b565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611bb45760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503611bf45760405162461bcd60e51b8152600401610a1b90613698565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611387565b6005546001600160a01b03163314611c765760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611387565b6005546001600160a01b03163314611cf85760405162461bcd60e51b8152600401610a1b906135e7565b600c546001600160a01b03838116911614611deb576001600160a01b038216611d725760405162461bcd60e51b815260206004820152602660248201527f4d697669653a20546865206c697175696469747957616c6c65742063616e6e6f60448201526507420626520360d41b6064820152608401610a1b565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0384161790555b600d546001600160a01b03828116911614610ba5576001600160a01b038116611e665760405162461bcd60e51b815260206004820152602760248201527f4d697669653a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610a1b565b600d546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0383166001600160a01b03199091161790555050565b6005546001600160a01b03163314611f0f5760405162461bcd60e51b8152600401610a1b906135e7565b611f1c600e8484846129b6565b6040516b62617365466565732d42757960a01b8152600c01611614565b6005546001600160a01b03163314611f635760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b038116611fc85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a1b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061203183856136e9565b9050838110156120835760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a1b565b9392505050565b6001600160a01b0383166120ec5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a1b565b6001600160a01b03821661214d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a1b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166121d55760405162461bcd60e51b8152600401610a1b906136fc565b6001600160a01b0382166121fb5760405162461bcd60e51b8152600401610a1b90613741565b8060000361220f576110d283836000612b6d565b6001600160a01b0383166000908152601b602052604090205460ff1615801561225157506001600160a01b0382166000908152601b602052604090205460ff16155b156124e357600754600160a01b900460ff166122bd5760405162461bcd60e51b815260206004820152602560248201527f4d697669653a2054726164696e672069732063757272656e746c792064697361604482015264313632b21760d91b6064820152608401610a1b565b6001600160a01b03821660009081526015602052604090205460ff16156123225760405162461bcd60e51b8152602060048201526019602482015278135a5d9a594e881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b6044820152606401610a1b565b6001600160a01b03831660009081526015602052604090205460ff16156123875760405162461bcd60e51b8152602060048201526019602482015278135a5d9a594e881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b6044820152606401610a1b565b6001600160a01b03821660009081526017602052604090205460ff1661243257600854816123b484611534565b6123be91906136e9565b11156124325760405162461bcd60e51b815260206004820152603a60248201527f4d697669653a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e0000000000006064820152608401610a1b565b6001600160a01b03821660009081526018602052604090205460ff1615801561247457506001600160a01b03831660009081526018602052604090205460ff16155b156124e3576009548111156124e35760405162461bcd60e51b815260206004820152602f60248201527f4d697669653a205472616e7366657220616d6f756e742065786365656473207460448201526e34329036b0bc2a3c20b6b7bab73a1760891b6064820152608401610a1b565b6001600160a01b038084166000908152601960205260408082205492851682529020546125189160ff90811691168585612c76565b6000600b5461252630611534565b6007549111159150600160a01b900460ff1680156125415750805b80156125505750600a5460ff16155b80156125675750601c546301000000900460ff1615155b801561258b57506001600160a01b03831660009081526019602052604090205460ff165b156125b057600a805460ff191660011790556125a5612e89565b600a805460ff191690555b600a5460009060ff161580156125cf5750600754600160a01b900460ff165b6001600160a01b03861660009081526016602052604090205490915060ff168061261157506001600160a01b03841660009081526016602052604090205460ff165b1561261a575060005b8080156126325750601c546301000000900460ff1615155b156126b657601c54600090606490612654906301000000900460ff1686613784565b61265e91906137b1565b905061266a818561364f565b9350600060125411801561268c5750600560135443612689919061364f565b11155b156126a95780601160008282546126a391906136e9565b90915550505b6126b4863083612b6d565b505b6126c1858585612b6d565b6007546001600160a01b031663e30443bc866126dc81611534565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561272257600080fd5b505af1925050508015612733575060015b506007546001600160a01b031663e30443bc8561274f81611534565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561279557600080fd5b505af19250505080156127a6575060015b156111cf575050505050565b600081848411156127d65760405162461bcd60e51b8152600401610a1b91906133d9565b5060006127e3848661364f565b95945050505050565b600284015460ff848116610100909204161461287d57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028601548654919260ff610100909204821692918716916000805160206139348339815191529161285e9160481b906137c5565b60405180910390a460028401805461ff00191661010060ff8616021790555b600284015460ff8381166301000000909204161461291757604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028601548654919260ff630100000090920482169291861691600080516020613934833981519152916128f49160481b906137c5565b60405180910390a460028401805463ff0000001916630100000060ff8516021790555b600284015460ff828116600160281b90920416146129b0576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028601548654919260ff600160281b909204821692918516916000805160206139348339815191529161298b9160481b906137c5565b60405180910390a460028401805465ff00000000001916600160281b60ff8416021790555b50505050565b600284015460ff848116911614612a3757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028601548654919260ff918216929187169160008051602061393483398151915291612a1d9160481b906137c5565b60405180910390a460028401805460ff191660ff85161790555b600284015460ff838116620100009092041614612acc57604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028601548654919260ff620100009092048216929186169160008051602061393483398151915291612aab9160481b906137c5565b60405180910390a460028401805462ff000019166201000060ff8516021790555b600284015460ff82811664010000000090920416146129b0576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028601548654919260ff6401000000009092048216929185169160008051602061393483398151915291612b419160481b906137c5565b60405180910390a460028401805460ff83166401000000000264ff000000001990911617905550505050565b6001600160a01b038316612b935760405162461bcd60e51b8152600401610a1b906136fc565b6001600160a01b038216612bb95760405162461bcd60e51b8152600401610a1b90613741565b612bf6816040518060600160405280602681526020016138e6602691396001600160a01b03861660009081526020819052604090205491906127b2565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612c259082612024565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016121a2565b601c805462ffffff191690558315612cf357600560135443612c98919061364f565b11612caf57601c805460ff19166064179055612cf3565b601054601c8054640100000000830460ff9081166201000090810262ff00001991860483166101000261ffff19909416929095169190911791909117169190911790555b8215612d3f57601054601c805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b82158015612d4b575083155b8015612d9157506001600160a01b0382166000908152601a602052604090205460ff1680612d9157506001600160a01b0381166000908152601a602052604090205460ff165b15612ddc57601054601c805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b601c5460ff620100008204811691612dfc916101008204811691166137dc565b612e0691906137dc565b601c805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b6000612e9430611534565b601c54909150479060ff630100000082048116916000916002918491612ebb911687613784565b612ec591906137b1565b612ecf91906137b1565b90506000612edd828661364f565b9050612ee8816130b9565b6000612ef4854761364f565b601c54909150600090612f0c9060029060ff166137f5565b601c54612f2391906301000000900460ff16613817565b601c5460ff91821692506000916002918491612f40911686613784565b612f4a91906137b1565b612f5491906137b1565b601c549091506000908390612f7190610100900460ff1686613784565b612f7b91906137b1565b90506000612f8982846136e9565b612f93908661364f565b600d54909150612fac906001600160a01b031683613213565b8615612ffe57612fbc878461332c565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6007546040516000916001600160a01b03169083908381818185875af1925050503d806000811461304b576040519150601f19603f3d011682016040523d82523d6000602084013e613050565b606091505b50509050801561308e576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b5050601c805460ff90981663010000000263ff00000019909816979097179096555050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130ee576130ee613830565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316b919061361c565b8160018151811061317e5761317e613830565b6001600160a01b0392831660209182029290920101526006546131a4913091168461208a565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131dd908590600090869030904290600401613846565b600060405180830381600087803b1580156131f757600080fd5b505af115801561320b573d6000803e3d6000fd5b505050505050565b804710156132635760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a1b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146132b0576040519150601f19603f3d011682016040523d82523d6000602084013e6132b5565b606091505b50509050806110d25760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a1b565b6006546133449030906001600160a01b03168461208a565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156133b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111cf91906138b7565b600060208083528351808285015260005b81811015613406578581018301518582016040015282016133ea565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114e757600080fd5b6000806040838503121561344f57600080fd5b823561345a81613427565b946020939093013593505050565b60006020828403121561347a57600080fd5b5035919050565b60008060006060848603121561349657600080fd5b83356134a181613427565b925060208401356134b181613427565b929592945050506040919091013590565b6000602082840312156134d457600080fd5b813561208381613427565b80151581146114e757600080fd5b6000806040838503121561350057600080fd5b823561350b81613427565b9150602083013561351b816134df565b809150509250929050565b803560ff8116811461353757600080fd5b919050565b60008060006060848603121561355157600080fd5b61355a84613526565b925061356860208501613526565b915061357660408501613526565b90509250925092565b6000806040838503121561359257600080fd5b823561359d81613427565b9150602083013561351b81613427565b600181811c908216806135c157607f821691505b6020821081036135e157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561362e57600080fd5b815161208381613427565b634e487b7160e01b600052601160045260246000fd5b818103818111156109eb576109eb613639565b60006020828403121561367457600080fd5b8151612083816134df565b60006020828403121561369157600080fd5b5051919050565b60208082526031908201527f4d697669653a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b808201808211156109eb576109eb613639565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176109eb576109eb613639565b634e487b7160e01b600052601260045260246000fd5b6000826137c0576137c061379b565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff81811683821601908111156109eb576109eb613639565b600060ff8316806138085761380861379b565b8060ff84160491505092915050565b60ff82811682821603908111156109eb576109eb613639565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138965784516001600160a01b031683529383019391830191600101613871565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138cc57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122063d775ef32f70aa4062b0af5018c30f3c9cfc311bfc3e7d2fed0d12d8cfc1d0364736f6c6343000811003360806040523480156200001157600080fd5b5060408051808201825260168082527f4d697669655f4469766964656e645f547261636b6572000000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060115550600060125562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61198780620002736000396000f3fe6080604052600436106101dc5760003560e01c80636f2789ec11610102578063a8b9d24011610095578063be10b61411610064578063be10b61414610555578063dd62ed3e1461056b578063e30443bc146105b1578063f2fde38b146105d157600080fd5b8063a8b9d240146104bf578063a9059cbb146104df578063aafd847a146104ff578063bc4c4b371461053557600080fd5b80638da5cb5b116100d15780638da5cb5b1461044257806391b89fba1461046a57806395d89b411461048a578063a457c2d71461049f57600080fd5b80636f2789ec146103cb57806370a08231146103e1578063715018a61461041757806385a6b3ae1461042c57600080fd5b806323b872dd1161017a57806331e79db01161014957806331e79db01461034657806339509351146103665780634e7b827f146103865780636a474002146103b657600080fd5b806323b872dd146102d457806327ce0147146102f45780633009a60914610314578063313ce5671461032a57600080fd5b806309bbedde116101b657806309bbedde14610253578063163c7cef1461027257806318160ddd14610292578063226cfa3d146102a757600080fd5b806303c83302146101f057806306fdde03146101f8578063095ea7b31461022357600080fd5b366101eb576101e96105f1565b005b600080fd5b6101e96105f1565b34801561020457600080fd5b5061020d6106b7565b60405161021a9190611644565b60405180910390f35b34801561022f57600080fd5b5061024361023e3660046116a7565b610749565b604051901515815260200161021a565b34801561025f57600080fd5b50600a545b60405190815260200161021a565b34801561027e57600080fd5b506101e961028d3660046116d3565b610760565b34801561029e57600080fd5b50600254610264565b3480156102b357600080fd5b506102646102c23660046116ec565b60106020526000908152604090205481565b3480156102e057600080fd5b506102436102ef366004611709565b61082c565b34801561030057600080fd5b5061026461030f3660046116ec565b610895565b34801561032057600080fd5b50610264600e5481565b34801561033657600080fd5b506040516012815260200161021a565b34801561035257600080fd5b506101e96103613660046116ec565b6108f1565b34801561037257600080fd5b506102436103813660046116a7565b610a18565b34801561039257600080fd5b506102436103a13660046116ec565b600f6020526000908152604090205460ff1681565b3480156103c257600080fd5b506101e9610a4e565b3480156103d757600080fd5b5061026460115481565b3480156103ed57600080fd5b506102646103fc3660046116ec565b6001600160a01b031660009081526020819052604090205490565b34801561042357600080fd5b506101e9610a5a565b34801561043857600080fd5b5061026460075481565b34801561044e57600080fd5b506005546040516001600160a01b03909116815260200161021a565b34801561047657600080fd5b506102646104853660046116ec565b610ace565b34801561049657600080fd5b5061020d610ad9565b3480156104ab57600080fd5b506102436104ba3660046116a7565b610ae8565b3480156104cb57600080fd5b506102646104da3660046116ec565b610b37565b3480156104eb57600080fd5b506102436104fa3660046116a7565b610b63565b34801561050b57600080fd5b5061026461051a3660046116ec565b6001600160a01b031660009081526009602052604090205490565b34801561054157600080fd5b5061024361055036600461174a565b610b70565b34801561056157600080fd5b5061026460125481565b34801561057757600080fd5b50610264610586366004611788565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105bd57600080fd5b506101e96105cc3660046116a7565b610c1e565b3480156105dd57600080fd5b506101e96105ec3660046116ec565b610d88565b6005546001600160a01b031633146106245760405162461bcd60e51b815260040161061b906117b6565b60405180910390fd5b600061062f60025490565b1161063957600080fd5b34156106b55761066c61064b60025490565b61065934600160801b610e73565b6106639190611801565b60065490610efc565b60065560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26007546106b19034610efc565b6007555b565b6060600380546106c690611823565b80601f01602080910402602001604051908101604052809291908181526020018280546106f290611823565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b6000610756338484610f5b565b5060015b92915050565b6005546001600160a01b0316331461078a5760405162461bcd60e51b815260040161061b906117b6565b80601254036108275760405162461bcd60e51b815260206004820152605860248201527f4d697669655f4469766964656e645f547261636b65723a206d696e696d756d5460448201527f6f6b656e42616c616e6365466f724469766964656e647320616c72656164792060648201527f7468652076616c7565206f6620276e657756616c7565272e0000000000000000608482015260a40161061b565b601255565b600061083984848461107f565b61088b843361088685604051806060016040528060288152602001611905602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906110dc565b610f5b565b5060019392505050565b6001600160a01b03811660009081526008602090815260408083205491839052822054600654600160801b926108e7926108e2926108dc916108d79190610e73565b611116565b90611126565b611164565b61075a9190611801565b6005546001600160a01b0316331461091b5760405162461bcd60e51b815260040161061b906117b6565b6001600160a01b0381166000908152600f602052604090205460ff161561094157600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff1916600117905561096f908290611177565b60405163131836e760e21b8152600a60048201526001600160a01b038216602482015273014443bc192a9540ce3cec8670d9793f41cc1f0a90634c60db9c9060440160006040518083038186803b1580156109c957600080fd5b505af41580156109dd573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107569185906108869086610efc565b610a57336111dc565b50565b6005546001600160a01b03163314610a845760405162461bcd60e51b815260040161061b906117b6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061075a82610b37565b6060600480546106c690611823565b600061075633846108868560405180606001604052806025815260200161192d602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906110dc565b6001600160a01b03811660009081526009602052604081205461075a90610b5d84610895565b90611322565b600061075633848461107f565b6005546000906001600160a01b03163314610b9d5760405162461bcd60e51b815260040161061b906117b6565b6000610ba8846111dc565b90508015610c14576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610c029085815260200190565b60405180910390a3600191505061075a565b5060009392505050565b6005546001600160a01b03163314610c485760405162461bcd60e51b815260040161061b906117b6565b6001600160a01b0382166000908152600f602052604090205460ff16610d84576012548110610cf957610c7b8282611177565b604051632f0ad01760e21b8152600a60048201526001600160a01b03831660248201526044810182905273014443bc192a9540ce3cec8670d9793f41cc1f0a9063bc2b405c9060640160006040518083038186803b158015610cdc57600080fd5b505af4158015610cf0573d6000803e3d6000fd5b50505050610d77565b610d04826000611177565b60405163131836e760e21b8152600a60048201526001600160a01b038316602482015273014443bc192a9540ce3cec8670d9793f41cc1f0a90634c60db9c9060440160006040518083038186803b158015610d5e57600080fd5b505af4158015610d72573d6000803e3d6000fd5b505050505b610d82826001610b70565b505b5050565b6005546001600160a01b03163314610db25760405162461bcd60e51b815260040161061b906117b6565b6001600160a01b038116610e175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600082600003610e855750600061075a565b6000610e91838561185d565b905082610e9e8583611801565b14610ef55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161061b565b9392505050565b600080610f098385611874565b905083811015610ef55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161061b565b6001600160a01b038316610fbd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161061b565b6001600160a01b03821661101e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161061b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602c60248201527f4d697669655f4469766964656e645f547261636b65723a204e6f207472616e7360448201526b19995c9cc8185b1b1bddd95960a21b606482015260840161061b565b600081848411156111005760405162461bcd60e51b815260040161061b9190611644565b50600061110d8486611887565b95945050505050565b6000818181121561075a57600080fd5b600080611133838561189a565b9050600083121580156111465750838112155b8061115b575060008312801561115b57508381125b610ef557600080fd5b60008082121561117357600080fd5b5090565b6001600160a01b038216600090815260208190526040902054808211156111b65760006111a48383611322565b90506111b08482611364565b50610d82565b80821015610d825760006111ca8284611322565b90506111d684826113c8565b50505050565b6000806111e883610b37565b90508015611319576001600160a01b0383166000908152600960205260409020546112139082610efc565b6001600160a01b038416600081815260096020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906112629084815260200190565b60405180910390a26000836001600160a01b031682610bb890604051600060405180830381858888f193505050503d80600081146112bc576040519150601f19603f3d011682016040523d82523d6000602084013e6112c1565b606091505b5050905080611312576001600160a01b0384166000908152600960205260409020546112ed9083611322565b6001600160a01b03909416600090815260096020526040812094909455509192915050565b5092915050565b50600092915050565b6000610ef583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110dc565b61136e828261140c565b6113a86113896108d783600654610e7390919063ffffffff16565b6001600160a01b038416600090815260086020526040902054906114f7565b6001600160a01b0390921660009081526008602052604090209190915550565b6113d28282611534565b6113a86113ed6108d783600654610e7390919063ffffffff16565b6001600160a01b03841660009081526008602052604090205490611126565b6001600160a01b0382166114625760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161061b565b61146e60008383610d82565b60025461147b9082610efc565b6002556001600160a01b0382166000908152602081905260409020546114a19082610efc565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60008061150483856118c2565b9050600083121580156115175750838113155b8061115b575060008312801561115b5750838113610ef557600080fd5b6001600160a01b0382166115945760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161061b565b6115a082600083610d82565b6115dd816040518060600160405280602281526020016118e3602291396001600160a01b03851660009081526020819052604090205491906110dc565b6001600160a01b0383166000908152602081905260409020556002546116039082611322565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016114eb565b600060208083528351808285015260005b8181101561167157858101830151858201604001528201611655565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a5757600080fd5b600080604083850312156116ba57600080fd5b82356116c581611692565b946020939093013593505050565b6000602082840312156116e557600080fd5b5035919050565b6000602082840312156116fe57600080fd5b8135610ef581611692565b60008060006060848603121561171e57600080fd5b833561172981611692565b9250602084013561173981611692565b929592945050506040919091013590565b6000806040838503121561175d57600080fd5b823561176881611692565b91506020830135801515811461177d57600080fd5b809150509250929050565b6000806040838503121561179b57600080fd5b82356117a681611692565b9150602083013561177d81611692565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261181e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061183757607f821691505b60208210810361185757634e487b7160e01b600052602260045260246000fd5b50919050565b808202811582820484141761075a5761075a6117eb565b8082018082111561075a5761075a6117eb565b8181038181111561075a5761075a6117eb565b80820182811260008312801582168215821617156118ba576118ba6117eb565b505092915050565b8181036000831280158383131683831282161715611312576113126117eb56fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201287f686b3f21ac5c06180c653d10c6a5784a56daf2dae26d5df993bda732ae264736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c8063715018a611610175578063b62496f5116100dc578063d3f6a15711610095578063e62572461161006f578063e6257246146108b6578063f2fde38b146108d6578063fd72e22a146108f6578063fe0175351461091657600080fd5b8063d3f6a15714610830578063d469801614610850578063dd62ed3e1461087057600080fd5b8063b62496f51461073c578063bea9849e1461076c578063c02466681461078c578063cd43e228146107ac578063d2d7ad83146107fa578063d32215761461081057600080fd5b80638da5cb5b1161012e5780638da5cb5b1461069357806395d89b41146106b1578063a457c2d7146106c6578063a9059cbb146106e6578063aa4bde2814610706578063aee50b1e1461071c57600080fd5b8063715018a6146105e857806376dca835146105fd578063781edb3c1461061d5780637c0a893d1461063d578063880bcbc11461065d5780638c0b5e221461067d57600080fd5b80632c1f52161161023457806339509351116101ed5780634d78fdc6116101c75780634d78fdc61461057e5780634e71d92d1461059e57806364b0f653146105b357806370a08231146105c857600080fd5b8063395093511461050a57806345a423291461052a57806349bd5a5e1461054a57600080fd5b80632c1f52161461046f5780632cc25d141461048f57806330bb4cff146104a4578063313ce567146104b957806331e79db0146104d557806334cf1fea146104f557600080fd5b80631694505e116102865780631694505e146103a257806318160ddd146103da5780631e293c10146103f95780631fcfefcd1461041957806323b872dd1461042f57806327a14fc21461044f57600080fd5b8063064a59d0146102d957806306fdde031461030f578063095ea7b314610331578063098df585146103515780630bd05b691461037357806314fbc5f31461038857600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506007546102fa90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561031b57600080fd5b50610324610948565b60405161030691906133d9565b34801561033d57600080fd5b506102fa61034c36600461343c565b6109da565b34801561035d57600080fd5b5061037161036c366004613468565b6109f1565b005b34801561037f57600080fd5b50610371610ba9565b34801561039457600080fd5b506014546102fa9060ff1681565b3480156103ae57600080fd5b506006546103c2906001600160a01b031681565b6040516001600160a01b039091168152602001610306565b3480156103e657600080fd5b506002545b604051908152602001610306565b34801561040557600080fd5b50610371610414366004613468565b610c29565b34801561042557600080fd5b506103eb60115481565b34801561043b57600080fd5b506102fa61044a366004613481565b610cee565b34801561045b57600080fd5b5061037161046a366004613468565b610d57565b34801561047b57600080fd5b506007546103c2906001600160a01b031681565b34801561049b57600080fd5b50610371610e20565b3480156104b057600080fd5b506103eb6110d7565b3480156104c557600080fd5b5060405160128152602001610306565b3480156104e157600080fd5b506103716104f03660046134c2565b61114a565b34801561050157600080fd5b506103716111d6565b34801561051657600080fd5b506102fa61052536600461343c565b61123d565b34801561053657600080fd5b506103716105453660046134ed565b611273565b34801561055657600080fd5b506103c27f000000000000000000000000ab429083fe81160a1ba0eddfb16bd7ec406a8c7c81565b34801561058a57600080fd5b506103716105993660046134c2565b611393565b3480156105aa57600080fd5b50610371611472565b3480156105bf57600080fd5b506103eb6114ea565b3480156105d457600080fd5b506103eb6105e33660046134c2565b611534565b3480156105f457600080fd5b5061037161154f565b34801561060957600080fd5b5061037161061836600461353c565b6115c3565b34801561062957600080fd5b506103716106383660046134ed565b611667565b34801561064957600080fd5b506103716106583660046134c2565b611729565b34801561066957600080fd5b506103716106783660046134ed565b611891565b34801561068957600080fd5b506103eb60095481565b34801561069f57600080fd5b506005546001600160a01b03166103c2565b3480156106bd57600080fd5b50610324611953565b3480156106d257600080fd5b506102fa6106e136600461343c565b611962565b3480156106f257600080fd5b506102fa61070136600461343c565b6119b1565b34801561071257600080fd5b506103eb60085481565b34801561072857600080fd5b50610371610737366004613468565b6119be565b34801561074857600080fd5b506102fa6107573660046134c2565b60196020526000908152604090205460ff1681565b34801561077857600080fd5b506103716107873660046134c2565b611a92565b34801561079857600080fd5b506103716107a73660046134ed565b611b8a565b3480156107b857600080fd5b5060105460ff80821691620100008104821691640100000000909104165b6040805160ff94851681529284166020840152921691810191909152606001610306565b34801561080657600080fd5b506103eb600b5481565b34801561081c57600080fd5b5061037161082b3660046134ed565b611c4c565b34801561083c57600080fd5b5061037161084b36600461357f565b611cce565b34801561085c57600080fd5b50600c546103c2906001600160a01b031681565b34801561087c57600080fd5b506103eb61088b36600461357f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108c257600080fd5b506103716108d136600461353c565b611ee5565b3480156108e257600080fd5b506103716108f13660046134c2565b611f39565b34801561090257600080fd5b50600d546103c2906001600160a01b031681565b34801561092257600080fd5b5060105460ff610100820481169163010000008104821691600160281b909104166107d6565b606060038054610957906135ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610983906135ad565b80156109d05780601f106109a5576101008083540402835291602001916109d0565b820191906000526020600020905b8154815290600101906020018083116109b357829003601f168201915b5050505050905090565b60006109e733848461208a565b5060015b92915050565b6005546001600160a01b03163314610a245760405162461bcd60e51b8152600401610a1b906135e7565b60405180910390fd5b478110610a895760405162461bcd60e51b815260206004820152602d60248201527f4d697669653a2043616e6e6f742073656e64206d6f7265207468616e20636f6e60448201526c74726163742062616c616e636560981b6064820152608401610a1b565b6000610a9d6005546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b505090508015610ba557600654604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061361c565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6005546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610a1b906135e7565b6007805460ff60a01b1916600160a01b179055601254600003610bf95742601255436013555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6005546001600160a01b03163314610c535760405162461bcd60e51b8152600401610a1b906135e7565b6009548103610cbb5760405162461bcd60e51b815260206004820152602e60248201527f4d697669653a2043616e6e6f7420757064617465206d61785478416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608401610a1b565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610cfb8484846121af565b610d4d8433610d488560405180606001604052806028815260200161390c602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906127b2565b61208a565b5060019392505050565b6005546001600160a01b03163314610d815760405162461bcd60e51b8152600401610a1b906135e7565b6008548103610ded5760405162461bcd60e51b815260206004820152603260248201527f4d697669653a2043616e6e6f7420757064617465206d617857616c6c6574416d6044820152716f756e7420746f2073616d652076616c756560701b6064820152608401610a1b565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6005546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610a1b906135e7565b600060125411610e9c5760405162461bcd60e51b815260206004820181905260248201527f4d697669653a204c61756e6368206d7573742068617665206f636375727265646044820152606401610a1b565b60145460ff1615610f065760405162461bcd60e51b815260206004820152602e60248201527f4d697669653a204c61756e636820746f6b656e73206861766520616c7265616460448201526d1e481899595b8818db185a5b595960921b6064820152608401610a1b565b600560135443610f16919061364f565b11610f785760405162461bcd60e51b815260206004820152602c60248201527f4d697669653a204f6e6c7920636c61696d206c61756e636820746f6b656e732060448201526b0c2cce8cae440d8c2eadcc6d60a31b6064820152608401610a1b565b6000610f8330611534565b6014805460ff19166001179055601154909150811015610ffc5760405162461bcd60e51b815260206004820152602e60248201527f4d697669653a2041207377617020616e64206c6971756966792068617320616c60448201526d1c9958591e481bd8d8dd5c9c995960921b6064820152608401610a1b565b60118054600091829055903063a9059cbb61101f6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561106c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110909190613662565b905080156110d25760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015611121573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611145919061367f565b905090565b6005546001600160a01b031633146111745760405162461bcd60e51b8152600401610a1b906135e7565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401600060405180830381600087803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b5050505050565b6005546001600160a01b031633146112005760405162461bcd60e51b8152600401610a1b906135e7565b6007805460ff60a01b191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109e7918590610d489086612024565b6005546001600160a01b0316331461129d5760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036113335760405162461bcd60e51b815260206004820152603760248201527f4d697669653a205468652073656c65637465642077616c6c657420697320616c60448201527f72656164792073657420746f207468652076616c7565200000000000000000006064820152608401610a1b565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a1966687791015b60405180910390a25050565b6005546001600160a01b031633146113bd5760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03811660009081526015602052604090205460ff166114255760405162461bcd60e51b815260206004820152601d60248201527f4d697669653a204163636f756e74206973206e6f7420626c636f6b65640000006044820152606401610a1b565b6001600160a01b038116600081815260156020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af11580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e79190613662565b50565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015611121573d6000803e3d6000fd5b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146115795760405162461bcd60e51b8152600401610a1b906135e7565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115ed5760405162461bcd60e51b8152600401610a1b906135e7565b6115fa600e8484846127ec565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff86811684528581166020850152841683830152905190917f0fc5b99eebb78c10fca186b25746da968ffa81b56e2a79e89fd5ed16f238b576919081900360600190a2505050565b6005546001600160a01b031633146116915760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036116d15760405162461bcd60e51b8152600401610a1b90613698565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101611387565b6005546001600160a01b031633146117535760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03811660009081526015602052604090205460ff16156117c65760405162461bcd60e51b815260206004820152602160248201527f4d697669653a204163636f756e7420697320616c726561647920626c6f636b656044820152601960fa1b6064820152608401610a1b565b6012541561183f576202a300601254426117e0919061364f565b1061183f5760405162461bcd60e51b815260206004820152602960248201527f4d697669653a2054696d6520746f20626c6f636b206163636f756e74732068616044820152681cc8195e1c1a5c995960ba1b6064820152608401610a1b565b6001600160a01b038116600081815260156020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6005546001600160a01b031633146118bb5760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036118fb5760405162461bcd60e51b8152600401610a1b90613698565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f590b452f33c2ce4c8d34a3c2605002d05726f44c785969820a0bafeb361566409101611387565b606060048054610957906135ad565b60006109e73384610d4885604051806060016040528060258152602001613954602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906127b2565b60006109e73384846121af565b6005546001600160a01b031633146119e85760405162461bcd60e51b8152600401610a1b906135e7565b600b548103611a5f5760405162461bcd60e51b815260206004820152603a60248201527f4d697669653a2043616e6e6f7420757064617465206d696e696d756d546f6b6560448201527f6e734265666f72655377617020746f2073616d652076616c75650000000000006064820152608401610a1b565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6005546001600160a01b03163314611abc5760405162461bcd60e51b8152600401610a1b906135e7565b6006546001600160a01b0390811690821603611b2d5760405162461bcd60e51b815260206004820152602a60248201527f4d697669653a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610a1b565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611bb45760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503611bf45760405162461bcd60e51b8152600401610a1b90613698565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611387565b6005546001600160a01b03163314611c765760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611387565b6005546001600160a01b03163314611cf85760405162461bcd60e51b8152600401610a1b906135e7565b600c546001600160a01b03838116911614611deb576001600160a01b038216611d725760405162461bcd60e51b815260206004820152602660248201527f4d697669653a20546865206c697175696469747957616c6c65742063616e6e6f60448201526507420626520360d41b6064820152608401610a1b565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0384161790555b600d546001600160a01b03828116911614610ba5576001600160a01b038116611e665760405162461bcd60e51b815260206004820152602760248201527f4d697669653a20546865206f7065726174696f6e7357616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610a1b565b600d546040516f1bdc195c985d1a5bdb9cd5d85b1b195d60821b81526001600160a01b0391821691831690601001604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0383166001600160a01b03199091161790555050565b6005546001600160a01b03163314611f0f5760405162461bcd60e51b8152600401610a1b906135e7565b611f1c600e8484846129b6565b6040516b62617365466565732d42757960a01b8152600c01611614565b6005546001600160a01b03163314611f635760405162461bcd60e51b8152600401610a1b906135e7565b6001600160a01b038116611fc85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a1b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061203183856136e9565b9050838110156120835760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a1b565b9392505050565b6001600160a01b0383166120ec5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a1b565b6001600160a01b03821661214d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a1b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166121d55760405162461bcd60e51b8152600401610a1b906136fc565b6001600160a01b0382166121fb5760405162461bcd60e51b8152600401610a1b90613741565b8060000361220f576110d283836000612b6d565b6001600160a01b0383166000908152601b602052604090205460ff1615801561225157506001600160a01b0382166000908152601b602052604090205460ff16155b156124e357600754600160a01b900460ff166122bd5760405162461bcd60e51b815260206004820152602560248201527f4d697669653a2054726164696e672069732063757272656e746c792064697361604482015264313632b21760d91b6064820152608401610a1b565b6001600160a01b03821660009081526015602052604090205460ff16156123225760405162461bcd60e51b8152602060048201526019602482015278135a5d9a594e881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b6044820152606401610a1b565b6001600160a01b03831660009081526015602052604090205460ff16156123875760405162461bcd60e51b8152602060048201526019602482015278135a5d9a594e881058d8dbdd5b9d081a5cc8189b1bd8dad959603a1b6044820152606401610a1b565b6001600160a01b03821660009081526017602052604090205460ff1661243257600854816123b484611534565b6123be91906136e9565b11156124325760405162461bcd60e51b815260206004820152603a60248201527f4d697669653a2045787065637465642077616c6c657420616d6f756e7420657860448201527f636565647320746865206d617857616c6c6574416d6f756e742e0000000000006064820152608401610a1b565b6001600160a01b03821660009081526018602052604090205460ff1615801561247457506001600160a01b03831660009081526018602052604090205460ff16155b156124e3576009548111156124e35760405162461bcd60e51b815260206004820152602f60248201527f4d697669653a205472616e7366657220616d6f756e742065786365656473207460448201526e34329036b0bc2a3c20b6b7bab73a1760891b6064820152608401610a1b565b6001600160a01b038084166000908152601960205260408082205492851682529020546125189160ff90811691168585612c76565b6000600b5461252630611534565b6007549111159150600160a01b900460ff1680156125415750805b80156125505750600a5460ff16155b80156125675750601c546301000000900460ff1615155b801561258b57506001600160a01b03831660009081526019602052604090205460ff165b156125b057600a805460ff191660011790556125a5612e89565b600a805460ff191690555b600a5460009060ff161580156125cf5750600754600160a01b900460ff165b6001600160a01b03861660009081526016602052604090205490915060ff168061261157506001600160a01b03841660009081526016602052604090205460ff165b1561261a575060005b8080156126325750601c546301000000900460ff1615155b156126b657601c54600090606490612654906301000000900460ff1686613784565b61265e91906137b1565b905061266a818561364f565b9350600060125411801561268c5750600560135443612689919061364f565b11155b156126a95780601160008282546126a391906136e9565b90915550505b6126b4863083612b6d565b505b6126c1858585612b6d565b6007546001600160a01b031663e30443bc866126dc81611534565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561272257600080fd5b505af1925050508015612733575060015b506007546001600160a01b031663e30443bc8561274f81611534565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561279557600080fd5b505af19250505080156127a6575060015b156111cf575050505050565b600081848411156127d65760405162461bcd60e51b8152600401610a1b91906133d9565b5060006127e3848661364f565b95945050505050565b600284015460ff848116610100909204161461287d57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028601548654919260ff610100909204821692918716916000805160206139348339815191529161285e9160481b906137c5565b60405180910390a460028401805461ff00191661010060ff8616021790555b600284015460ff8381166301000000909204161461291757604051721bdc195c985d1a5bdb9cd1995953db94d95b1b606a1b815260130160405190819003812060028601548654919260ff630100000090920482169291861691600080516020613934833981519152916128f49160481b906137c5565b60405180910390a460028401805463ff0000001916630100000060ff8516021790555b600284015460ff828116600160281b90920416146129b0576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028601548654919260ff600160281b909204821692918516916000805160206139348339815191529161298b9160481b906137c5565b60405180910390a460028401805465ff00000000001916600160281b60ff8416021790555b50505050565b600284015460ff848116911614612a3757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028601548654919260ff918216929187169160008051602061393483398151915291612a1d9160481b906137c5565b60405180910390a460028401805460ff191660ff85161790555b600284015460ff838116620100009092041614612acc57604051716f7065726174696f6e734665654f6e42757960701b815260120160405190819003812060028601548654919260ff620100009092048216929186169160008051602061393483398151915291612aab9160481b906137c5565b60405180910390a460028401805462ff000019166201000060ff8516021790555b600284015460ff82811664010000000090920416146129b0576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028601548654919260ff6401000000009092048216929185169160008051602061393483398151915291612b419160481b906137c5565b60405180910390a460028401805460ff83166401000000000264ff000000001990911617905550505050565b6001600160a01b038316612b935760405162461bcd60e51b8152600401610a1b906136fc565b6001600160a01b038216612bb95760405162461bcd60e51b8152600401610a1b90613741565b612bf6816040518060600160405280602681526020016138e6602691396001600160a01b03861660009081526020819052604090205491906127b2565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612c259082612024565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016121a2565b601c805462ffffff191690558315612cf357600560135443612c98919061364f565b11612caf57601c805460ff19166064179055612cf3565b601054601c8054640100000000830460ff9081166201000090810262ff00001991860483166101000261ffff19909416929095169190911791909117169190911790555b8215612d3f57601054601c805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b82158015612d4b575083155b8015612d9157506001600160a01b0382166000908152601a602052604090205460ff1680612d9157506001600160a01b0381166000908152601a602052604090205460ff165b15612ddc57601054601c805461010080840460ff90811661ffff1990931692909217630100000085048316919091021762ff00001916600160281b9093041662010000029190911790555b601c5460ff620100008204811691612dfc916101008204811691166137dc565b612e0691906137dc565b601c805460ff928316630100000090810263ff000000198316811793849055604080519186169386169390931781526101008404851660208201526201000084048516818401529204909216606082015290517fe732842e0997f2bd5f26f9b53d4f761dfb12c53c4352fa949eb7b4d8522dd25b9181900360800190a150505050565b6000612e9430611534565b601c54909150479060ff630100000082048116916000916002918491612ebb911687613784565b612ec591906137b1565b612ecf91906137b1565b90506000612edd828661364f565b9050612ee8816130b9565b6000612ef4854761364f565b601c54909150600090612f0c9060029060ff166137f5565b601c54612f2391906301000000900460ff16613817565b601c5460ff91821692506000916002918491612f40911686613784565b612f4a91906137b1565b612f5491906137b1565b601c549091506000908390612f7190610100900460ff1686613784565b612f7b91906137b1565b90506000612f8982846136e9565b612f93908661364f565b600d54909150612fac906001600160a01b031683613213565b8615612ffe57612fbc878461332c565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6007546040516000916001600160a01b03169083908381818185875af1925050503d806000811461304b576040519150601f19603f3d011682016040523d82523d6000602084013e613050565b606091505b50509050801561308e576040518281527fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9699060200160405180910390a15b5050601c805460ff90981663010000000263ff00000019909816979097179096555050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130ee576130ee613830565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613147573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316b919061361c565b8160018151811061317e5761317e613830565b6001600160a01b0392831660209182029290920101526006546131a4913091168461208a565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131dd908590600090869030904290600401613846565b600060405180830381600087803b1580156131f757600080fd5b505af115801561320b573d6000803e3d6000fd5b505050505050565b804710156132635760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a1b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146132b0576040519150601f19603f3d011682016040523d82523d6000602084013e6132b5565b606091505b50509050806110d25760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a1b565b6006546133449030906001600160a01b03168461208a565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156133b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111cf91906138b7565b600060208083528351808285015260005b81811015613406578581018301518582016040015282016133ea565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114e757600080fd5b6000806040838503121561344f57600080fd5b823561345a81613427565b946020939093013593505050565b60006020828403121561347a57600080fd5b5035919050565b60008060006060848603121561349657600080fd5b83356134a181613427565b925060208401356134b181613427565b929592945050506040919091013590565b6000602082840312156134d457600080fd5b813561208381613427565b80151581146114e757600080fd5b6000806040838503121561350057600080fd5b823561350b81613427565b9150602083013561351b816134df565b809150509250929050565b803560ff8116811461353757600080fd5b919050565b60008060006060848603121561355157600080fd5b61355a84613526565b925061356860208501613526565b915061357660408501613526565b90509250925092565b6000806040838503121561359257600080fd5b823561359d81613427565b9150602083013561351b81613427565b600181811c908216806135c157607f821691505b6020821081036135e157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561362e57600080fd5b815161208381613427565b634e487b7160e01b600052601160045260246000fd5b818103818111156109eb576109eb613639565b60006020828403121561367457600080fd5b8151612083816134df565b60006020828403121561369157600080fd5b5051919050565b60208082526031908201527f4d697669653a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b808201808211156109eb576109eb613639565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176109eb576109eb613639565b634e487b7160e01b600052601260045260246000fd5b6000826137c0576137c061379b565b500490565b68ffffffffffffffffff1991909116815260200190565b60ff81811683821601908111156109eb576109eb613639565b600060ff8316806138085761380861379b565b8060ff84160491505092915050565b60ff82811682821603908111156109eb576109eb613639565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138965784516001600160a01b031683529383019391830191600101613871565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138cc57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122063d775ef32f70aa4062b0af5018c30f3c9cfc311bfc3e7d2fed0d12d8cfc1d0364736f6c63430008110033
Deployed Bytecode Sourcemap
19473:18953:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19780:28;;;;;;;;;;-1:-1:-1;19780:28:0;;;;-1:-1:-1;;;19780:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;19780:28:0;;;;;;;;12315:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13139:154::-;;;;;;;;;;-1:-1:-1;13139:154:0;;;;;:::i;:::-;;:::i;30824:301::-;;;;;;;;;;-1:-1:-1;30824:301:0;;;;;:::i;:::-;;:::i;:::-;;24652:277;;;;;;;;;;;;;:::i;20752:32::-;;;;;;;;;;-1:-1:-1;20752:32:0;;;;;;;;19515:30;;;;;;;;;;-1:-1:-1;19515:30:0;;;;-1:-1:-1;;;;;19515:30:0;;;;;;-1:-1:-1;;;;;1579:32:1;;;1561:51;;1549:2;1534:18;19515:30:0;1400:218:1;12600:99:0;;;;;;;;;;-1:-1:-1;12682:12:0;;12600:99;;;1769:25:1;;;1757:2;1742:18;12600:99:0;1623:177:1;29444:260:0;;;;;;;;;;-1:-1:-1;29444:260:0;;;;;:::i;:::-;;:::i;20639:27::-;;;;;;;;;;;;;;;;13298:313;;;;;;;;;;-1:-1:-1;13298:313:0;;;;;:::i;:::-;;:::i;29187:254::-;;;;;;;;;;-1:-1:-1;29187:254:0;;;;;:::i;:::-;;:::i;19731:43::-;;;;;;;;;;-1:-1:-1;19731:43:0;;;;-1:-1:-1;;;;;19731:43:0;;;30110:711;;;;;;;;;;;;;:::i;31143:132::-;;;;;;;;;;;;;:::i;12511:84::-;;;;;;;;;;-1:-1:-1;12511:84:0;;12588:2;2653:36:1;;2641:2;2626:18;12511:84:0;2511:184:1;26817:121:0;;;;;;;;;;-1:-1:-1;26817:121:0;;;;;:::i;:::-;;:::i;24932:124::-;;;;;;;;;;;;;:::i;13616:203::-;;;;;;;;;;-1:-1:-1;13616:203:0;;;;;:::i;:::-;;:::i;26206:325::-;;;;;;;;;;-1:-1:-1;26206:325:0;;;;;:::i;:::-;;:::i;19549:38::-;;;;;;;;;;;;;;;25994:209;;;;;;;;;;-1:-1:-1;25994:209:0;;;;;:::i;:::-;;:::i;30013:94::-;;;;;;;;;;;;;:::i;31278:132::-;;;;;;;;;;;;;:::i;12704:118::-;;;;;;;;;;-1:-1:-1;12704:118:0;;;;;:::i;:::-;;:::i;11549:133::-;;;;;;;;;;;;;:::i;28576:326::-;;;;;;;;;;-1:-1:-1;28576:326:0;;;;;:::i;:::-;;:::i;26941:317::-;;;;;;;;;;-1:-1:-1;26941:317:0;;;;;:::i;:::-;;:::i;25630:361::-;;;;;;;;;;-1:-1:-1;25630:361:0;;;;;:::i;:::-;;:::i;27261:337::-;;;;;;;;;;-1:-1:-1;27261:337:0;;;;;:::i;:::-;;:::i;20038:42::-;;;;;;;;;;;;;;;;11365:70;;;;;;;;;;-1:-1:-1;11424:6:0;;-1:-1:-1;;;;;11424:6:0;11365:70;;12411:95;;;;;;;;;;;;;:::i;13824:254::-;;;;;;;;;;-1:-1:-1;13824:254:0;;;;;:::i;:::-;;:::i;12827:160::-;;;;;;;;;;-1:-1:-1;12827:160:0;;;;;:::i;:::-;;:::i;19932:60::-;;;;;;;;;;;;;;;;29707:303;;;;;;;;;;-1:-1:-1;29707:303:0;;;;;:::i;:::-;;:::i;21031:58::-;;;;;;;;;;-1:-1:-1;21031:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28905:279;;;;;;;;;;-1:-1:-1;28905:279:0;;;;;:::i;:::-;;:::i;26534:280::-;;;;;;;;;;-1:-1:-1;26534:280:0;;;;;:::i;:::-;;:::i;31413:160::-;;;;;;;;;;-1:-1:-1;31495:23:0;;;;;;;31520:24;;;;;;31546:21;;;;;31413:160;;;;4378:4:1;4366:17;;;4348:36;;4420:17;;;4415:2;4400:18;;4393:45;4474:17;;4454:18;;;4447:45;;;;4336:2;4321:18;31413:160:0;4158:340:1;20112:69:0;;;;;;;;;;;;;;;;25425:202;;;;;;;;;;-1:-1:-1;25425:202:0;;;;;:::i;:::-;;:::i;27601:640::-;;;;;;;;;;-1:-1:-1;27601:640:0;;;;;:::i;:::-;;:::i;20187:30::-;;;;;;;;;;-1:-1:-1;20187:30:0;;;;-1:-1:-1;;;;;20187:30:0;;;12992:142;;;;;;;;;;-1:-1:-1;12992:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;13102:18:0;;;13081:7;13102:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12992:142;28259:314;;;;;;;;;;-1:-1:-1;28259:314:0;;;;;:::i;:::-;;:::i;11687:223::-;;;;;;;;;;-1:-1:-1;11687:223:0;;;;;:::i;:::-;;:::i;20224:31::-;;;;;;;;;;-1:-1:-1;20224:31:0;;;;-1:-1:-1;;;;;20224:31:0;;;31576:164;;;;;;;;;;-1:-1:-1;31659:24:0;;;;;;;;;31685:25;;;;;;-1:-1:-1;;;31712:22:0;;;;31576:164;;12315:91;12369:13;12396:5;12389:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12315:91;:::o;13139:154::-;13222:4;13233:39;10831:10;13256:7;13265:6;13233:8;:39::i;:::-;-1:-1:-1;13284:4:0;13139:154;;;;;:::o;30824:301::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;;;;;;;;;30907:21:::1;30898:6;:30;30890:88;;;::::0;-1:-1:-1;;;30890:88:0;;5844:2:1;30890:88:0::1;::::0;::::1;5826:21:1::0;5883:2;5863:18;;;5856:30;5922:34;5902:18;;;5895:62;-1:-1:-1;;;5973:18:1;;;5966:43;6026:19;;30890:88:0::1;5642:409:1::0;30890:88:0::1;30984:12;31009:7;11424:6:::0;;-1:-1:-1;;;;;11424:6:0;;11365:70;31009:7:::1;-1:-1:-1::0;;;;;31001:21:0::1;31031:6;31001:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30983:59;;;31051:7;31047:74;;;31084:15;::::0;:22:::1;::::0;;-1:-1:-1;;;31084:22:0;;;;31070:45:::1;::::0;-1:-1:-1;;;;;31084:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31070:45;::::0;;-1:-1:-1;;;;;6714:32:1;;;6696:51;;6778:2;6763:18;;6756:34;;;6669:18;31070:45:0::1;;;;;;;31047:74;30885:240;30824:301:::0;:::o;24652:277::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;24703:16:::1;:23:::0;;-1:-1:-1;;;;24703:23:0::1;-1:-1:-1::0;;;24703:23:0::1;::::0;;24741:21:::1;::::0;24703:23;24741:26;24737:146:::1;;24808:15;24784:21;:39:::0;24859:12:::1;24838:18;:33:::0;24737:146:::1;24892:32;::::0;24918:5:::1;::::0;24892:32;;::::1;::::0;24918:5;;24892:32:::1;24652:277::o:0;29444:260::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;29539:11:::1;;29527:8;:23:::0;29519:82:::1;;;::::0;-1:-1:-1;;;29519:82:0;;7003:2:1;29519:82:0::1;::::0;::::1;6985:21:1::0;7042:2;7022:18;;;7015:30;7081:34;7061:18;;;7054:62;-1:-1:-1;;;7132:18:1;;;7125:44;7186:19;;29519:82:0::1;6801:410:1::0;29519:82:0::1;29654:11;::::0;29617:49:::1;::::0;29644:8;;29617:49:::1;::::0;;;::::1;29677:11;:22:::0;29444:260::o;13298:313::-;13417:4;13428:36;13438:6;13446:9;13457:6;13428:9;:36::i;:::-;13469:121;13478:6;10831:10;13500:89;13538:6;13500:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13500:19:0;;;;;;:11;:19;;;;;;;;10831:10;13500:33;;;;;;;;;;:37;:89::i;:::-;13469:8;:121::i;:::-;-1:-1:-1;13602:4:0;13298:313;;;;;:::o;29187:254::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;29277:15:::1;;29265:8;:27:::0;29257:90:::1;;;::::0;-1:-1:-1;;;29257:90:0;;7418:2:1;29257:90:0::1;::::0;::::1;7400:21:1::0;7457:2;7437:18;;;7430:30;7496:34;7476:18;;;7469:62;-1:-1:-1;;;7547:18:1;;;7540:48;7605:19;;29257:90:0::1;7216:414:1::0;29257:90:0::1;29389:15;::::0;29357:48:::1;::::0;29379:8;;29357:48:::1;::::0;;;::::1;29410:15;:26:::0;29187:254::o;30110:711::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;30195:1:::1;30171:21;;:25;30163:70;;;::::0;-1:-1:-1;;;30163:70:0;;7837:2:1;30163:70:0::1;::::0;::::1;7819:21:1::0;;;7856:18;;;7849:30;7915:34;7895:18;;;7888:62;7967:18;;30163:70:0::1;7635:356:1::0;30163:70:0::1;30247:20;::::0;::::1;;30246:21;30238:80;;;::::0;-1:-1:-1;;;30238:80:0;;8198:2:1;30238:80:0::1;::::0;::::1;8180:21:1::0;8237:2;8217:18;;;8210:30;8276:34;8256:18;;;8249:62;-1:-1:-1;;;8327:18:1;;;8320:44;8381:19;;30238:80:0::1;7996:410:1::0;30238:80:0::1;30367:1;30346:18;;30331:12;:33;;;;:::i;:::-;:37;30323:94;;;::::0;-1:-1:-1;;;30323:94:0;;8878:2:1;30323:94:0::1;::::0;::::1;8860:21:1::0;8917:2;8897:18;;;8890:30;8956:34;8936:18;;;8929:62;-1:-1:-1;;;9007:18:1;;;9000:42;9059:19;;30323:94:0::1;8676:408:1::0;30323:94:0::1;30422:20;30445:24;30463:4;30445:9;:24::i;:::-;30474:20;:27:::0;;-1:-1:-1;;30474:27:0::1;30497:4;30474:27;::::0;;30514:12:::1;::::0;30422:47;;-1:-1:-1;30514:28:0;-1:-1:-1;30514:28:0::1;30506:87;;;::::0;-1:-1:-1;;;30506:87:0;;9291:2:1;30506:87:0::1;::::0;::::1;9273:21:1::0;9330:2;9310:18;;;9303:30;9369:34;9349:18;;;9342:62;-1:-1:-1;;;9420:18:1;;;9413:44;9474:19;;30506:87:0::1;9089:410:1::0;30506:87:0::1;30615:12;::::0;;30598:14:::1;30632:16:::0;;;;30615:12;30691:4:::1;30676:30;30707:7;11424:6:::0;;-1:-1:-1;;;;;11424:6:0;;11365:70;30707:7:::1;30676:47;::::0;-1:-1:-1;;;;;;30676:47:0::1;::::0;;;;;;-1:-1:-1;;;;;6714:32:1;;;30676:47:0::1;::::0;::::1;6696:51:1::0;6763:18;;;6756:34;;;6669:18;;30676:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30659:64;;30738:7;30734:80;;;30766:36;::::0;;30788:4:::1;6696:51:1::0;;6778:2;6763:18;;6756:34;;;30766:36:0::1;::::0;6669:18:1;30766:36:0::1;;;;;;;30734:80;30158:663;;;30110:711::o:0;31143:132::-;31227:15;;:43;;;-1:-1:-1;;;31227:43:0;;;;31206:7;;-1:-1:-1;;;;;31227:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31220:50;;31143:132;:::o;26817:121::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;26888:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;26888:45:0;;-1:-1:-1;;;;;1579:32:1;;;26888:45:0::1;::::0;::::1;1561:51:1::0;26888:15:0;;::::1;::::0;:36:::1;::::0;1534:18:1;;26888:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26817:121:::0;:::o;24932:124::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;24985:16:::1;:24:::0;;-1:-1:-1;;;;24985:24:0::1;::::0;;25019:32:::1;::::0;24985:24;;25004:5:::1;::::0;25019:32:::1;::::0;25004:5;;25019:32:::1;24932:124::o:0;13616:203::-;10831:10;13704:4;13747:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13747:34:0;;;;;;;;;;13704:4;;13715:83;;13738:7;;13747:50;;13786:10;13747:38;:50::i;26206:325::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26308:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;26300:115:::1;;;::::0;-1:-1:-1;;;26300:115:0;;10145:2:1;26300:115:0::1;::::0;::::1;10127:21:1::0;10184:2;10164:18;;;10157:30;10223:34;10203:18;;;10196:62;10294:25;10274:18;;;10267:53;10337:19;;26300:115:0::1;9943:419:1::0;26300:115:0::1;-1:-1:-1::0;;;;;26420:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;26420:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26476:50;;154:41:1;;;26476:50:0::1;::::0;127:18:1;26476:50:0::1;;;;;;;;26206:325:::0;;:::o;25994:209::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26067:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;26059:61;;;::::0;-1:-1:-1;;;26059:61:0;;10569:2:1;26059:61:0::1;::::0;::::1;10551:21:1::0;10608:2;10588:18;;;10581:30;10647:31;10627:18;;;10620:59;10696:18;;26059:61:0::1;10367:353:1::0;26059:61:0::1;-1:-1:-1::0;;;;;26125:19:0;::::1;26147:5;26125:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;26125:27:0::1;::::0;;26162:36;26147:5;;26125:19;26162:36:::1;::::0;26147:5;;26162:36:::1;25994:209:::0;:::o;30013:94::-;30044:15;;:58;;-1:-1:-1;;;30044:58:0;;30083:10;30044:58;;;10909:51:1;30044:15:0;10976:18:1;;;10969:50;-1:-1:-1;;;;;30044:15:0;;;;:30;;10882:18:1;;30044:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30013:94::o;31278:132::-;31364:15;;:41;;;-1:-1:-1;;;31364:41:0;;;;31343:7;;-1:-1:-1;;;;;31364:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;12704:118;-1:-1:-1;;;;;12799:18:0;12778:7;12799:18;;;;;;;;;;;;12704:118::o;11549:133::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;11634:6:::1;::::0;11613:40:::1;::::0;11650:1:::1;::::0;-1:-1:-1;;;;;11634:6:0::1;::::0;11613:40:::1;::::0;11650:1;;11613:40:::1;11658:6;:19:::0;;-1:-1:-1;;;;;;11658:19:0::1;::::0;;11549:133::o;28576:326::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;28707:92:::1;28731:5;28738:19;28759:20;28781:17;28707:23;:92::i;:::-;28809:88;::::0;-1:-1:-1;;;11232:28:1;;11285:2;11276:12;28809:88:0::1;;::::0;;;;;::::1;::::0;;4378:4:1;4366:17;;;4348:36;;4420:17;;;4415:2;4400:18;;4393:45;4474:17;;4454:18;;;4447:45;28809:88:0;;;;::::1;::::0;;;;;4336:2:1;28809:88:0;;::::1;28576:326:::0;;;:::o;26941:317::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27040:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;27032:112:::1;;;;-1:-1:-1::0;;;27032:112:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27149:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;27149:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27208:45;;154:41:1;;;27208:45:0::1;::::0;127:18:1;27208:45:0::1;14:187:1::0;25630:361:0;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25702:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;25701:20;25693:66;;;::::0;-1:-1:-1;;;25693:66:0;;11919:2:1;25693:66:0::1;::::0;::::1;11901:21:1::0;11958:2;11938:18;;;11931:30;11997:34;11977:18;;;11970:62;-1:-1:-1;;;12048:18:1;;;12041:31;12089:19;;25693:66:0::1;11717:397:1::0;25693:66:0::1;25768:21;::::0;:25;25764:147:::1;;25853:6;25828:21;;25810:15;:39;;;;:::i;:::-;25809:50;25801:104;;;::::0;-1:-1:-1;;;25801:104:0;;12321:2:1;25801:104:0::1;::::0;::::1;12303:21:1::0;12360:2;12340:18;;;12333:30;12399:34;12379:18;;;12372:62;-1:-1:-1;;;12450:18:1;;;12443:39;12499:19;;25801:104:0::1;12119:405:1::0;25801:104:0::1;-1:-1:-1::0;;;;;25915:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;25915:26:0::1;25937:4;25915:26:::0;;::::1;::::0;;;25951:35;;25937:4;;25915:19;25951:35:::1;::::0;::::1;25630:361:::0;:::o;27261:337::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27365:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;27357:117:::1;;;;-1:-1:-1::0;;;27357:117:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27479:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;27479:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27543:50;;154:41:1;;;27543:50:0::1;::::0;127:18:1;27543:50:0::1;14:187:1::0;12411:95:0;12467:13;12494:7;12487:14;;;;;:::i;13824:254::-;13917:4;13928:129;10831:10;13951:7;13960:96;13999:15;13960:96;;;;;;;;;;;;;;;;;10831:10;13960:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13960:34:0;;;;;;;;;;;;:38;:96::i;12827:160::-;12913:4;12924:42;10831:10;12948:9;12959:6;12924:9;:42::i;29707:303::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;29805:23:::1;;29793:8;:35:::0;29785:106:::1;;;::::0;-1:-1:-1;;;29785:106:0;;12731:2:1;29785:106:0::1;::::0;::::1;12713:21:1::0;12770:2;12750:18;;;12743:30;12809:34;12789:18;;;12782:62;12880:28;12860:18;;;12853:56;12926:19;;29785:106:0::1;12529:422:1::0;29785:106:0::1;29942:23;::::0;29901:65:::1;::::0;29932:8;;29901:65:::1;::::0;;;::::1;29971:23;:34:::0;29707:303::o;28905:279::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;29005:15:::1;::::0;-1:-1:-1;;;;;29005:15:0;;::::1;28983:38:::0;;::::1;::::0;28975:93:::1;;;::::0;-1:-1:-1;;;28975:93:0;;13158:2:1;28975:93:0::1;::::0;::::1;13140:21:1::0;13197:2;13177:18;;;13170:30;13236:34;13216:18;;;13209:62;-1:-1:-1;;;13287:18:1;;;13280:40;13337:19;;28975:93:0::1;12956:406:1::0;28975:93:0::1;29120:15;::::0;29078:59:::1;::::0;-1:-1:-1;;;;;29120:15:0;;::::1;::::0;29078:59;::::1;::::0;::::1;::::0;29120:15:::1;::::0;29078:59:::1;29142:15;:37:::0;;-1:-1:-1;;;;;;29142:37:0::1;-1:-1:-1::0;;;;;29142:37:0;;;::::1;::::0;;;::::1;::::0;;28905:279::o;26534:280::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26623:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;26615:101:::1;;;;-1:-1:-1::0;;;26615:101:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26721:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;26721:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26769:40;;154:41:1;;;26769:40:0::1;::::0;127:18:1;26769:40:0::1;14:187:1::0;25425:202:0;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25514:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;25514:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25572:50;;154:41:1;;;25572:50:0::1;::::0;127:18:1;25572:50:0::1;14:187:1::0;27601:640:0;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;27705:15:::1;::::0;-1:-1:-1;;;;;27705:37:0;;::::1;:15:::0;::::1;:37;27702:258;;-1:-1:-1::0;;;;;27758:32:0;::::1;27750:83;;;::::0;-1:-1:-1;;;27750:83:0;;13569:2:1;27750:83:0::1;::::0;::::1;13551:21:1::0;13608:2;13588:18;;;13581:30;13647:34;13627:18;;;13620:62;-1:-1:-1;;;13698:18:1;;;13691:36;13744:19;;27750:83:0::1;13367:402:1::0;27750:83:0::1;27896:15;::::0;27844:68:::1;::::0;-1:-1:-1;;;13976:30:1;;-1:-1:-1;;;;;27896:15:0;;::::1;::::0;27844:68;::::1;::::0;14031:2:1;14022:12;27844:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;27918:15;:36:::0;;-1:-1:-1;;;;;;27918:36:0::1;-1:-1:-1::0;;;;;27918:36:0;::::1;;::::0;;27702:258:::1;27973:16;::::0;-1:-1:-1;;;;;27973:39:0;;::::1;:16:::0;::::1;:39;27970:267;;-1:-1:-1::0;;;;;28028:33:0;::::1;28020:85;;;::::0;-1:-1:-1;;;28020:85:0;;14247:2:1;28020:85:0::1;::::0;::::1;14229:21:1::0;14286:2;14266:18;;;14259:30;14325:34;14305:18;;;14298:62;-1:-1:-1;;;14376:18:1;;;14369:37;14423:19;;28020:85:0::1;14045:403:1::0;28020:85:0::1;28170:16;::::0;28116:71:::1;::::0;-1:-1:-1;;;14655:31:1;;-1:-1:-1;;;;;28170:16:0;;::::1;::::0;28116:71;::::1;::::0;14711:2:1;14702:12;28116:71:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;28193:16;:38:::0;;-1:-1:-1;;;;;28193:38:0;::::1;-1:-1:-1::0;;;;;;28193:38:0;;::::1;;::::0;;27601:640;;:::o;28259:314::-;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;28386:88:::1;28409:5;28416:18;28436:19;28457:16;28386:22;:88::i;:::-;28484:84;::::0;-1:-1:-1;;;14927:27:1;;14979:2;14970:12;28484:84:0::1;14725:263:1::0;11687:223:0;11474:6;;-1:-1:-1;;;;;11474:6:0;10831:10;11474:22;11466:67;;;;-1:-1:-1;;;11466:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11770:22:0;::::1;11762:73;;;::::0;-1:-1:-1;;;11762:73:0;;15195:2:1;11762:73:0::1;::::0;::::1;15177:21:1::0;15234:2;15214:18;;;15207:30;15273:34;15253:18;;;15246:62;-1:-1:-1;;;15324:18:1;;;15317:36;15370:19;;11762:73:0::1;14993:402:1::0;11762:73:0::1;11866:6;::::0;11845:38:::1;::::0;-1:-1:-1;;;;;11845:38:0;;::::1;::::0;11866:6:::1;::::0;11845:38:::1;::::0;11866:6:::1;::::0;11845:38:::1;11888:6;:17:::0;;-1:-1:-1;;;;;;11888:17:0::1;-1:-1:-1::0;;;;;11888:17:0;;;::::1;::::0;;;::::1;::::0;;11687:223::o;6473:160::-;6531:7;;6557:5;6561:1;6557;:5;:::i;:::-;6545:17;;6580:1;6575;:6;;6567:46;;;;-1:-1:-1;;;6567:46:0;;15732:2:1;6567:46:0;;;15714:21:1;15771:2;15751:18;;;15744:30;15810:29;15790:18;;;15783:57;15857:18;;6567:46:0;15530:351:1;6567:46:0;6627:1;6473:160;-1:-1:-1;;;6473:160:0:o;15329:330::-;-1:-1:-1;;;;;15438:19:0;;15430:68;;;;-1:-1:-1;;;15430:68:0;;16088:2:1;15430:68:0;;;16070:21:1;16127:2;16107:18;;;16100:30;16166:34;16146:18;;;16139:62;-1:-1:-1;;;16217:18:1;;;16210:34;16261:19;;15430:68:0;15886:400:1;15430:68:0;-1:-1:-1;;;;;15511:21:0;;15503:68;;;;-1:-1:-1;;;15503:68:0;;16493:2:1;15503:68:0;;;16475:21:1;16532:2;16512:18;;;16505:30;16571:34;16551:18;;;16544:62;-1:-1:-1;;;16622:18:1;;;16615:32;16664:19;;15503:68:0;16291:398:1;15503:68:0;-1:-1:-1;;;;;15576:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15622:32;;1769:25:1;;;15622:32:0;;1742:18:1;15622:32:0;;;;;;;;15329:330;;;:::o;31755:2017::-;-1:-1:-1;;;;;31862:18:0;;31854:68;;;;-1:-1:-1;;;31854:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31936:16:0;;31928:64;;;;-1:-1:-1;;;31928:64:0;;;;;;;:::i;:::-;32003:6;32013:1;32003:11;32000:71;;32023:28;32039:4;32045:2;32049:1;32023:15;:28::i;32000:71::-;-1:-1:-1;;;;;32085:35:0;;;;;;:29;:35;;;;;;;;32084:36;:74;;;;-1:-1:-1;;;;;;32125:33:0;;;;;;:29;:33;;;;;;;;32124:34;32084:74;32081:650;;;32175:16;;-1:-1:-1;;;32175:16:0;;;;32167:66;;;;-1:-1:-1;;;32167:66:0;;17706:2:1;32167:66:0;;;17688:21:1;17745:2;17725:18;;;17718:30;17784:34;17764:18;;;17757:62;-1:-1:-1;;;17835:18:1;;;17828:35;17880:19;;32167:66:0;17504:401:1;32167:66:0;-1:-1:-1;;;;;32249:14:0;;;;;;:10;:14;;;;;;;;32248:15;32240:53;;;;-1:-1:-1;;;32240:53:0;;18112:2:1;32240:53:0;;;18094:21:1;18151:2;18131:18;;;18124:30;-1:-1:-1;;;18170:18:1;;;18163:55;18235:18;;32240:53:0;17910:349:1;32240:53:0;-1:-1:-1;;;;;32309:16:0;;;;;;:10;:16;;;;;;;;32308:17;32300:55;;;;-1:-1:-1;;;32300:55:0;;18112:2:1;32300:55:0;;;18094:21:1;18151:2;18131:18;;;18124:30;-1:-1:-1;;;18170:18:1;;;18163:55;18235:18;;32300:55:0;17910:349:1;32300:55:0;-1:-1:-1;;;;;32367:33:0;;;;;;:29;:33;;;;;;;;32362:170;;32446:15;;32435:6;32419:13;32429:2;32419:9;:13::i;:::-;:22;;;;:::i;:::-;32418:43;;32410:114;;;;-1:-1:-1;;;32410:114:0;;18466:2:1;32410:114:0;;;18448:21:1;18505:2;18485:18;;;18478:30;18544:34;18524:18;;;18517:62;18615:28;18595:18;;;18588:56;18661:19;;32410:114:0;18264:422:1;32410:114:0;-1:-1:-1;;;;;32543:38:0;;;;;;:34;:38;;;;;;;;32542:39;:84;;;;-1:-1:-1;;;;;;32586:40:0;;;;;;:34;:40;;;;;;;;32585:41;32542:84;32538:187;;;32654:11;;32644:6;:21;;32636:81;;;;-1:-1:-1;;;32636:81:0;;18893:2:1;32636:81:0;;;18875:21:1;18932:2;18912:18;;;18905:30;18971:34;18951:18;;;18944:62;-1:-1:-1;;;19022:18:1;;;19015:45;19077:19;;32636:81:0;18691:411:1;32636:81:0;-1:-1:-1;;;;;32751:31:0;;;;;;;:25;:31;;;;;;;32784:29;;;;;;;;32738:86;;32751:31;;;;;32784:29;32777:4;32810:2;32738:12;:86::i;:::-;32830:12;32873:23;;32845:24;32863:4;32845:9;:24::i;:::-;32914:16;;-1:-1:-1;;32845:51:0;;-1:-1:-1;;;;32914:16:0;;;;:32;;;;;32939:7;32914:32;:51;;;;-1:-1:-1;32956:9:0;;;;32955:10;32914:51;:73;;;;-1:-1:-1;32974:9:0;;;;;;;:13;;32914:73;:111;;;;-1:-1:-1;;;;;;32996:29:0;;;;;;:25;:29;;;;;;;;32914:111;32904:206;;;33039:9;:16;;-1:-1:-1;;33039:16:0;33051:4;33039:16;;;33062:17;:15;:17::i;:::-;33086:9;:17;;-1:-1:-1;;33086:17:0;;;32904:206;33133:9;;33117:12;;33133:9;;33132:10;:30;;;;-1:-1:-1;33146:16:0;;-1:-1:-1;;;33146:16:0;;;;33132:30;-1:-1:-1;;;;;33173:24:0;;;;;;:18;:24;;;;;;33117:45;;-1:-1:-1;33173:24:0;;;:50;;-1:-1:-1;;;;;;33201:22:0;;;;;;:18;:22;;;;;;;;33173:50;33170:83;;;-1:-1:-1;33241:5:0;33170:83;33262:7;:24;;;;-1:-1:-1;33273:9:0;;;;;;;:13;;33262:24;33258:313;;;33318:9;;33295:11;;33330:3;;33309:18;;33318:9;;;;;33309:6;:18;:::i;:::-;:24;;;;:::i;:::-;33295:38;-1:-1:-1;33349:12:0;33295:38;33349:6;:12;:::i;:::-;33340:21;;33408:1;33384:21;;:25;:69;;;;;33451:1;33429:18;;33414:12;:33;;;;:::i;:::-;:38;;33384:69;33380:137;;;33494:3;33478:12;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;33380:137:0;33523:41;33539:4;33553;33560:3;33523:15;:41::i;:::-;33288:283;33258:313;33578:33;33594:4;33600:2;33604:6;33578:15;:33::i;:::-;33623:15;;-1:-1:-1;;;;;33623:15:0;:26;33658:4;33665:15;33658:4;33665:9;:15::i;:::-;33623:58;;-1:-1:-1;;;;;;33623:58:0;;;;;;;-1:-1:-1;;;;;6714:32:1;;;33623:58:0;;;6696:51:1;6763:18;;;6756:34;6669:18;;33623:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33619:74;33702:15;;-1:-1:-1;;;;;33702:15:0;:26;33737:2;33742:13;33737:2;33742:9;:13::i;:::-;33702:54;;-1:-1:-1;;;;;;33702:54:0;;;;;;;-1:-1:-1;;;;;6714:32:1;;;33702:54:0;;;6696:51:1;6763:18;;;6756:34;6669:18;;33702:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33698:70;;;31848:1924;;31755:2017;;;:::o;6770:171::-;6856:7;6886:12;6878:6;;;;6870:29;;;;-1:-1:-1;;;6870:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6904:9:0;6916:5;6920:1;6916;:5;:::i;:::-;6904:17;6770:171;-1:-1:-1;;;;;6770:171:0:o;34788:838::-;34959:22;;;;:45;;;;:22;;;;;:45;34955:222;;35017:104;;-1:-1:-1;;;20034:33:1;;20092:2;20083:12;35017:104:0;;;;;;;;35060:22;;;;35106:14;;35017:104;;35060:22;;;;;;;;35017:104;;;;-1:-1:-1;;;;;;;;;;;35017:104:0;;;35106:14;;;35017:104;:::i;:::-;;;;;;;;35127:22;;;:44;;-1:-1:-1;;35127:44:0;;;;;;;;;34955:222;35185:23;;;;:47;;;;:23;;;;;:47;35181:229;;35245:107;;-1:-1:-1;;;20522:34:1;;20581:2;20572:12;35245:107:0;;;;;;;;35289:23;;;;35337:14;;35245:107;;35289:23;;;;;;;;35245:107;;;;-1:-1:-1;;;;;;;;;;;35245:107:0;;;35337:14;;;35245:107;:::i;:::-;;;;;;;;35358:23;;;:46;;-1:-1:-1;;35358:46:0;;;;;;;;;35181:229;35418:20;;;;:41;;;;-1:-1:-1;;;35418:20:0;;;;:41;35414:208;;35472:98;;-1:-1:-1;;;20797:31:1;;20853:2;20844:12;35472:98:0;;;;;;;;35513:20;;;;35555:14;;35472:98;;35513:20;-1:-1:-1;;;35513:20:0;;;;;;35472:98;;;;-1:-1:-1;;;;;;;;;;;35472:98:0;;;35555:14;;;35472:98;:::i;:::-;;;;;;;;35576:20;;;:40;;-1:-1:-1;;35576:40:0;-1:-1:-1;;;35576:40:0;;;;;;;35414:208;34788:838;;;;:::o;35629:814::-;35797:21;;;;:43;;;;:21;;:43;35793:215;;35853:101;;-1:-1:-1;;;21069:32:1;;21126:2;21117:12;35853:101:0;;;;;;;;35895:21;;;;35939:14;;35853:101;;35895:21;;;;;35853:101;;;;-1:-1:-1;;;;;;;;;;;35853:101:0;;;35939:14;;;35853:101;:::i;:::-;;;;;;;;35960:21;;;:42;;-1:-1:-1;;35960:42:0;;;;;;;35793:215;36016:22;;;;:45;;;;:22;;;;;:45;36012:222;;36074:104;;-1:-1:-1;;;21342:33:1;;21400:2;21391:12;36074:104:0;;;;;;;;36117:22;;;;36163:14;;36074:104;;36117:22;;;;;;;;36074:104;;;;-1:-1:-1;;;;;;;;;;;36074:104:0;;;36163:14;;;36074:104;:::i;:::-;;;;;;;;36184:22;;;:44;;-1:-1:-1;;36184:44:0;;;;;;;;;36012:222;36242:19;;;;:39;;;;:19;;;;;:39;36238:201;;36294:95;;-1:-1:-1;;;21616:30:1;;21671:2;21662:12;36294:95:0;;;;;;;;36334:19;;;;36374:14;;36294:95;;36334:19;;;;;;;;36294:95;;;;-1:-1:-1;;;;;;;;;;;36294:95:0;;;36374:14;;;36294:95;:::i;:::-;;;;;;;;36395:19;;;:38;;;;;;;-1:-1:-1;;36395:38:0;;;;;;35629:814;;;;:::o;14083:509::-;-1:-1:-1;;;;;14196:20:0;;14188:70;;;;-1:-1:-1;;;14188:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14271:23:0;;14263:71;;;;-1:-1:-1;;;14263:71:0;;;;;;;:::i;:::-;14411;14433:6;14411:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14411:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;14391:17:0;;;:9;:17;;;;;;;;;;;:91;;;;14510:20;;;;;;;:32;;14535:6;14510:24;:32::i;:::-;-1:-1:-1;;;;;14487:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;14552:35;1769:25:1;;;14487:20:0;;14552:35;;;;;;1742:18:1;14552:35:0;1623:177:1;33775:1010:0;33871:13;:17;;-1:-1:-1;;33916:15:0;;;33938:263;;;;34007:1;33984:18;;33969:12;:33;;;;:::i;:::-;33968:40;33964:232;;34017:13;:19;;-1:-1:-1;;34017:19:0;34033:3;34017:19;;;33964:232;;;34076:23;;34060:13;:39;;34168:21;;;34076:23;34168:21;;;34123:24;34154:35;;;-1:-1:-1;;34123:24:0;;;;;34076:23;34106:41;-1:-1:-1;;34106:41:0;;;34076:23;;;;34106:41;;;;;;;;34154:35;;;;;;;33964:232;34212:10;34208:161;;;34249:24;;34233:13;:40;;34249:24;;;;;;;;-1:-1:-1;;34279:42:0;;;;;;;34296:25;;;;;34279:42;;;;;-1:-1:-1;;34327:36:0;-1:-1:-1;;;34341:22:0;;;;34327:36;;;;;;;;34208:161;34378:10;34377:11;:27;;;;;34393:11;34392:12;34377:27;:105;;;;-1:-1:-1;;;;;;34409:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;34448:33:0;;;;;;:29;:33;;;;;;;;34409:72;34373:271;;;34506:24;;34490:13;:40;;34506:24;;;;;;;;-1:-1:-1;;34545:42:0;;;;;;;34562:25;;;;;34545:42;;;;;-1:-1:-1;;34602:36:0;-1:-1:-1;;;34616:22:0;;;;34602:36;;;;;;;;34373:271;34693:11;;;;;;;;;34660:30;;34693:11;34676:14;;;;;34660:13;:30;:::i;:::-;:44;;;;:::i;:::-;34648:9;:56;;;;;;;;;;-1:-1:-1;;34648:56:0;;;;;;;;34714:66;;;34726:13;;;;;;;;;;22053:36:1;;34648:56:0;34741:14;;;;22120:2:1;22105:18;;22098:45;34757:11:0;;;;;22159:18:1;;;22152:45;34770:9:0;;;;;22228:2:1;22213:18;;22206:45;34714:66:0;;;;;;;22040:3:1;34714:66:0;;;33775:1010;;;;:::o;36446:1207::-;36486:23;36512:24;36530:4;36512:9;:24::i;:::-;36619:9;;36486:50;;-1:-1:-1;36569:21:0;;36619:9;;;;;;;36541:25;;36707:1;;36619:9;;36661:31;;36679:13;36486:50;36661:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;36635:73;-1:-1:-1;36713:20:0;36736:33;36635:73;36736:15;:33;:::i;:::-;36713:56;;36776:31;36794:12;36776:17;:31::i;:::-;36814:27;36844:41;36868:17;36844:21;:41;:::i;:::-;36925:13;;36814:71;;-1:-1:-1;36890:19:0;;36925:17;;36941:1;;36925:13;;:17;:::i;:::-;36912:9;;:31;;;:9;;;;;:31;:::i;:::-;37001:13;;36890:53;;;;;-1:-1:-1;36950:26:0;;37031:1;;36890:53;;36979:35;;37001:13;36979:19;:35;:::i;:::-;:49;;;;:::i;:::-;:53;;;;:::i;:::-;37089:14;;36950:82;;-1:-1:-1;37037:27:0;;37106:11;;37067:36;;37089:14;;;;;37067:19;:36;:::i;:::-;:50;;;;:::i;:::-;37037:80;-1:-1:-1;37122:24:0;37172:40;37037:80;37172:18;:40;:::i;:::-;37149:64;;:19;:64;:::i;:::-;37246:16;;37122:91;;-1:-1:-1;37220:64:0;;-1:-1:-1;;;;;37246:16:0;37264:19;37220:17;:64::i;:::-;37295:19;;37291:163;;37322:50;37336:15;37353:18;37322:13;:50::i;:::-;37383:65;;;22790:25:1;;;22846:2;22831:18;;22824:34;;;22874:18;;;22867:34;;;37383:65:0;;22778:2:1;22763:18;37383:65:0;;;;;;;37291:163;37494:15;;37486:58;;37461:20;;-1:-1:-1;;;;;37494:15:0;;37523:16;;37461:20;37486:58;37461:20;37486:58;37523:16;37494:15;37486:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37460:84;;;37552:15;37549:68;;;37580:31;;1769:25:1;;;37580:31:0;;1757:2:1;1742:18;37580:31:0;;;;;;;37549:68;-1:-1:-1;;37623:9:0;:25;;;;;;;;-1:-1:-1;;37623:25:0;;;;;;;;;;-1:-1:-1;;;;;;;;36446:1207:0:o;37656:416::-;37741:16;;;37755:1;37741:16;;;;;;;;37717:21;;37741:16;;;;;;;;;;-1:-1:-1;37741:16:0;37717:40;;37780:4;37762;37767:1;37762:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37762:23:0;;;:7;;;;;;;;;;:23;;;;37800:15;;:22;;;-1:-1:-1;;;37800:22:0;;;;:15;;;;;:20;;:22;;;;;37762:7;;37800:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37790:4;37795:1;37790:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37790:32:0;;;:7;;;;;;;;;:32;37859:15;;37827:62;;37844:4;;37859:15;37877:11;37827:8;:62::i;:::-;37894:15;;:173;;-1:-1:-1;;;37894:173:0;;-1:-1:-1;;;;;37894:15:0;;;;:66;;:173;;37966:11;;37894:15;;38018:4;;38036;;38047:15;;37894:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37712:360;37656:416;:::o;2983:317::-;3098:6;3073:21;:31;;3065:73;;;;-1:-1:-1;;;3065:73:0;;24363:2:1;3065:73:0;;;24345:21:1;24402:2;24382:18;;;24375:30;24441:31;24421:18;;;24414:59;24490:18;;3065:73:0;24161:353:1;3065:73:0;3152:12;3170:9;-1:-1:-1;;;;;3170:14:0;3192:6;3170:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3151:52;;;3222:7;3214:78;;;;-1:-1:-1;;;3214:78:0;;24721:2:1;3214:78:0;;;24703:21:1;24760:2;24740:18;;;24733:30;24799:34;24779:18;;;24772:62;24870:28;24850:18;;;24843:56;24916:19;;3214:78:0;24519:422:1;38075:348:0;38183:15;;38151:62;;38168:4;;-1:-1:-1;;;;;38183:15:0;38201:11;38151:8;:62::i;:::-;38218:15;;38377;;38218:200;;-1:-1:-1;;;38218:200:0;;38281:4;38218:200;;;25287:34:1;25337:18;;;25330:34;;;38218:15:0;25380:18:1;;;25373:34;;;25423:18;;;25416:34;-1:-1:-1;;;;;38377:15:0;;;25466:19:1;;;25459:44;38398:15:0;25519:19:1;;;25512:35;38218:15:0;;;:31;;38257:9;;25221:19:1;;38218:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2700:247::-;2759:6;2812:2;2800:9;2791:7;2787:23;2783:32;2780:52;;;2828:1;2825;2818:12;2780:52;2867:9;2854:23;2886:31;2911:5;2886:31;:::i;2952:118::-;3038:5;3031:13;3024:21;3017:5;3014:32;3004:60;;3060:1;3057;3050:12;3075:382;3140:6;3148;3201:2;3189:9;3180:7;3176:23;3172:32;3169:52;;;3217:1;3214;3207:12;3169:52;3256:9;3243:23;3275:31;3300:5;3275:31;:::i;:::-;3325:5;-1:-1:-1;3382:2:1;3367:18;;3354:32;3395:30;3354:32;3395:30;:::i;:::-;3444:7;3434:17;;;3075:382;;;;;:::o;3670:156::-;3736:20;;3796:4;3785:16;;3775:27;;3765:55;;3816:1;3813;3806:12;3765:55;3670:156;;;:::o;3831:322::-;3902:6;3910;3918;3971:2;3959:9;3950:7;3946:23;3942:32;3939:52;;;3987:1;3984;3977:12;3939:52;4010:27;4027:9;4010:27;:::i;:::-;4000:37;;4056:36;4088:2;4077:9;4073:18;4056:36;:::i;:::-;4046:46;;4111:36;4143:2;4132:9;4128:18;4111:36;:::i;:::-;4101:46;;3831:322;;;;;:::o;4503:388::-;4571:6;4579;4632:2;4620:9;4611:7;4607:23;4603:32;4600:52;;;4648:1;4645;4638:12;4600:52;4687:9;4674:23;4706:31;4731:5;4706:31;:::i;:::-;4756:5;-1:-1:-1;4813:2:1;4798:18;;4785:32;4826:33;4785:32;4826:33;:::i;4896:380::-;4975:1;4971:12;;;;5018;;;5039:61;;5093:4;5085:6;5081:17;5071:27;;5039:61;5146:2;5138:6;5135:14;5115:18;5112:38;5109:161;;5192:10;5187:3;5183:20;5180:1;5173:31;5227:4;5224:1;5217:15;5255:4;5252:1;5245:15;5109:161;;4896:380;;;:::o;5281:356::-;5483:2;5465:21;;;5502:18;;;5495:30;5561:34;5556:2;5541:18;;5534:62;5628:2;5613:18;;5281:356::o;6266:251::-;6336:6;6389:2;6377:9;6368:7;6364:23;6360:32;6357:52;;;6405:1;6402;6395:12;6357:52;6437:9;6431:16;6456:31;6481:5;6456:31;:::i;8411:127::-;8472:10;8467:3;8463:20;8460:1;8453:31;8503:4;8500:1;8493:15;8527:4;8524:1;8517:15;8543:128;8610:9;;;8631:11;;;8628:37;;;8645:18;;:::i;9504:245::-;9571:6;9624:2;9612:9;9603:7;9599:23;9595:32;9592:52;;;9640:1;9637;9630:12;9592:52;9672:9;9666:16;9691:28;9713:5;9691:28;:::i;9754:184::-;9824:6;9877:2;9865:9;9856:7;9852:23;9848:32;9845:52;;;9893:1;9890;9883:12;9845:52;-1:-1:-1;9916:16:1;;9754:184;-1:-1:-1;9754:184:1:o;11299:413::-;11501:2;11483:21;;;11540:2;11520:18;;;11513:30;11579:34;11574:2;11559:18;;11552:62;-1:-1:-1;;;11645:2:1;11630:18;;11623:47;11702:3;11687:19;;11299:413::o;15400:125::-;15465:9;;;15486:10;;;15483:36;;;15499:18;;:::i;16694:401::-;16896:2;16878:21;;;16935:2;16915:18;;;16908:30;16974:34;16969:2;16954:18;;16947:62;-1:-1:-1;;;17040:2:1;17025:18;;17018:35;17085:3;17070:19;;16694:401::o;17100:399::-;17302:2;17284:21;;;17341:2;17321:18;;;17314:30;17380:34;17375:2;17360:18;;17353:62;-1:-1:-1;;;17446:2:1;17431:18;;17424:33;17489:3;17474:19;;17100:399::o;19107:168::-;19180:9;;;19211;;19228:15;;;19222:22;;19208:37;19198:71;;19249:18;;:::i;19280:127::-;19341:10;19336:3;19332:20;19329:1;19322:31;19372:4;19369:1;19362:15;19396:4;19393:1;19386:15;19412:120;19452:1;19478;19468:35;;19483:18;;:::i;:::-;-1:-1:-1;19517:9:1;;19412:120::o;20106:209::-;-1:-1:-1;;20270:38:1;;;;20252:57;;20240:2;20225:18;;20106:209::o;21685:148::-;21773:4;21752:12;;;21766;;;21748:31;;21791:13;;21788:39;;;21807:18;;:::i;22262:165::-;22300:1;22334:4;22331:1;22327:12;22358:3;22348:37;;22365:18;;:::i;:::-;22417:3;22410:4;22407:1;22403:12;22399:22;22394:27;;;22262:165;;;;:::o;22432:151::-;22522:4;22515:12;;;22501;;;22497:31;;22540:14;;22537:40;;;22557:18;;:::i;23044:127::-;23105:10;23100:3;23096:20;23093:1;23086:31;23136:4;23133:1;23126:15;23160:4;23157:1;23150:15;23176:980;23438:4;23486:3;23475:9;23471:19;23517:6;23506:9;23499:25;23543:2;23581:6;23576:2;23565:9;23561:18;23554:34;23624:3;23619:2;23608:9;23604:18;23597:31;23648:6;23683;23677:13;23714:6;23706;23699:22;23752:3;23741:9;23737:19;23730:26;;23791:2;23783:6;23779:15;23765:29;;23812:1;23822:195;23836:6;23833:1;23830:13;23822:195;;;23901:13;;-1:-1:-1;;;;;23897:39:1;23885:52;;23992:15;;;;23957:12;;;;23933:1;23851:9;23822:195;;;-1:-1:-1;;;;;;;24073:32:1;;;;24068:2;24053:18;;24046:60;-1:-1:-1;;;24137:3:1;24122:19;24115:35;24034:3;23176:980;-1:-1:-1;;;23176:980:1:o;25558:306::-;25646:6;25654;25662;25715:2;25703:9;25694:7;25690:23;25686:32;25683:52;;;25731:1;25728;25721:12;25683:52;25760:9;25754:16;25744:26;;25810:2;25799:9;25795:18;25789:25;25779:35;;25854:2;25843:9;25839:18;25833:25;25823:35;;25558:306;;;;;:::o
Swarm Source
ipfs://1287f686b3f21ac5c06180c653d10c6a5784a56daf2dae26d5df993bda732ae2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,380 | 0.000000000000000005 | <$0.000001 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.