Feature Tip: Add private address tag to any address under My Name Tag !
Token migration announcement. Dogira token contract has migrated to a new address.
ERC-20
Old Contract
Overview
Max Total Supply
100,000,000 DOGIRA
Holders
3,261 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
5,021.272662538527113221 DOGIRAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Dogira
Compiler Version
v0.8.1+commit.df193b15
Optimization Enabled:
Yes with 420 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-08 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Owned is Context { address private _owner; address private _pendingOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier ownerOnly { require(_owner == _msgSender(), "Owner only"); _; } modifier pendingOnly { require (_pendingOwner == msg.sender, "cannot claim"); _; } function pendingOwner() public view returns (address) { return _pendingOwner; } function renounceOwnership() public virtual ownerOnly { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public ownerOnly { require(newOwner != address(0), "Ownable: new owner is the zero address"); _pendingOwner = newOwner; } function cancelTransfer() public ownerOnly { require(_pendingOwner != address(0), "no pending owner"); _pendingOwner = address(0); } function claimOwnership() public pendingOnly { _pendingOwner = address(0); emit OwnershipTransferred(_owner, _msgSender()); _owner = _msgSender(); } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } contract Pool {} library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } contract Storage { struct Addresses { address pool; address router; address pair; address protocol; address dogecity; address prizePool; address buyBonusPool; address presale; address rng; address farm; } struct Balance { uint256 tokenSupply; uint256 networkSupply; uint256 targetSupply; uint256 pairSupply; uint256 lpSupply; uint256 fees; uint256 burned; } struct Account { bool feeless; bool transferPair; bool excluded; uint256 lastDogeIt; uint256 tTotal; uint256 rTotal; uint256 lastShill; uint256 communityPoints; uint256 lastAward; } struct Divisors { uint8 buy; uint8 sell; // multiplied by 10000 uint8 dogecity; uint8 bonus; uint8 tokenLPBurn; uint8 inflate; uint8 buyCounter; uint8 tx; uint8 dogeitpayout; uint256 dogeify; } struct S { bool initialized; bool paused; uint8 decimals; uint8 odds; Addresses addresses; Balance balances; Divisors divisors; uint256 random; uint256 buyFee; uint256 sellFee; uint256 minBuyForBonus; uint256 buys; uint256 sells; uint256 lastAttack; uint256 attackCooldown; mapping(address => Account) accounts; mapping(address => mapping(address => uint256)) allowances; address[] entries; string symbol; string name; EnumerableSet.AddressSet excludedAccounts; } } contract State { Storage.S state; TState lastTState; enum TxType { FromExcluded, ToExcluded, BothExcluded, Standard } enum TState { Buy, Sell, Normal } } contract Getters is State { function canIDogeIt() public view returns(bool) { return state.accounts[msg.sender].lastDogeIt + state.divisors.dogeify < block.timestamp; } function isMinBuyForBonus(uint256 amount) public view returns(bool) { return amount > state.minBuyForBonus * (10 ** state.decimals); } function isFeelessTx(address sender, address recipient) public view returns(bool) { if(sender == state.addresses.presale) { return true; } return state.accounts[sender].feeless || state.accounts[recipient].feeless; } function getAccount(address account) public view returns(Storage.Account memory) { return state.accounts[account]; } function getDivisors() external view returns(Storage.Divisors memory) { return state.divisors; } function getBurned() external view returns(uint256) { return state.balances.burned; } function getFees() external view returns(uint256) { return state.balances.fees; } function getExcluded(address account) public view returns(bool) { return state.accounts[account].excluded; } function getCurrentLPBal() public view returns(uint256) { return IERC20(state.addresses.pool).totalSupply(); } function getLPBalanceOf(address account) external view returns(uint256) { return IERC20(state.addresses.pool).balanceOf(account); } function getFeeless(address account) external view returns (bool) { return state.accounts[account].feeless; } function getTState(address sender, address recipient, uint256 lpAmount) public view returns(TState t) { if(state.accounts[sender].transferPair) { if(state.balances.lpSupply != lpAmount) { // withdraw vs buy t = TState.Normal; } else { t = TState.Buy; } } else if(state.accounts[recipient].transferPair) { t = TState.Sell; } else { t = TState.Normal; } return t; } function getRouter() external view returns(address) { return state.addresses.router; } function getPair() external view returns(address) { return state.addresses.pair; } function getPool() external view returns(address) { return state.addresses.pool; } function getCirculatingSupply() public view returns(uint256, uint256) { uint256 rSupply = state.balances.networkSupply; uint256 tSupply = state.balances.tokenSupply; for (uint256 i = 0; i < EnumerableSet.length(state.excludedAccounts); i++) { address account = EnumerableSet.at(state.excludedAccounts, i); uint256 rBalance = state.accounts[account].rTotal; uint256 tBalance = state.accounts[account].tTotal; if (rBalance > rSupply || tBalance > tSupply) return (state.balances.networkSupply, state.balances.tokenSupply); rSupply -= rBalance; tSupply -= tBalance; } if (rSupply < state.balances.networkSupply / state.balances.tokenSupply) return (state.balances.networkSupply, state.balances.tokenSupply); return (rSupply, tSupply); } function getTxType(address sender, address recipient) public view returns(TxType t) { bool isSenderExcluded = state.accounts[sender].excluded; bool isRecipientExcluded = state.accounts[recipient].excluded; if (isSenderExcluded && !isRecipientExcluded) { t = TxType.FromExcluded; } else if (!isSenderExcluded && isRecipientExcluded) { t = TxType.ToExcluded; } else if (!isSenderExcluded && !isRecipientExcluded) { t = TxType.Standard; } else if (isSenderExcluded && isRecipientExcluded) { t = TxType.BothExcluded; } else { t = TxType.Standard; } } function getFee(uint256 amount, uint256 divisor) public pure returns (uint256) { return amount / divisor; } function getPrizePoolAddress() public view returns(address) { return state.addresses.prizePool; } function getPrizePoolAmount() public view returns(uint256) { return state.accounts[getPrizePoolAddress()].rTotal / ratio(); } function getBuyPoolAmount() public view returns(uint256) { return state.accounts[getBuyBonusPoolAddress()].rTotal / ratio(); } function getBuyBonusPoolAddress() public view returns(address) { return state.addresses.buyBonusPool; } function getAmountForMinBuyTax() public view returns(uint256) { return (state.balances.tokenSupply / 100); } function getBuyTax(uint256 amount) public view returns(uint256) { uint256 _ratio = amount * 100000 / state.balances.tokenSupply; if(_ratio < 1) { // .001% return state.divisors.buy; // charges whatever max buy fee is at, to discourage gaming the prizepool. } else if (_ratio >= 1000) { // 1% return state.divisors.buy * 5; // charges 1/5th of buy fee, from default is 1% } else if (_ratio >= 10 && _ratio < 100){ return state.divisors.buy * 2; // and so on. } else if (_ratio >= 100 && _ratio < 500) { return state.divisors.buy * 3; } else if (_ratio >= 500 && _ratio < 1000) { return state.divisors.buy * 4; } else { // shouldn't hit this return state.divisors.buy; } } function getTimeTillNextAttack() public view returns(uint256) { uint256 time = (state.lastAttack + state.attackCooldown); return block.timestamp > time ? block.timestamp - time : 0; } function getMaxBetAmount() public view returns(uint256) { return state.accounts[state.addresses.buyBonusPool].tTotal / state.divisors.dogeitpayout; } function getLastTState() public view returns(TState) { return lastTState; } function getLevel(address account) public view returns(uint256 level) { level = state.accounts[account].communityPoints % 1000; return level == 0 ? 1 : level; } function getXP(address account) public view returns(uint256) { return state.accounts[account].communityPoints; } function getBuyAfterSellBonus(uint256 amount) public view returns(uint256 bonus) { uint256 total = state.accounts[state.addresses.buyBonusPool].tTotal; if(amount >= total / 100) { // 1% of the pool bonus = total / state.divisors.bonus; } else if(amount >= total / 200) { // .5% of the pool bonus = total / (state.divisors.bonus * 2); } else if(amount >= total / 500) { bonus = total / (state.divisors.bonus * 3); } else if(amount >= total / 1000) { bonus = total / (state.divisors.bonus * 4); } else { bonus = total / (state.divisors.bonus * 5); } } function getBuyAfterBuyBonus() public view returns(uint256 bonus) { bonus = state.accounts[state.addresses.buyBonusPool].tTotal / 500; } function getBuyBonus(uint256 amount) public view returns(uint256) { uint256 bonus; if(lastTState == TState.Sell && amount > state.minBuyForBonus) { bonus = getBuyAfterSellBonus(amount); } else if(lastTState == TState.Buy && amount > state.minBuyForBonus) { bonus = getBuyAfterBuyBonus(); } else { bonus = 0; } return bonus > state.accounts[state.addresses.buyBonusPool].tTotal ? 0 : bonus; } function ratio() public view returns(uint256) { return state.balances.networkSupply / state.balances.tokenSupply; } } interface IDogira { function setRandomSeed(uint256 amount) external; } contract Dogira is IDogira, IERC20, Getters, Owned { struct TxValue { uint256 amount; uint256 transferAmount; uint256 fee; uint256 buyFee; uint256 sellFee; uint256 buyBonus; uint256 operationalFee; } event BonusAwarded(address account, uint256 amount); event Kek(address account, uint256 amount); event Doge(address account, uint256 amount); event Winner(address account, uint256 amount); event Smashed(uint256 amount); event Atomacized(uint256 amount); event Blazed(uint256 amount); mapping(address => bool) admins; event FarmAdded(address farm); event XPAdded(address awardee, uint256 points); event Hooray(address awardee, uint256 points); event TransferredToFarm(uint256 amount); uint256 timeLock; uint256 dogeCityInitial; uint256 public lastTeamSell; uint256 levelCap; bool rngSet; bool presaleSet; modifier onlyAdminOrOwner { require(admins[msg.sender] || msg.sender == owner(), "invalid caller"); _; } constructor() { initialize(); } uint256 constant private TOKEN_SUPPLY = 100_000_000; function name() public view returns(string memory) { return state.name; } function decimals() public view returns(uint8) { return state.decimals; } function symbol() public view returns (string memory) { return state.symbol; } function initialize() public { require(!state.initialized, "Contract instance has already been initialized"); state.initialized = true; state.decimals = 18; state.symbol = "DOGIRA"; state.name = "dogira.lol || dogira.eth.link"; state.balances.tokenSupply = TOKEN_SUPPLY * (10 ** state.decimals); state.balances.networkSupply = (~uint256(0) - (~uint256(0) % TOKEN_SUPPLY)); state.divisors.buy = 20; // 5% max - 1% depending on buy size. state.divisors.sell = 20; // 5% state.divisors.bonus = 50; state.divisors.dogecity = 100; state.divisors.inflate = 50; state.divisors.tokenLPBurn = 50; state.divisors.tx = 100; state.divisors.dogeitpayout = 100; state.divisors.dogeify = 1 hours; // 3600 seconds state.divisors.buyCounter = 10; state.odds = 4; // 1 / 4 state.minBuyForBonus = 35000e18; state.addresses.prizePool = address(new Pool()); state.addresses.buyBonusPool = address(new Pool()); state.addresses.router = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); state.addresses.dogecity = address(0xfEDD9544b47a6D4A1967D385575866BD6f7A2b37); state.addresses.pair = IUniswapV2Router02(state.addresses.router).WETH(); state.addresses.pool = IUniswapV2Factory(IUniswapV2Router02(state.addresses.router).factory()).createPair(address(this), state.addresses.pair); state.accounts[address(0)].feeless = true; state.accounts[msg.sender].feeless = true; //state.accounts[state.addresses.pool].feeless = true; state.accounts[state.addresses.pool].transferPair = true; uint256 locked = state.balances.networkSupply / 5; // 20% uint256 amount = state.balances.networkSupply - locked; state.accounts[msg.sender].rTotal = amount; // 80% dogeCityInitial = locked - (locked / 4); state.accounts[state.addresses.dogecity].feeless = true; state.accounts[state.addresses.dogecity].rTotal = dogeCityInitial; // 15% state.accounts[state.addresses.buyBonusPool].rTotal = locked / 4; // 5% state.accounts[state.addresses.buyBonusPool].tTotal = state.balances.tokenSupply / 20; // 5% state.paused = true; state.attackCooldown = 10 minutes; levelCap = 10; timeLock = block.timestamp + 3 days; } function allowance(address owner, address spender) public view override returns (uint256) { return state.allowances[owner][spender]; } function balanceOf(address account) public view override returns (uint256) { return getExcluded(account) ? state.accounts[account].tTotal : state.accounts[account].rTotal / ratio(); } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); state.allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, state.allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, state.allowances[_msgSender()][spender] - (subtractedValue)); return true; } function totalSupply() public view override returns (uint256) { return state.balances.tokenSupply; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), state.allowances[sender][_msgSender()] - amount); return true; } function _transfer(address sender, address recipient, uint256 amount) internal returns(bool) { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(sender == state.addresses.pool) { // for presales require(state.paused == false, "Transfers are paused"); } // removed setter for dogecity to prevent changing the address and making this branch useless. if(sender == state.addresses.dogecity) { require(amount <= dogeCityInitial / 20, "too much"); // 5% per day require(lastTeamSell + 1 days < block.timestamp, "too soon"); require(recipient == state.addresses.pool, "can only sell to uniswap pool"); lastTeamSell = block.timestamp; } bool noFee = isFeelessTx(sender, recipient); uint256 rate = ratio(); uint256 lpAmount = getCurrentLPBal(); (TxValue memory t, TState ts, TxType txType) = tValues(sender, recipient, amount, noFee, lpAmount); state.balances.lpSupply = lpAmount; handleTRV(recipient, rate, ts, t); rTransfer(sender, recipient, rate, t, txType); state.balances.fees += t.fee; state.balances.networkSupply -= (t.fee * rate); lastTState = ts; emit Transfer(msg.sender, recipient, t.transferAmount); return true; } function transferToFarm(uint256 amount) external ownerOnly { require(timeLock < block.timestamp, "too soon"); uint256 r = amount * ratio(); state.accounts[state.addresses.dogecity].rTotal -= r; state.accounts[state.addresses.farm].rTotal += r; emit TransferredToFarm(amount); } function rTransfer(address sender, address recipient, uint256 rate, TxValue memory t, TxType txType) internal { if (txType == TxType.ToExcluded) { state.accounts[sender].rTotal -= t.amount * rate; state.accounts[recipient].tTotal += (t.transferAmount); state.accounts[recipient].rTotal += t.transferAmount * rate; } else if (txType == TxType.FromExcluded) { state.accounts[sender].tTotal -= t.amount; state.accounts[sender].rTotal -= t.amount * rate; state.accounts[recipient].rTotal += t.transferAmount * rate; } else if (txType == TxType.BothExcluded) { state.accounts[sender].tTotal -= t.amount; state.accounts[sender].rTotal -= (t.amount * rate); state.accounts[recipient].tTotal += t.transferAmount; state.accounts[recipient].rTotal += (t.transferAmount * rate); } else { state.accounts[sender].rTotal -= (t.amount * rate); state.accounts[recipient].rTotal += (t.transferAmount * rate); } } // burn supply, not negative rebase function verysmashed() external { require(!state.paused, "still paused"); require(state.lastAttack + state.attackCooldown < block.timestamp, "Dogira coolingdown"); uint256 rLp = state.accounts[state.addresses.pool].rTotal; uint256 amountToDeflate = (rLp / (state.divisors.tokenLPBurn)); uint256 burned = amountToDeflate / ratio(); state.accounts[state.addresses.pool].rTotal -= amountToDeflate; state.accounts[address(0)].rTotal += amountToDeflate; state.accounts[address(0)].tTotal += burned; state.balances.burned += burned; state.lastAttack = block.timestamp; syncPool(); emit Smashed(burned); } // positive rebase function dogebreath() external { require(!state.paused, "still paused"); require(state.lastAttack + state.attackCooldown < block.timestamp, "Dogira coolingdown"); uint256 rate = ratio(); uint256 target = state.balances.burned == 0 ? state.balances.tokenSupply : state.balances.burned; uint256 amountToInflate = target / state.divisors.inflate; if(state.balances.burned > amountToInflate) { state.balances.burned -= amountToInflate; state.accounts[address(0)].rTotal -= amountToInflate * rate; state.accounts[address(0)].tTotal -= amountToInflate; } // positive rebase state.balances.networkSupply -= amountToInflate * rate; state.lastAttack = block.timestamp; syncPool(); emit Atomacized(amountToInflate); } // disperse amount to all holders function wow(uint256 amount) external { address sender = msg.sender; uint256 rate = ratio(); require(!getExcluded(sender), "Excluded addresses can't call this function"); require(amount * rate < state.accounts[sender].rTotal, "too much"); state.accounts[sender].rTotal -= (amount * rate); state.balances.networkSupply -= amount * rate; state.balances.fees += amount; } // award community members from the treasury function muchSupport(address awardee, uint256 multiplier) external onlyAdminOrOwner { uint256 n = block.timestamp; require(!state.paused, "still paused"); require(state.accounts[awardee].lastShill + 1 days < n, "nice shill but need to wait"); require(!getExcluded(awardee), "excluded addresses can't be awarded"); require(multiplier <= 100 && multiplier > 0, "can't be more than .1% of dogecity reward"); uint256 level = getLevel(awardee); if(level > levelCap) { level = levelCap; // capped at 10 } else if (level <= 0) { level = 1; } uint256 p = ((state.accounts[state.addresses.dogecity].rTotal / 100000) * multiplier) * level; // .001% * m of dogecity * level state.accounts[state.addresses.dogecity].rTotal -= p; state.accounts[awardee].rTotal += p; state.accounts[awardee].lastShill = block.timestamp; state.accounts[awardee].communityPoints += multiplier; emit Hooray(awardee, p); } function yayCommunity(address awardee, uint256 points) external onlyAdminOrOwner { uint256 n = block.timestamp; require(!state.paused, "still paused"); require(state.accounts[awardee].lastAward + 1 days < n, "nice help but need to wait"); require(!getExcluded(awardee), "excluded addresses can't be awarded"); require(points <= 1000 && points > 0, "can't be more than a full level"); state.accounts[awardee].communityPoints += points; state.accounts[awardee].lastAward = block.timestamp; emit XPAdded(awardee, points); } // burn amount, for cex integration? function suchburn(uint256 amount) external { address sender = msg.sender; uint256 rate = ratio(); require(!getExcluded(sender), "Excluded addresses can't call this function"); require(amount * rate < state.accounts[sender].rTotal, "too much"); state.accounts[sender].rTotal -= (amount * rate); state.accounts[address(0)].rTotal += (amount * rate); state.accounts[address(0)].tTotal += (amount); state.balances.burned += amount; syncPool(); emit Blazed(amount); } function dogeit(uint256 amount) external { require(!state.paused, "still paused"); require(!getExcluded(msg.sender), "excluded can't call"); uint256 rAmount = amount * ratio(); require(state.accounts[msg.sender].lastDogeIt + state.divisors.dogeify < block.timestamp, "you need to wait to doge"); require(amount > 0, "don't waste your gas"); require(rAmount <= state.accounts[state.addresses.buyBonusPool].rTotal / state.divisors.dogeitpayout, "can't kek too much"); state.accounts[msg.sender].lastDogeIt = block.timestamp; if((state.random + block.timestamp + block.number) % state.odds == 0) { state.accounts[state.addresses.buyBonusPool].rTotal -= rAmount; state.accounts[msg.sender].rTotal += rAmount; emit Doge(msg.sender, amount); } else { state.accounts[msg.sender].rTotal -= rAmount; state.accounts[state.addresses.buyBonusPool].rTotal += rAmount; emit Kek(msg.sender, amount); } } function handleTRV(address recipient, uint256 rate, TState ts, TxValue memory t) internal { state.accounts[state.addresses.dogecity].rTotal += (t.operationalFee * rate); if(ts == TState.Sell) { state.accounts[state.addresses.buyBonusPool].rTotal += t.sellFee * rate; state.accounts[state.addresses.buyBonusPool].tTotal += t.sellFee; } if(ts == TState.Buy) { state.buys++; uint256 br = t.buyFee * rate; if(state.buys % state.divisors.buyCounter == 0) { uint256 a = state.accounts[state.addresses.prizePool].rTotal + (br); state.accounts[state.addresses.prizePool].rTotal = 0; state.accounts[state.addresses.prizePool].tTotal = 0; state.accounts[recipient].rTotal += a; emit Winner(recipient, a); } else { state.accounts[state.addresses.prizePool].rTotal += br; state.accounts[state.addresses.prizePool].tTotal += t.buyFee; } uint256 r = t.buyBonus * rate; state.accounts[state.addresses.buyBonusPool].rTotal -= r; state.accounts[state.addresses.buyBonusPool].tTotal -= t.buyBonus; state.accounts[recipient].rTotal += r; emit BonusAwarded(recipient, t.buyBonus); } } function tValues(address sender, address recipient, uint256 amount, bool noFee, uint256 lpAmount) public view returns (TxValue memory t, TState ts, TxType txType) { ts = getTState(sender, recipient, lpAmount); txType = getTxType(sender, recipient); t.amount = amount; if(!noFee) { t.fee = getFee(amount, state.divisors.tx); t.operationalFee = getFee(amount, state.divisors.dogecity); if(ts == TState.Sell) { uint256 sellFee = getFee(amount, state.divisors.sell); uint256 sellLevel = sellFee == 0 ? 0 : ((sellFee * getLevel(sender)) / levelCap); t.sellFee = sellFee - sellLevel; } if(ts == TState.Buy) { t.buyFee = getFee(amount, getBuyTax(amount)); uint256 bonus = getBuyBonus(amount); uint256 levelBonus = bonus == 0 ? 0 : ((bonus * getLevel(recipient)) / levelCap); t.buyBonus = bonus + levelBonus; } } t.transferAmount = t.amount - t.fee - t.sellFee - t.buyFee - t.operationalFee; return (t, ts, txType); } function include(address account) external ownerOnly { require(state.accounts[account].excluded, "Account is already excluded"); state.accounts[account].tTotal = 0; EnumerableSet.remove(state.excludedAccounts, account); } function exclude(address account) external ownerOnly { require(!state.accounts[account].excluded, "Account is already excluded"); state.accounts[account].excluded = true; if(state.accounts[account].rTotal > 0) { state.accounts[account].tTotal = state.accounts[account].rTotal / ratio(); } state.accounts[account].excluded = true; EnumerableSet.add(state.excludedAccounts, account); } function syncPool() public { IUniswapV2Pair(state.addresses.pool).sync(); } function enableTrading() external ownerOnly { state.paused = false; } function adjustOdds(uint8 odds) external ownerOnly { require(odds >= 2, "can't be more than 50/50"); state.odds = odds; } function setPresale(address account) external ownerOnly { if(!presaleSet) { state.addresses.presale = account; state.accounts[account].feeless = true; presaleSet = true; } } function setBuyBonusDivisor(uint8 fd) external ownerOnly { require(fd >= 20, "can't be more than 5%"); state.divisors.bonus = fd; } function setMinBuyForBuyBonus(uint256 amount) external ownerOnly { require(amount > 10000e18, "can't be less than 10k tokens"); state.minBuyForBonus = amount * (10 ** state.decimals); } function setFeeless(address account, bool value) external ownerOnly { state.accounts[account].feeless = value; } function setBuyFee(uint8 fd) external ownerOnly { require(fd >= 20, "can't be more than 5%"); state.divisors.buy = fd; } function setSellFee(uint8 fd) external ownerOnly { require(fd >= 10, "can't be more than 10%"); state.divisors.sell = fd; } function setFarm(address farm) external ownerOnly { require(state.addresses.farm == address(0), "farm already set"); uint256 _codeLength; assembly {_codeLength := extcodesize(farm)} require(_codeLength > 0, "must be a contract"); state.addresses.farm = farm; emit FarmAdded(farm); } function setRandomSeed(uint256 random) override external { if(!rngSet){ require(msg.sender == owner(), "not valid caller"); // once chainlink is set random can't be called by owner } else { require(msg.sender == state.addresses.rng, "not valid caller"); // for chainlink VRF } require(state.random != random, "can't use the same one twice"); state.random = random; } function setRngAddr(address addr) external ownerOnly { state.addresses.rng = addr; rngSet = true; } function setLevelCap(uint256 l) external ownerOnly { require(l >= 10 && l <= 100, "can't be lower than 10 or greater than 100"); levelCap = l; } function setCooldown(uint256 timeInSeconds) external ownerOnly { require(timeInSeconds > 1 minutes, "too short a time"); state.attackCooldown = timeInSeconds; } function setBuyCounter(uint8 counter) external ownerOnly { require(counter > 5, "too few people"); state.divisors.buyCounter = counter; } function setDogeItCooldown(uint256 time) external ownerOnly { require(time > 5 minutes, "too quick"); state.divisors.dogeify = time; } function setTokenLPBurn(uint8 fd) external ownerOnly { require(fd > 20, "can't be more than 5%"); state.divisors.tokenLPBurn = fd; } function setInflation(uint8 fd) external ownerOnly { require(fd > 20, "can't be more than 5%"); state.divisors.inflate = fd; } function setDogeItPayoutLimit(uint8 fd) external ownerOnly { require(fd >= 50, "can't be more than 2% of the buy bonus supply"); state.divisors.dogeitpayout = fd; } function setAdmin(address account, bool value) external ownerOnly { admins[account] = value; } function setDogeCityDivisor(uint8 fd) external ownerOnly { require(fd >= 50, "can't be more than 2%"); state.divisors.dogecity = fd; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Atomacized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Blazed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BonusAwarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Doge","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"farm","type":"address"}],"name":"FarmAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"awardee","type":"address"},{"indexed":false,"internalType":"uint256","name":"points","type":"uint256"}],"name":"Hooray","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Kek","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":"amount","type":"uint256"}],"name":"Smashed","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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferredToFarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Winner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"awardee","type":"address"},{"indexed":false,"internalType":"uint256","name":"points","type":"uint256"}],"name":"XPAdded","type":"event"},{"inputs":[{"internalType":"uint8","name":"odds","type":"uint8"}],"name":"adjustOdds","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canIDogeIt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","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":"dogebreath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"dogeit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccount","outputs":[{"components":[{"internalType":"bool","name":"feeless","type":"bool"},{"internalType":"bool","name":"transferPair","type":"bool"},{"internalType":"bool","name":"excluded","type":"bool"},{"internalType":"uint256","name":"lastDogeIt","type":"uint256"},{"internalType":"uint256","name":"tTotal","type":"uint256"},{"internalType":"uint256","name":"rTotal","type":"uint256"},{"internalType":"uint256","name":"lastShill","type":"uint256"},{"internalType":"uint256","name":"communityPoints","type":"uint256"},{"internalType":"uint256","name":"lastAward","type":"uint256"}],"internalType":"struct Storage.Account","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAmountForMinBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyAfterBuyBonus","outputs":[{"internalType":"uint256","name":"bonus","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyAfterSellBonus","outputs":[{"internalType":"uint256","name":"bonus","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyBonusPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyPoolAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLPBal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDivisors","outputs":[{"components":[{"internalType":"uint8","name":"buy","type":"uint8"},{"internalType":"uint8","name":"sell","type":"uint8"},{"internalType":"uint8","name":"dogecity","type":"uint8"},{"internalType":"uint8","name":"bonus","type":"uint8"},{"internalType":"uint8","name":"tokenLPBurn","type":"uint8"},{"internalType":"uint8","name":"inflate","type":"uint8"},{"internalType":"uint8","name":"buyCounter","type":"uint8"},{"internalType":"uint8","name":"tx","type":"uint8"},{"internalType":"uint8","name":"dogeitpayout","type":"uint8"},{"internalType":"uint256","name":"dogeify","type":"uint256"}],"internalType":"struct Storage.Divisors","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFeeless","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLPBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastTState","outputs":[{"internalType":"enum State.TState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLevel","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBetAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrizePoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrizePoolAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"getTState","outputs":[{"internalType":"enum State.TState","name":"t","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeTillNextAttack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"getTxType","outputs":[{"internalType":"enum State.TxType","name":"t","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getXP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"include","outputs":[],"stateMutability":"nonpayable","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":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"isFeelessTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"isMinBuyForBonus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTeamSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"awardee","type":"address"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"muchSupport","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ratio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fd","type":"uint8"}],"name":"setBuyBonusDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"counter","type":"uint8"}],"name":"setBuyCounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fd","type":"uint8"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fd","type":"uint8"}],"name":"setDogeCityDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setDogeItCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fd","type":"uint8"}],"name":"setDogeItPayoutLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"farm","type":"address"}],"name":"setFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fd","type":"uint8"}],"name":"setInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"l","type":"uint256"}],"name":"setLevelCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinBuyForBuyBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"random","type":"uint256"}],"name":"setRandomSeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setRngAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fd","type":"uint8"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fd","type":"uint8"}],"name":"setTokenLPBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"suchburn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"syncPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"noFee","type":"bool"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"tValues","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"buyBonus","type":"uint256"},{"internalType":"uint256","name":"operationalFee","type":"uint256"}],"internalType":"struct Dogira.TxValue","name":"t","type":"tuple"},{"internalType":"enum State.TState","name":"ts","type":"uint8"},{"internalType":"enum State.TxType","name":"txType","type":"uint8"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"transferToFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"verysmashed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"wow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"awardee","type":"address"},{"internalType":"uint256","name":"points","type":"uint256"}],"name":"yayCommunity","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060006200001e62000084565b60238054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200007e62000088565b62000a8e565b3390565b60005460ff1615620000b75760405162461bcd60e51b8152600401620000ae906200081a565b60405180910390fd5b60008054600160ff199091161762ff000019166212000017905560408051808201909152600680825265444f4749524160d01b60209092019182526200010091601f916200071d565b5060408051808201909152601d8082527f646f676972612e6c6f6c207c7c20646f676972612e6574682e6c696e6b00000060209283019081526200014592916200071d565b506000546200015f9062010000900460ff16600a620008e7565b6200016f906305f5e100620009d2565b600b55620001846305f5e10060001962000a4b565b6200019290600019620009f4565b6000600b01600101819055506014600060120160000160006101000a81548160ff021916908360ff1602179055506014600060120160000160016101000a81548160ff021916908360ff1602179055506032600060120160000160036101000a81548160ff021916908360ff1602179055506064600060120160000160026101000a81548160ff021916908360ff1602179055506032600060120160000160056101000a81548160ff021916908360ff1602179055506032600060120160000160046101000a81548160ff021916908360ff1602179055506064600060120160000160076101000a81548160ff021916908360ff1602179055506064600060120160000160086101000a81548160ff021916908360ff160217905550610e10600060120160010181905550600a600060120160000160066101000a81548160ff021916908360ff16021790555060046000800160036101000a81548160ff021916908360ff1602179055506907695a92c20d6fe000006000601701819055506040516200031f90620007ac565b604051809103906000f0801580156200033c573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b03929092169190911790556040516200036b90620007ac565b604051809103906000f08015801562000388573d6000803e3d6000fd5b50600780546001600160a01b039283166001600160a01b031991821617909155600280548216737a250d5630b4cf539739df2c5dacb4c659f2488d17908190556005805490921673fedd9544b47a6d4a1967d385575866bd6f7a2b3717909155604080516315ab88c960e31b81529051919092169163ad5c4648916004828101926020929190829003018186803b1580156200042357600080fd5b505afa15801562000438573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045e9190620007d0565b600380546001600160a01b0319166001600160a01b039283161790556002546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b158015620004b857600080fd5b505afa158015620004cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f39190620007d0565b6003546040516364e329cb60e11b81526001600160a01b039283169263c9c6539692620005299230929091169060040162000800565b602060405180830381600087803b1580156200054457600080fd5b505af115801562000559573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057f9190620007d0565b600180546001600160a01b039283166001600160a01b0319909116178155601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f849805460ff19908116831790915533600090815260408082208054909316841790925591549092168152908120805461ff001916610100179055600c546200060d9060059062000883565b600c5490915060009062000623908390620009f4565b336000908152601c6020526040902060030181905590506200064760048362000883565b620006539083620009f4565b6027908155600580546001600160a01b039081166000908152601c6020526040808220805460ff1916600117905593549254909116815291909120600301556200069f60048362000883565b6007546001600160a01b03166000908152601c6020526040902060030155600b54620006ce9060149062000883565b6007546001600160a01b03166000908152601c6020526040812060020191909155805461ff001916610100179055610258601b55600a60295562000716426203f48062000868565b6026555050565b8280546200072b9062000a0e565b90600052602060002090601f0160209004810192826200074f57600085556200079a565b82601f106200076a57805160ff19168380011785556200079a565b828001600101855582156200079a579182015b828111156200079a5782518255916020019190600101906200077d565b50620007a8929150620007b9565b5090565b605c80620062bb83390190565b5b80821115620007a85760008155600101620007ba565b600060208284031215620007e2578081fd5b81516001600160a01b0381168114620007f9578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b600082198211156200087e576200087e62000a62565b500190565b60008262000895576200089562000a78565b500490565b80825b6001808611620008ae5750620008de565b818704821115620008c357620008c362000a62565b80861615620008d157918102915b9490941c9380026200089d565b94509492505050565b6000620007f960001960ff8516846000826200090657506001620007f9565b816200091557506000620007f9565b81600181146200092e576002811462000939576200096d565b6001915050620007f9565b60ff8411156200094d576200094d62000a62565b6001841b91508482111562000966576200096662000a62565b50620007f9565b5060208310610133831016604e8410600b8410161715620009a5575081810a838111156200099f576200099f62000a62565b620007f9565b620009b484848460016200089a565b808604821115620009c957620009c962000a62565b02949350505050565b6000816000190483118215151615620009ef57620009ef62000a62565b500290565b60008282101562000a095762000a0962000a62565b500390565b60028104600182168062000a2357607f821691505b6020821081141562000a4557634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a5d5762000a5d62000a78565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61581d8062000a9e6000396000f3fe608060405234801561001057600080fd5b50600436106104ec5760003560e01c80637ae8c32a1161028d578063b8e255be11610161578063dd62ed3e116100de578063f00fd44d116100a2578063f6fe87271161007c578063f6fe872714610a19578063fba8dda614610a21578063fbcbc0f114610a34576104ec565b8063f00fd44d146109eb578063f2fde38b146109fe578063f5afbb7814610a11576104ec565b8063dd62ed3e146109a2578063e30c3978146109b5578063e343bd12146109bd578063e7e50560146109d0578063efbc9de7146109d8576104ec565b8063c867392811610125578063c86739281461094e578063d250185c14610961578063d4f26c5114610974578063d5fcc7b614610987578063db8d55f11461099a576104ec565b8063b8e255be14610905578063b996b71314610918578063b9b5f5211461092b578063c1f1b1b514610933578063c6b7b5951461093b576104ec565b80639302bc371161020a578063ad7e01be116101ce578063b4a64966116101a8578063b4a64966146108bb578063b524c663146108ce578063b61bd3ab146108e3576104ec565b8063ad7e01be14610898578063b0f479a1146108a0578063b41e41ea146108a8576104ec565b80639302bc371461084457806395d89b4114610857578063a26077c61461085f578063a457c2d714610872578063a9059cbb14610885576104ec565b80638a8c523c116102515780638a8c523c1461081c5780638b529854146108245780638cc265eb1461082c5780638da5cb5b146108345780638fc9a9d81461083c576104ec565b80637ae8c32a146107c65780638129fc1c146107d9578063817c8966146107e157806381981d07146107f457806389377d4f14610807576104ec565b80634563d5ae116103c457806359ef0781116103415780636fea47e31161030557806371ca337d116102df57806371ca337d1461079857806373b29dee146107a057806376c6ab94146107b3576104ec565b80636fea47e31461077557806370a082311461077d578063715018a614610790576104ec565b806359ef0781146107215780635cf3da1f14610734578063612cc51414610747578063639487f41461074f57806366fea1d414610762576104ec565b80634e71e0c8116103885780634e71e0c8146106e35780634fc3f41a146106eb5780634febf53d146106fe57806353a4041314610711578063550ed1f014610719576104ec565b80634563d5ae1461068457806347d894751461069757806348feb7d1146106aa5780634b0bddd2146106bd5780634c784efa146106d0576104ec565b8063219653511161046d578063313ce56711610431578063395093511161040b578063395093511461063e57806341280008146106515780634412c22314610671576104ec565b8063313ce5671461060e578063358cfda21461062357806337d543c414610636576104ec565b806321965351146105b7578063235d8232146105ca57806323b872dd146105dd57806329f911a6146105f05780632b112e49146105f8576104ec565b80630ab9411b116104b45780630ab9411b1461056c5780630c3d29a21461058157806312644acb1461058957806313fe0dd61461059c57806318160ddd146105af576104ec565b8063026b1d5f146104f15780630663ddcc1461050f57806306fdde031461052457806308f822f614610539578063095ea7b31461054c575b600080fd5b6104f9610a54565b604051610506919061496a565b60405180910390f35b61052261051d366004614918565b610a63565b005b61052c610aef565b60405161050691906149d8565b6105226105473660046148c7565b610b84565b61055f61055a36600461489c565b610c98565b60405161050691906149b1565b610574610cb6565b604051610506919061550e565b610574610cff565b61052261059736600461489c565b610d7c565b6105746105aa366004614760565b610fe1565b61057461106a565b61055f6105c5366004614760565b611070565b6105226105d836600461489c565b611094565b61055f6105eb3660046147d0565b61123a565b6105746112b1565b6106006112c3565b604051610506929190615517565b6106166113a0565b6040516105069190615525565b6105226106313660046148c7565b6113af565b61057461140f565b61055f61064c36600461489c565b611415565b61066461065f366004614798565b611464565b60405161050691906149ca565b61057461067f3660046148c7565b61150c565b610522610692366004614918565b611611565b6105226106a5366004614918565b611692565b61055f6106b8366004614760565b611710565b6105226106cb366004614868565b61172e565b6105226106de366004614760565b611793565b6105226117fc565b6105226106f93660046148c7565b6118b0565b61052261070c366004614760565b61190f565b610574611a39565b610574611a64565b61055f61072f366004614798565b611a9c565b6105746107423660046148c7565b611b00565b61055f611bc6565b61057461075d366004614760565b611bf0565b6105226107703660046148c7565b611c0e565b610574611ca6565b61057461078b366004614760565b611cac565b610522611d0d565b610574611da4565b61055f6107ae3660046148c7565b611db6565b6105226107c13660046148c7565b611de3565b6105226107d4366004614918565b61206b565b6105226120e5565b6105746107ef366004614760565b612740565b6105226108023660046148c7565b61277f565b61080f6127ec565b60405161050691906149bc565b6105226127f5565b61052261283c565b6105226128b0565b6104f9612a61565b610574612a75565b6105226108523660046148c7565b612aaa565b61052c612b9b565b61052261086d3660046148c7565b612bad565b61055f61088036600461489c565b612c37565b61055f61089336600461489c565b612c86565b610522612c93565b6104f9612d0c565b6105226108b63660046148c7565b612d1b565b61080f6108c93660046147d0565b612ea8565b6108d6612f20565b60405161050691906153e5565b6108f66108f1366004614810565b612fc6565b604051610506939291906154a2565b610522610913366004614918565b61318f565b6105746109263660046148c7565b613203565b6104f96132e4565b6104f96132f3565b610522610949366004614918565b613302565b61052261095c366004614760565b613380565b61057461096f3660046148f7565b61341f565b610522610982366004614760565b61342b565b610522610995366004614760565b6134f8565b61057461358c565b6105746109b0366004614798565b613592565b6104f96135bd565b6105226109cb366004614918565b6135cc565b61052261364f565b6105226109e6366004614868565b6137f7565b6105226109f9366004614918565b61385c565b610522610a0c366004614760565b6138d8565b6104f961395a565b610574613969565b610522610a2f366004614918565b61397f565b610a47610a42366004614760565b6139fe565b6040516105069190615373565b6001546001600160a01b031690565b610a6b613a95565b60235461010090046001600160a01b03908116911614610aa65760405162461bcd60e51b8152600401610a9d90614fd1565b60405180910390fd5b60058160ff1611610ac95760405162461bcd60e51b8152600401610a9d90614b80565b6012805460ff90921666010000000000000266ff00000000000019909216919091179055565b606060006020018054610b01906156d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2d906156d0565b8015610b7a5780601f10610b4f57610100808354040283529160200191610b7a565b820191906000526020600020905b815481529060010190602001808311610b5d57829003601f168201915b5050505050905090565b610b8c613a95565b60235461010090046001600160a01b03908116911614610bbe5760405162461bcd60e51b8152600401610a9d90614fd1565b4260265410610bdf5760405162461bcd60e51b8152600401610a9d90614cc6565b6000610be9611da4565b610bf39083615671565b6005546001600160a01b03166000908152601c6020526040812060030180549293508392909190610c259084906156b9565b9091555050600a546001600160a01b03166000908152601c602052604081206003018054839290610c57908490615533565b90915550506040517fcb78204ddf35079782f7e64e0550726f3e21fc3773f225dadb8708a2ed5fb75190610c8c90849061550e565b60405180910390a15050565b6000610cac610ca5613a95565b8484613a99565b5060015b92915050565b6000610cc0611da4565b601c6000610ccc6132e4565b6001600160a01b03166001600160a01b0316815260200190815260200160002060030154610cfa919061554b565b905090565b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015610d4457600080fd5b505afa158015610d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfa91906148df565b3360009081526025602052604090205460ff1680610db25750610d9d612a61565b6001600160a01b0316336001600160a01b0316145b610dce5760405162461bcd60e51b8152600401610a9d90614c30565b6000544290610100900460ff1615610df85760405162461bcd60e51b8152600401610a9d90614ea5565b6001600160a01b0383166000908152601c60205260409020600401548190610e239062015180615533565b10610e405760405162461bcd60e51b8152600401610a9d90614b49565b610e4983611070565b15610e665760405162461bcd60e51b8152600401610a9d90615277565b60648211158015610e775750600082115b610e935760405162461bcd60e51b8152600401610a9d90614e25565b6000610e9e84612740565b9050602954811115610eb35750602954610ebf565b60008111610ebf575060015b6005546001600160a01b03166000908152601c602052604081206003015482908590610eef90620186a09061554b565b610ef99190615671565b610f039190615671565b6005546001600160a01b03166000908152601c6020526040812060030180549293508392909190610f359084906156b9565b90915550506001600160a01b0385166000908152601c602052604081206003018054839290610f65908490615533565b90915550506001600160a01b0385166000908152601c602052604081204260048201556005018054869290610f9b908490615533565b90915550506040517fdb007e93c45ce72d2a719188d2b08b4c17f80653ac7624d83431bfa5715320a690610fd29087908490614998565b60405180910390a15050505050565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a082319061101290859060040161496a565b60206040518083038186803b15801561102a57600080fd5b505afa15801561103e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106291906148df565b90505b919050565b600b5490565b6001600160a01b03166000908152601c602052604090205462010000900460ff1690565b3360009081526025602052604090205460ff16806110ca57506110b5612a61565b6001600160a01b0316336001600160a01b0316145b6110e65760405162461bcd60e51b8152600401610a9d90614c30565b6000544290610100900460ff16156111105760405162461bcd60e51b8152600401610a9d90614ea5565b6001600160a01b0383166000908152601c6020526040902060060154819061113b9062015180615533565b106111585760405162461bcd60e51b8152600401610a9d90614f9a565b61116183611070565b1561117e5760405162461bcd60e51b8152600401610a9d90615277565b6103e882111580156111905750600082115b6111ac5760405162461bcd60e51b8152600401610a9d906150b2565b6001600160a01b0383166000908152601c6020526040812060050180548492906111d7908490615533565b90915550506001600160a01b0383166000908152601c60205260409081902042600690910155517f3b7cda1261f5c43e1022832b581103320671193233be8f67412e7566656b4b809061122d9085908590614998565b60405180910390a1505050565b6000611247848484613b4d565b506112a684611254613a95565b6001600160a01b0387166000908152601d602052604081208691611276613a95565b6001600160a01b03166001600160a01b03168152602001908152602001600020546112a191906156b9565b613a99565b5060015b9392505050565b600b54600090610cfa9060649061554b565b600c54600b546000918291825b6112da6021613dcf565b81101561136c5760006112ee602183613dda565b6001600160a01b0381166000908152601c602052604090206003810154600290910154919250908582118061132257508481115b1561133e575050600c54600b54909650945061139c9350505050565b61134882876156b9565b955061135481866156b9565b9450505050808061136490615705565b9150506112d0565b50600b54600c5461137d919061554b565b821015611396575050600c54600b54909250905061139c565b90925090505b9091565b60005462010000900460ff1690565b6113b7613a95565b60235461010090046001600160a01b039081169116146113e95760405162461bcd60e51b8152600401610a9d90614fd1565b61012c811161140a5760405162461bcd60e51b8152600401610a9d9061514a565b601355565b60285481565b6000610cac611422613a95565b8484601d6000611430613a95565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546112a19190615533565b6001600160a01b038083166000908152601c6020526040808220549284168252812054909160ff620100009182900481169291909104168180156114a6575080155b156114b45760009250611504565b811580156114bf5750805b156114cd5760019250611504565b811580156114d9575080155b156114e75760039250611504565b8180156114f15750805b156114ff5760029250611504565b600392505b505092915050565b6007546001600160a01b03166000908152601c602052604081206002015461153560648261554b565b831061155957601254611552906301000000900460ff168261554b565b915061160b565b61156460c88261554b565b831061158f57601254611582906301000000900460ff166002615690565b6115529060ff168261554b565b61159b6101f48261554b565b83106115b957601254611582906301000000900460ff166003615690565b6115c56103e88261554b565b83106115e357601254611582906301000000900460ff166004615690565b6012546115fb906301000000900460ff166005615690565b6116089060ff168261554b565b91505b50919050565b611619613a95565b60235461010090046001600160a01b0390811691161461164b5760405162461bcd60e51b8152600401610a9d90614fd1565b60148160ff161161166e5760405162461bcd60e51b8152600401610a9d90615113565b6012805460ff909216650100000000000265ff000000000019909216919091179055565b61169a613a95565b60235461010090046001600160a01b039081169116146116cc5760405162461bcd60e51b8152600401610a9d90614fd1565b60028160ff1610156116f05760405162461bcd60e51b8152600401610a9d906151b2565b6000805460ff90921663010000000263ff00000019909216919091179055565b6001600160a01b03166000908152601c602052604090205460ff1690565b611736613a95565b60235461010090046001600160a01b039081169116146117685760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b61179b613a95565b60235461010090046001600160a01b039081169116146117cd5760405162461bcd60e51b8152600401610a9d90614fd1565b600980546001600160a01b0319166001600160a01b0392909216919091179055602a805460ff19166001179055565b6024546001600160a01b031633146118265760405162461bcd60e51b8152600401610a9d9061508c565b602480546001600160a01b031916905561183e613a95565b6023546040516001600160a01b0392831692610100909204909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3611888613a95565b602360016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b6118b8613a95565b60235461010090046001600160a01b039081169116146118ea5760405162461bcd60e51b8152600401610a9d90614fd1565b603c811161190a5760405162461bcd60e51b8152600401610a9d90614f02565b601b55565b611917613a95565b60235461010090046001600160a01b039081169116146119495760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b0381166000908152601c602052604090205462010000900460ff16156119885760405162461bcd60e51b8152600401610a9d90614d1f565b6001600160a01b0381166000908152601c60205260409020805462ff00001916620100001781556003015415611a03576119c0611da4565b6001600160a01b0382166000908152601c60205260409020600301546119e6919061554b565b6001600160a01b0382166000908152601c60205260409020600201555b6001600160a01b0381166000908152601c60205260409020805462ff0000191662010000179055611a35602182613de6565b5050565b6007546001600160a01b03166000908152601c6020526040812060020154610cfa906101f49061554b565b6012546007546001600160a01b03166000908152601c60205260408120600201549091610cfa91600160401b90910460ff169061554b565b6008546000906001600160a01b0384811691161415611abd57506001610cb0565b6001600160a01b0383166000908152601c602052604090205460ff16806112aa5750506001600160a01b03166000908152601c602052604090205460ff16919050565b600080600160235460ff166002811115611b2a57634e487b7160e01b600052602160045260246000fd5b148015611b38575060175483115b15611b4d57611b468361150c565b9050611b93565b600060235460ff166002811115611b7457634e487b7160e01b600052602160045260246000fd5b148015611b82575060175483115b15611b8f57611b46611a39565b5060005b6007546001600160a01b03166000908152601c60205260409020600201548111611bbd5780611608565b50600092915050565b601354336000908152601c602052604081206001015490914291611bea9190615533565b10905090565b6001600160a01b03166000908152601c602052604090206005015490565b602a5460ff16611c5557611c20612a61565b6001600160a01b0316336001600160a01b031614611c505760405162461bcd60e51b8152600401610a9d906150e9565b611c7f565b6009546001600160a01b03163314611c7f5760405162461bcd60e51b8152600401610a9d906150e9565b601454811415611ca15760405162461bcd60e51b8152600401610a9d90614dee565b601455565b60115490565b6000611cb782611070565b611cee57611cc3611da4565b6001600160a01b0383166000908152601c6020526040902060030154611ce9919061554b565b611062565b506001600160a01b03166000908152601c602052604090206002015490565b611d15613a95565b60235461010090046001600160a01b03908116911614611d475760405162461bcd60e51b8152600401610a9d90614fd1565b60235460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36023805474ffffffffffffffffffffffffffffffffffffffff0019169055565b600b54600c54600091610cfa9161554b565b60008054611dce9062010000900460ff16600a6155a5565b601754611ddb9190615671565b909111919050565b600054610100900460ff1615611e0b5760405162461bcd60e51b8152600401610a9d90614ea5565b611e1433611070565b15611e315760405162461bcd60e51b8152600401610a9d90614d56565b6000611e3b611da4565b611e459083615671565b601354336000908152601c60205260409020600101549192504291611e6a9190615533565b10611e875760405162461bcd60e51b8152600401610a9d9061533c565b60008211611ea75760405162461bcd60e51b8152600401610a9d906152ba565b6012546007546001600160a01b03166000908152601c6020526040902060030154611edc91600160401b900460ff169061554b565b811115611efb5760405162461bcd60e51b8152600401610a9d90614f63565b336000908152601c602052604081204260019091018190559054601454630100000090910460ff16914391611f309190615533565b611f3a9190615533565b611f449190615720565b611fe0576007546001600160a01b03166000908152601c602052604081206003018054839290611f759084906156b9565b9091555050336000908152601c602052604081206003018054839290611f9c908490615533565b90915550506040517f757836b3ce7ad0e51b0fe4bed57c1b672ab1b831cecd483669e298099ce33c3390611fd39033908590614998565b60405180910390a1611a35565b336000908152601c6020526040812060030180548392906120029084906156b9565b90915550506007546001600160a01b03166000908152601c602052604081206003018054839290612034908490615533565b90915550506040517fa77497b556f4aea76b14ecf80e749b85a2b4562f73ca2adf6764583c5d59b08390610c8c9033908590614998565b612073613a95565b60235461010090046001600160a01b039081169116146120a55760405162461bcd60e51b8152600401610a9d90614fd1565b600a8160ff1610156120c95760405162461bcd60e51b8152600401610a9d90614f2c565b6012805460ff9092166101000261ff0019909216919091179055565b60005460ff16156121085760405162461bcd60e51b8152600401610a9d9061503e565b60008054600160ff199091161762ff000019166212000017905560408051808201909152600680825265444f4749524160d01b602090920191825261214f91601f916145c8565b5060408051808201909152601d8082527f646f676972612e6c6f6c207c7c20646f676972612e6574682e6c696e6b000000602092830190815261219292916145c8565b506000546121aa9062010000900460ff16600a6155a5565b6121b8906305f5e100615671565b600b556121cb6305f5e100600019615720565b6121d7906000196156b9565b6000600b01600101819055506014600060120160000160006101000a81548160ff021916908360ff1602179055506014600060120160000160016101000a81548160ff021916908360ff1602179055506032600060120160000160036101000a81548160ff021916908360ff1602179055506064600060120160000160026101000a81548160ff021916908360ff1602179055506032600060120160000160056101000a81548160ff021916908360ff1602179055506032600060120160000160046101000a81548160ff021916908360ff1602179055506064600060120160000160076101000a81548160ff021916908360ff1602179055506064600060120160000160086101000a81548160ff021916908360ff160217905550610e10600060120160010181905550600a600060120160000160066101000a81548160ff021916908360ff16021790555060046000800160036101000a81548160ff021916908360ff1602179055506907695a92c20d6fe000006000601701819055506040516123629061464c565b604051809103906000f08015801561237e573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b03929092169190911790556040516123ab9061464c565b604051809103906000f0801580156123c7573d6000803e3d6000fd5b50600780546001600160a01b039283166001600160a01b031991821617909155600280548216737a250d5630b4cf539739df2c5dacb4c659f2488d17908190556005805490921673fedd9544b47a6d4a1967d385575866bd6f7a2b3717909155604080516315ab88c960e31b81529051919092169163ad5c4648916004828101926020929190829003018186803b15801561246157600080fd5b505afa158015612475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612499919061477c565b600380546001600160a01b0319166001600160a01b039283161790556002546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156124f257600080fd5b505afa158015612506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252a919061477c565b6003546040516364e329cb60e11b81526001600160a01b039283169263c9c653969261255e9230929091169060040161497e565b602060405180830381600087803b15801561257857600080fd5b505af115801561258c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b0919061477c565b600180546001600160a01b039283166001600160a01b0319909116178155601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f849805460ff19908116831790915533600090815260408082208054909316841790925591549092168152908120805461ff001916610100179055600c5461263c9060059061554b565b600c549091506000906126509083906156b9565b336000908152601c60205260409020600301819055905061267260048361554b565b61267c90836156b9565b6027908155600580546001600160a01b039081166000908152601c6020526040808220805460ff1916600117905593549254909116815291909120600301556126c660048361554b565b6007546001600160a01b03166000908152601c6020526040902060030155600b546126f39060149061554b565b6007546001600160a01b03166000908152601c6020526040812060020191909155805461ff001916610100179055610258601b55600a602955612739426203f480615533565b6026555050565b6001600160a01b0381166000908152601c6020526040812060050154612769906103e890615720565b905080156127775780611062565b506001919050565b612787613a95565b60235461010090046001600160a01b039081169116146127b95760405162461bcd60e51b8152600401610a9d90614fd1565b600a81101580156127cb575060648111155b6127e75760405162461bcd60e51b8152600401610a9d9061522d565b602955565b60235460ff1690565b6127fd613a95565b60235461010090046001600160a01b0390811691161461282f5760405162461bcd60e51b8152600401610a9d90614fd1565b6000805461ff0019169055565b612844613a95565b60235461010090046001600160a01b039081169116146128765760405162461bcd60e51b8152600401610a9d90614fd1565b6024546001600160a01b031661289e5760405162461bcd60e51b8152600401610a9d90614b1f565b602480546001600160a01b0319169055565b600054610100900460ff16156128d85760405162461bcd60e51b8152600401610a9d90614ea5565b601b54601a5442916128e991615533565b106129065760405162461bcd60e51b8152600401610a9d90614e6e565b6001546001600160a01b03166000908152601c602052604081206003015460125490919061293f90640100000000900460ff168361554b565b9050600061294b611da4565b612955908361554b565b6001546001600160a01b03166000908152601c60205260408120600301805492935084929091906129879084906156b9565b90915550506000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84c80548492906129c7908490615533565b90915550506000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84b8054839290612a07908490615533565b909155505060118054829190600090612a21908490615533565b909155505042601a55612a32612c93565b7f4acb597af16b6650a7028129045cb4d1779b97e359b0956584faa8892a4ec4b98160405161122d919061550e565b60235461010090046001600160a01b031690565b601b54601a546000918291612a8a9190615533565b9050804211612a9a576000612aa4565b612aa481426156b9565b91505090565b336000612ab5611da4565b9050612ac082611070565b15612add5760405162461bcd60e51b8152600401610a9d906152f1565b6001600160a01b0382166000908152601c6020526040902060030154612b038285615671565b10612b205760405162461bcd60e51b8152600401610a9d90614a2b565b612b2a8184615671565b6001600160a01b0383166000908152601c602052604081206003018054909190612b559084906156b9565b90915550612b6590508184615671565b600c8054600090612b779084906156b9565b909155505060108054849190600090612b91908490615533565b9091555050505050565b60606000601f018054610b01906156d0565b612bb5613a95565b60235461010090046001600160a01b03908116911614612be75760405162461bcd60e51b8152600401610a9d90614fd1565b69021e19e0c9bab24000008111612c105760405162461bcd60e51b8152600401610a9d90614ecb565b600054612c279062010000900460ff16600a6155a5565b612c319082615671565b60175550565b6000610cac612c44613a95565b8484601d6000612c52613a95565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546112a191906156b9565b60006112a6338484613b4d565b600154604080517ffff6cae900000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b158015612cf257600080fd5b505af1158015612d06573d6000803e3d6000fd5b50505050565b6002546001600160a01b031690565b336000612d26611da4565b9050612d3182611070565b15612d4e5760405162461bcd60e51b8152600401610a9d906152f1565b6001600160a01b0382166000908152601c6020526040902060030154612d748285615671565b10612d915760405162461bcd60e51b8152600401610a9d90614a2b565b612d9b8184615671565b6001600160a01b0383166000908152601c602052604081206003018054909190612dc69084906156b9565b90915550612dd690508184615671565b6000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84c8054909190612e11908490615533565b90915550506000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84b8054859290612e51908490615533565b909155505060118054849190600090612e6b908490615533565b90915550612e799050612c93565b7f5cda1501a74cd6ec9eb0a1315d6d11eb8f609345603746a5d2e3af97f4aac7ba8360405161122d919061550e565b6001600160a01b0383166000908152601c6020526040812054610100900460ff1615612ee857600f548214612edf57506002612ee3565b5060005b6112aa565b6001600160a01b0383166000908152601c6020526040902054610100900460ff1615612f16575060016112aa565b5060029392505050565b612f28614658565b50604080516101408101825260125460ff8082168352610100808304821660208501526201000083048216948401949094526301000000820481166060840152640100000000820481166080840152650100000000008204811660a084015266010000000000008204811660c08401526701000000000000008204811660e0840152600160401b909104169181019190915260135461012082015290565b612fce6146ac565b600080612fdc888886612ea8565b9150612fe88888611464565b8684529050846131415760125461300e908790670100000000000000900460ff1661341f565b604084015260125461302a90879062010000900460ff1661341f565b60c0840152600182600281111561305157634e487b7160e01b600052602160045260246000fd5b14156130b657601254600090613070908890610100900460ff1661341f565b90506000811561309f576029546130868b612740565b6130909084615671565b61309a919061554b565b6130a2565b60005b90506130ae81836156b9565b608086015250505b60008260028111156130d857634e487b7160e01b600052602160045260246000fd5b1415613141576130eb8661096f88613203565b606084015260006130fb87611b00565b90506000811561312a576029546131118a612740565b61311b9084615671565b613125919061554b565b61312d565b60005b90506131398183615533565b60a086015250505b60c0830151606084015160808501516040860151865161316191906156b9565b61316b91906156b9565b61317591906156b9565b61317f91906156b9565b6020840152955095509592505050565b613197613a95565b60235461010090046001600160a01b039081169116146131c95760405162461bcd60e51b8152600401610a9d90614fd1565b60148160ff1610156131ed5760405162461bcd60e51b8152600401610a9d90615113565b6012805460ff191660ff92909216919091179055565b600b54600090819061321884620186a0615671565b613222919061554b565b9050600181101561323a57505060125460ff16611065565b6103e8811061325f576012546132549060ff166005615690565b60ff16915050611065565b600a81101580156132705750606481105b15613286576012546132549060ff166002615690565b6064811015801561329857506101f481105b156132ae576012546132549060ff166003615690565b6101f481101580156132c157506103e881105b156132d7576012546132549060ff166004615690565b505060125460ff16611065565b6007546001600160a01b031690565b6003546001600160a01b031690565b61330a613a95565b60235461010090046001600160a01b0390811691161461333c5760405162461bcd60e51b8152600401610a9d90614fd1565b60148160ff1610156133605760405162461bcd60e51b8152600401610a9d90615113565b6012805460ff90921663010000000263ff00000019909216919091179055565b613388613a95565b60235461010090046001600160a01b039081169116146133ba5760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b0381166000908152601c602052604090205462010000900460ff166133f85760405162461bcd60e51b8152600401610a9d90614d1f565b6001600160a01b0381166000908152601c6020526040812060020155611a35602182613dfb565b60006112aa828461554b565b613433613a95565b60235461010090046001600160a01b039081169116146134655760405162461bcd60e51b8152600401610a9d90614fd1565b600a546001600160a01b03161561348e5760405162461bcd60e51b8152600401610a9d90614d8d565b803b806134ad5760405162461bcd60e51b8152600401610a9d90614c8f565b600a80546001600160a01b0319166001600160a01b0384161790556040517fbfca0af3a33c0bcae29f7d07934c90e392c5d6c2ba686ce898528ee63bea8f5290610c8c90849061496a565b613500613a95565b60235461010090046001600160a01b039081169116146135325760405162461bcd60e51b8152600401610a9d90614fd1565b602a54610100900460ff1661358957600880546001600160a01b0383166001600160a01b031990911681179091556000908152601c60205260409020805460ff19166001179055602a805461ff0019166101001790555b50565b60105490565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b6024546001600160a01b031690565b6135d4613a95565b60235461010090046001600160a01b039081169116146136065760405162461bcd60e51b8152600401610a9d90614fd1565b60328160ff16101561362a5760405162461bcd60e51b8152600401610a9d90614ad2565b6012805460ff909216600160401b0268ff000000000000000019909216919091179055565b600054610100900460ff16156136775760405162461bcd60e51b8152600401610a9d90614ea5565b601b54601a54429161368891615533565b106136a55760405162461bcd60e51b8152600401610a9d90614e6e565b60006136af611da4565b601154909150600090156136c5576011546136c9565b600b545b6012549091506000906136e89065010000000000900460ff168361554b565b60115490915081101561379b576011805482919060009061370a9084906156b9565b9091555061371a90508382615671565b6000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84c80549091906137559084906156b9565b90915550506000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84b80548392906137959084906156b9565b90915550505b6137a58382615671565b600c80546000906137b79084906156b9565b909155505042601a556137c8612c93565b7f4d0885014b9e2b7d05af2e851acb4501f546c37f2670e4c3c2c87681d98c1b418160405161122d919061550e565b6137ff613a95565b60235461010090046001600160a01b039081169116146138315760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b613864613a95565b60235461010090046001600160a01b039081169116146138965760405162461bcd60e51b8152600401610a9d90614fd1565b60328160ff1610156138ba5760405162461bcd60e51b8152600401610a9d90614c58565b6012805460ff909216620100000262ff000019909216919091179055565b6138e0613a95565b60235461010090046001600160a01b039081169116146139125760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b0381166139385760405162461bcd60e51b8152600401610a9d90614ba8565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031690565b6000613973611da4565b601c6000610ccc61395a565b613987613a95565b60235461010090046001600160a01b039081169116146139b95760405162461bcd60e51b8152600401610a9d90614fd1565b60148160ff16116139dc5760405162461bcd60e51b8152600401610a9d90615113565b6012805460ff9092166401000000000264ff0000000019909216919091179055565b613a066146e9565b506001600160a01b03166000908152601c6020908152604091829020825161012081018452815460ff80821615158352610100808304821615159584019590955262010000909104161515938101939093526001810154606084015260028101546080840152600381015460a0840152600481015460c0840152600581015460e0840152600601549082015290565b3390565b6001600160a01b038316613abf5760405162461bcd60e51b8152600401610a9d906151e9565b6001600160a01b038216613ae55760405162461bcd60e51b8152600401610a9d90614bee565b6001600160a01b038084166000818152601d602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590613b4090859061550e565b60405180910390a3505050565b60006001600160a01b038416613b755760405162461bcd60e51b8152600401610a9d9061516d565b6001600160a01b038316613b9b5760405162461bcd60e51b8152600401610a9d90614a8f565b60008211613bbb5760405162461bcd60e51b8152600401610a9d90614ff5565b6001546001600160a01b0385811691161415613bf957600054610100900460ff1615613bf95760405162461bcd60e51b8152600401610a9d90614ce8565b6005546001600160a01b0385811691161415613c9e576014602754613c1e919061554b565b821115613c3d5760405162461bcd60e51b8152600401610a9d90614a2b565b4260285462015180613c4f9190615533565b10613c6c5760405162461bcd60e51b8152600401610a9d90614cc6565b6001546001600160a01b03848116911614613c995760405162461bcd60e51b8152600401610a9d90614db7565b426028555b6000613caa8585611a9c565b90506000613cb6611da4565b90506000613cc2610cff565b90506000806000613cd68a8a8a8988612fc6565b600f87905591945092509050613cee89868486613e10565b613cfb8a8a87868561418c565b604083015160108054600090613d12908490615533565b90915550506040830151613d27908690615671565b600c8054600090613d399084906156b9565b90915550506023805483919060ff19166001836002811115613d6b57634e487b7160e01b600052602160045260246000fd5b0217905550886001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560200151604051613db7919061550e565b60405180910390a35060019998505050505050505050565b6000611062826143ec565b60006112aa83836143f0565b60006112aa836001600160a01b038416614449565b60006112aa836001600160a01b038416614493565b828160c00151613e209190615671565b6005546001600160a01b03166000908152601c602052604081206003018054909190613e4d908490615533565b9091555060019050826002811115613e7557634e487b7160e01b600052602160045260246000fd5b1415613ef557828160800151613e8b9190615671565b6007546001600160a01b03166000908152601c602052604081206003018054909190613eb8908490615533565b909155505060808101516007546001600160a01b03166000908152601c602052604081206002018054909190613eef908490615533565b90915550505b6000826002811115613f1757634e487b7160e01b600052602160045260246000fd5b1415612d065760188054906000613f2d83615705565b91905055506000838260600151613f449190615671565b601254601854919250613f6591660100000000000090910460ff1690615720565b61402c576006546001600160a01b03166000908152601c6020526040812060030154613f92908390615533565b600680546001600160a01b039081166000908152601c60205260408082206003908101839055935483168252808220600201829055918a16815290812090910180549293508392909190613fe7908490615533565b90915550506040517f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e209061401e9088908490614998565b60405180910390a150614096565b6006546001600160a01b03166000908152601c602052604081206003018054839290614059908490615533565b909155505060608201516006546001600160a01b03166000908152601c602052604081206002018054909190614090908490615533565b90915550505b6000848360a001516140a89190615671565b6007546001600160a01b03166000908152601c60205260408120600301805492935083929091906140da9084906156b9565b909155505060a08301516007546001600160a01b03166000908152601c6020526040812060020180549091906141119084906156b9565b90915550506001600160a01b0386166000908152601c602052604081206003018054839290614141908490615533565b909155505060a08301516040517f9cf92e896d7fce8c4a7600daa08f0a39e68eb99cd4413843df33e0fdb75535389161417c91899190614998565b60405180910390a1505050505050565b60018160038111156141ae57634e487b7160e01b600052602160045260246000fd5b141561426e5781516141c1908490615671565b6001600160a01b0386166000908152601c6020526040812060030180549091906141ec9084906156b9565b90915550506020808301516001600160a01b0386166000908152601c90925260408220600201805491929091614223908490615533565b90915550506020820151614238908490615671565b6001600160a01b0385166000908152601c602052604081206003018054909190614263908490615533565b909155506143e59050565b600081600381111561429057634e487b7160e01b600052602160045260246000fd5b14156143005781516001600160a01b0386166000908152601c6020526040812060020180549091906142c39084906156b9565b909155505081516142d5908490615671565b6001600160a01b0386166000908152601c6020526040812060030180549091906142239084906156b9565b600281600381111561432257634e487b7160e01b600052602160045260246000fd5b14156143675781516001600160a01b0386166000908152601c6020526040812060020180549091906143559084906156b9565b909155505081516141c1908490615671565b8151614374908490615671565b6001600160a01b0386166000908152601c60205260408120600301805490919061439f9084906156b9565b909155505060208201516143b4908490615671565b6001600160a01b0385166000908152601c6020526040812060030180549091906143df908490615533565b90915550505b5050505050565b5490565b815460009082106144135760405162461bcd60e51b8152600401610a9d90614a4d565b82600001828154811061443657634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600061445583836145b0565b61448b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610cb0565b506000610cb0565b600081815260018301602052604081205480156145a65760006144b76001836156b9565b85549091506000906144cb906001906156b9565b905060008660000182815481106144f257634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061452357634e487b7160e01b600052603260045260246000fd5b60009182526020909120015561453a836001615533565b6000828152600189016020526040902055865487908061456a57634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610cb0565b6000915050610cb0565b60009081526001919091016020526040902054151590565b8280546145d4906156d0565b90600052602060002090601f0160209004810192826145f6576000855561463c565b82601f1061460f57805160ff191683800117855561463c565b8280016001018555821561463c579182015b8281111561463c578251825591602001919060010190614621565b5061464892915061473b565b5090565b605c8061578c83390190565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915290565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518061012001604052806000151581526020016000151581526020016000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b5b80821115614648576000815560010161473c565b8035801515811461106557600080fd5b600060208284031215614771578081fd5b81356112aa81615776565b60006020828403121561478d578081fd5b81516112aa81615776565b600080604083850312156147aa578081fd5b82356147b581615776565b915060208301356147c581615776565b809150509250929050565b6000806000606084860312156147e4578081fd5b83356147ef81615776565b925060208401356147ff81615776565b929592945050506040919091013590565b600080600080600060a08688031215614827578081fd5b853561483281615776565b9450602086013561484281615776565b93506040860135925061485760608701614750565b949793965091946080013592915050565b6000806040838503121561487a578182fd5b823561488581615776565b915061489360208401614750565b90509250929050565b600080604083850312156148ae578182fd5b82356148b981615776565b946020939093013593505050565b6000602082840312156148d8578081fd5b5035919050565b6000602082840312156148f0578081fd5b5051919050565b60008060408385031215614909578182fd5b50508035926020909101359150565b600060208284031215614929578081fd5b813560ff811681146112aa578182fd5b15159052565b6003811061494f5761494f615760565b9052565b6004811061494f5761494f615760565b60ff169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60208101610cb0828461493f565b60208101610cb08284614953565b6000602080835283518082850152825b81811015614a04578581018301518582016040015282016149e8565b81811115614a155783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600890820152670e8dede40daeac6d60c31b604082015260600190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602d908201527f63616e2774206265206d6f7265207468616e203225206f66207468652062757960408201526c20626f6e757320737570706c7960981b606082015260800190565b60208082526010908201526f3737903832b73234b7339037bbb732b960811b604082015260600190565b6020808252601b908201527f6e696365207368696c6c20627574206e65656420746f20776169740000000000604082015260600190565b6020808252600e908201526d746f6f206665772070656f706c6560901b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600e908201526d34b73b30b634b21031b0b63632b960911b604082015260600190565b60208082526015908201527f63616e2774206265206d6f7265207468616e2032250000000000000000000000604082015260600190565b60208082526012908201527f6d757374206265206120636f6e74726163740000000000000000000000000000604082015260600190565b6020808252600890820152673a37b79039b7b7b760c11b604082015260600190565b60208082526014908201527f5472616e73666572732061726520706175736564000000000000000000000000604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526013908201527f6578636c756465642063616e27742063616c6c00000000000000000000000000604082015260600190565b60208082526010908201526f19985c9b48185b1c9958591e481cd95d60821b604082015260600190565b6020808252601d908201527f63616e206f6e6c792073656c6c20746f20756e697377617020706f6f6c000000604082015260600190565b6020808252601c908201527f63616e277420757365207468652073616d65206f6e6520747769636500000000604082015260600190565b60208082526029908201527f63616e2774206265206d6f7265207468616e202e3125206f6620646f676563696040820152681d1e481c995dd85c9960ba1b606082015260800190565b60208082526012908201527f446f6769726120636f6f6c696e67646f776e0000000000000000000000000000604082015260600190565b6020808252600c908201526b1cdd1a5b1b081c185d5cd95960a21b604082015260600190565b6020808252601d908201527f63616e2774206265206c657373207468616e2031306b20746f6b656e73000000604082015260600190565b60208082526010908201526f746f6f2073686f727420612074696d6560801b604082015260600190565b60208082526016908201527f63616e2774206265206d6f7265207468616e2031302500000000000000000000604082015260600190565b60208082526012908201527f63616e2774206b656b20746f6f206d7563680000000000000000000000000000604082015260600190565b6020808252601a908201527f6e6963652068656c7020627574206e65656420746f2077616974000000000000604082015260600190565b6020808252600a90820152694f776e6572206f6e6c7960b01b604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600c908201526b63616e6e6f7420636c61696d60a01b604082015260600190565b6020808252601f908201527f63616e2774206265206d6f7265207468616e20612066756c6c206c6576656c00604082015260600190565b60208082526010908201526f3737ba103b30b634b21031b0b63632b960811b604082015260600190565b60208082526015908201527f63616e2774206265206d6f7265207468616e2035250000000000000000000000604082015260600190565b602080825260099082015268746f6f20717569636b60b81b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526018908201527f63616e2774206265206d6f7265207468616e2035302f35300000000000000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602a908201527f63616e2774206265206c6f776572207468616e203130206f7220677265617465604082015269072207468616e203130360b41b606082015260800190565b60208082526023908201527f6578636c75646564206164647265737365732063616e2774206265206177617260408201526219195960ea1b606082015260800190565b60208082526014908201527f646f6e277420776173746520796f757220676173000000000000000000000000604082015260600190565b6020808252602b908201527f4578636c75646564206164647265737365732063616e27742063616c6c20746860408201526a34b990333ab731ba34b7b760a91b606082015260800190565b60208082526018908201527f796f75206e65656420746f207761697420746f20646f67650000000000000000604082015260600190565b60006101208201905082511515825260208301511515602083015260408301516153a06040840182614939565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6000610140820190506153f9828451614963565b602083015161540b6020840182614963565b50604083015161541e6040840182614963565b5060608301516154316060840182614963565b5060808301516154446080840182614963565b5060a083015161545760a0840182614963565b5060c083015161546a60c0840182614963565b5060e083015161547d60e0840182614963565b506101008084015161549182850182614963565b505061012092830151919092015290565b600061012082019050845182526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c085015160c08301526154f860e083018561493f565b615506610100830184614953565b949350505050565b90815260200190565b918252602082015260400190565b60ff91909116815260200190565b6000821982111561554657615546615734565b500190565b60008261555a5761555a61574a565b500490565b80825b6001808611615571575061559c565b81870482111561558357615583615734565b8086161561559057918102915b9490941c938002615562565b94509492505050565b60006112aa60001960ff8516846000826155c1575060016112aa565b816155ce575060006112aa565b81600181146155e457600281146155ee5761561b565b60019150506112aa565b60ff8411156155ff576155ff615734565b6001841b91508482111561561557615615615734565b506112aa565b5060208310610133831016604e8410600b8410161715615649575081810a83811115612ee357612ee3615734565b615656848484600161555f565b80860482111561566857615668615734565b02949350505050565b600081600019048311821515161561568b5761568b615734565b500290565b600060ff821660ff84168160ff04811182151516156156b1576156b1615734565b029392505050565b6000828210156156cb576156cb615734565b500390565b6002810460018216806156e457607f821691505b6020821081141561160b57634e487b7160e01b600052602260045260246000fd5b600060001982141561571957615719615734565b5060010190565b60008261572f5761572f61574a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038116811461358957600080fdfe6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220135137c4ade22b7f735777a2fc6c8efcb1b9117c246593f293cc61b07449f50d64736f6c63430008010033a26469706673582212202409d15672711167790a9a314fc6e4e6aeb24643a29176294734248b3501add164736f6c634300080100336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220135137c4ade22b7f735777a2fc6c8efcb1b9117c246593f293cc61b07449f50d64736f6c63430008010033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106104ec5760003560e01c80637ae8c32a1161028d578063b8e255be11610161578063dd62ed3e116100de578063f00fd44d116100a2578063f6fe87271161007c578063f6fe872714610a19578063fba8dda614610a21578063fbcbc0f114610a34576104ec565b8063f00fd44d146109eb578063f2fde38b146109fe578063f5afbb7814610a11576104ec565b8063dd62ed3e146109a2578063e30c3978146109b5578063e343bd12146109bd578063e7e50560146109d0578063efbc9de7146109d8576104ec565b8063c867392811610125578063c86739281461094e578063d250185c14610961578063d4f26c5114610974578063d5fcc7b614610987578063db8d55f11461099a576104ec565b8063b8e255be14610905578063b996b71314610918578063b9b5f5211461092b578063c1f1b1b514610933578063c6b7b5951461093b576104ec565b80639302bc371161020a578063ad7e01be116101ce578063b4a64966116101a8578063b4a64966146108bb578063b524c663146108ce578063b61bd3ab146108e3576104ec565b8063ad7e01be14610898578063b0f479a1146108a0578063b41e41ea146108a8576104ec565b80639302bc371461084457806395d89b4114610857578063a26077c61461085f578063a457c2d714610872578063a9059cbb14610885576104ec565b80638a8c523c116102515780638a8c523c1461081c5780638b529854146108245780638cc265eb1461082c5780638da5cb5b146108345780638fc9a9d81461083c576104ec565b80637ae8c32a146107c65780638129fc1c146107d9578063817c8966146107e157806381981d07146107f457806389377d4f14610807576104ec565b80634563d5ae116103c457806359ef0781116103415780636fea47e31161030557806371ca337d116102df57806371ca337d1461079857806373b29dee146107a057806376c6ab94146107b3576104ec565b80636fea47e31461077557806370a082311461077d578063715018a614610790576104ec565b806359ef0781146107215780635cf3da1f14610734578063612cc51414610747578063639487f41461074f57806366fea1d414610762576104ec565b80634e71e0c8116103885780634e71e0c8146106e35780634fc3f41a146106eb5780634febf53d146106fe57806353a4041314610711578063550ed1f014610719576104ec565b80634563d5ae1461068457806347d894751461069757806348feb7d1146106aa5780634b0bddd2146106bd5780634c784efa146106d0576104ec565b8063219653511161046d578063313ce56711610431578063395093511161040b578063395093511461063e57806341280008146106515780634412c22314610671576104ec565b8063313ce5671461060e578063358cfda21461062357806337d543c414610636576104ec565b806321965351146105b7578063235d8232146105ca57806323b872dd146105dd57806329f911a6146105f05780632b112e49146105f8576104ec565b80630ab9411b116104b45780630ab9411b1461056c5780630c3d29a21461058157806312644acb1461058957806313fe0dd61461059c57806318160ddd146105af576104ec565b8063026b1d5f146104f15780630663ddcc1461050f57806306fdde031461052457806308f822f614610539578063095ea7b31461054c575b600080fd5b6104f9610a54565b604051610506919061496a565b60405180910390f35b61052261051d366004614918565b610a63565b005b61052c610aef565b60405161050691906149d8565b6105226105473660046148c7565b610b84565b61055f61055a36600461489c565b610c98565b60405161050691906149b1565b610574610cb6565b604051610506919061550e565b610574610cff565b61052261059736600461489c565b610d7c565b6105746105aa366004614760565b610fe1565b61057461106a565b61055f6105c5366004614760565b611070565b6105226105d836600461489c565b611094565b61055f6105eb3660046147d0565b61123a565b6105746112b1565b6106006112c3565b604051610506929190615517565b6106166113a0565b6040516105069190615525565b6105226106313660046148c7565b6113af565b61057461140f565b61055f61064c36600461489c565b611415565b61066461065f366004614798565b611464565b60405161050691906149ca565b61057461067f3660046148c7565b61150c565b610522610692366004614918565b611611565b6105226106a5366004614918565b611692565b61055f6106b8366004614760565b611710565b6105226106cb366004614868565b61172e565b6105226106de366004614760565b611793565b6105226117fc565b6105226106f93660046148c7565b6118b0565b61052261070c366004614760565b61190f565b610574611a39565b610574611a64565b61055f61072f366004614798565b611a9c565b6105746107423660046148c7565b611b00565b61055f611bc6565b61057461075d366004614760565b611bf0565b6105226107703660046148c7565b611c0e565b610574611ca6565b61057461078b366004614760565b611cac565b610522611d0d565b610574611da4565b61055f6107ae3660046148c7565b611db6565b6105226107c13660046148c7565b611de3565b6105226107d4366004614918565b61206b565b6105226120e5565b6105746107ef366004614760565b612740565b6105226108023660046148c7565b61277f565b61080f6127ec565b60405161050691906149bc565b6105226127f5565b61052261283c565b6105226128b0565b6104f9612a61565b610574612a75565b6105226108523660046148c7565b612aaa565b61052c612b9b565b61052261086d3660046148c7565b612bad565b61055f61088036600461489c565b612c37565b61055f61089336600461489c565b612c86565b610522612c93565b6104f9612d0c565b6105226108b63660046148c7565b612d1b565b61080f6108c93660046147d0565b612ea8565b6108d6612f20565b60405161050691906153e5565b6108f66108f1366004614810565b612fc6565b604051610506939291906154a2565b610522610913366004614918565b61318f565b6105746109263660046148c7565b613203565b6104f96132e4565b6104f96132f3565b610522610949366004614918565b613302565b61052261095c366004614760565b613380565b61057461096f3660046148f7565b61341f565b610522610982366004614760565b61342b565b610522610995366004614760565b6134f8565b61057461358c565b6105746109b0366004614798565b613592565b6104f96135bd565b6105226109cb366004614918565b6135cc565b61052261364f565b6105226109e6366004614868565b6137f7565b6105226109f9366004614918565b61385c565b610522610a0c366004614760565b6138d8565b6104f961395a565b610574613969565b610522610a2f366004614918565b61397f565b610a47610a42366004614760565b6139fe565b6040516105069190615373565b6001546001600160a01b031690565b610a6b613a95565b60235461010090046001600160a01b03908116911614610aa65760405162461bcd60e51b8152600401610a9d90614fd1565b60405180910390fd5b60058160ff1611610ac95760405162461bcd60e51b8152600401610a9d90614b80565b6012805460ff90921666010000000000000266ff00000000000019909216919091179055565b606060006020018054610b01906156d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2d906156d0565b8015610b7a5780601f10610b4f57610100808354040283529160200191610b7a565b820191906000526020600020905b815481529060010190602001808311610b5d57829003601f168201915b5050505050905090565b610b8c613a95565b60235461010090046001600160a01b03908116911614610bbe5760405162461bcd60e51b8152600401610a9d90614fd1565b4260265410610bdf5760405162461bcd60e51b8152600401610a9d90614cc6565b6000610be9611da4565b610bf39083615671565b6005546001600160a01b03166000908152601c6020526040812060030180549293508392909190610c259084906156b9565b9091555050600a546001600160a01b03166000908152601c602052604081206003018054839290610c57908490615533565b90915550506040517fcb78204ddf35079782f7e64e0550726f3e21fc3773f225dadb8708a2ed5fb75190610c8c90849061550e565b60405180910390a15050565b6000610cac610ca5613a95565b8484613a99565b5060015b92915050565b6000610cc0611da4565b601c6000610ccc6132e4565b6001600160a01b03166001600160a01b0316815260200190815260200160002060030154610cfa919061554b565b905090565b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015610d4457600080fd5b505afa158015610d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfa91906148df565b3360009081526025602052604090205460ff1680610db25750610d9d612a61565b6001600160a01b0316336001600160a01b0316145b610dce5760405162461bcd60e51b8152600401610a9d90614c30565b6000544290610100900460ff1615610df85760405162461bcd60e51b8152600401610a9d90614ea5565b6001600160a01b0383166000908152601c60205260409020600401548190610e239062015180615533565b10610e405760405162461bcd60e51b8152600401610a9d90614b49565b610e4983611070565b15610e665760405162461bcd60e51b8152600401610a9d90615277565b60648211158015610e775750600082115b610e935760405162461bcd60e51b8152600401610a9d90614e25565b6000610e9e84612740565b9050602954811115610eb35750602954610ebf565b60008111610ebf575060015b6005546001600160a01b03166000908152601c602052604081206003015482908590610eef90620186a09061554b565b610ef99190615671565b610f039190615671565b6005546001600160a01b03166000908152601c6020526040812060030180549293508392909190610f359084906156b9565b90915550506001600160a01b0385166000908152601c602052604081206003018054839290610f65908490615533565b90915550506001600160a01b0385166000908152601c602052604081204260048201556005018054869290610f9b908490615533565b90915550506040517fdb007e93c45ce72d2a719188d2b08b4c17f80653ac7624d83431bfa5715320a690610fd29087908490614998565b60405180910390a15050505050565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a082319061101290859060040161496a565b60206040518083038186803b15801561102a57600080fd5b505afa15801561103e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106291906148df565b90505b919050565b600b5490565b6001600160a01b03166000908152601c602052604090205462010000900460ff1690565b3360009081526025602052604090205460ff16806110ca57506110b5612a61565b6001600160a01b0316336001600160a01b0316145b6110e65760405162461bcd60e51b8152600401610a9d90614c30565b6000544290610100900460ff16156111105760405162461bcd60e51b8152600401610a9d90614ea5565b6001600160a01b0383166000908152601c6020526040902060060154819061113b9062015180615533565b106111585760405162461bcd60e51b8152600401610a9d90614f9a565b61116183611070565b1561117e5760405162461bcd60e51b8152600401610a9d90615277565b6103e882111580156111905750600082115b6111ac5760405162461bcd60e51b8152600401610a9d906150b2565b6001600160a01b0383166000908152601c6020526040812060050180548492906111d7908490615533565b90915550506001600160a01b0383166000908152601c60205260409081902042600690910155517f3b7cda1261f5c43e1022832b581103320671193233be8f67412e7566656b4b809061122d9085908590614998565b60405180910390a1505050565b6000611247848484613b4d565b506112a684611254613a95565b6001600160a01b0387166000908152601d602052604081208691611276613a95565b6001600160a01b03166001600160a01b03168152602001908152602001600020546112a191906156b9565b613a99565b5060015b9392505050565b600b54600090610cfa9060649061554b565b600c54600b546000918291825b6112da6021613dcf565b81101561136c5760006112ee602183613dda565b6001600160a01b0381166000908152601c602052604090206003810154600290910154919250908582118061132257508481115b1561133e575050600c54600b54909650945061139c9350505050565b61134882876156b9565b955061135481866156b9565b9450505050808061136490615705565b9150506112d0565b50600b54600c5461137d919061554b565b821015611396575050600c54600b54909250905061139c565b90925090505b9091565b60005462010000900460ff1690565b6113b7613a95565b60235461010090046001600160a01b039081169116146113e95760405162461bcd60e51b8152600401610a9d90614fd1565b61012c811161140a5760405162461bcd60e51b8152600401610a9d9061514a565b601355565b60285481565b6000610cac611422613a95565b8484601d6000611430613a95565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546112a19190615533565b6001600160a01b038083166000908152601c6020526040808220549284168252812054909160ff620100009182900481169291909104168180156114a6575080155b156114b45760009250611504565b811580156114bf5750805b156114cd5760019250611504565b811580156114d9575080155b156114e75760039250611504565b8180156114f15750805b156114ff5760029250611504565b600392505b505092915050565b6007546001600160a01b03166000908152601c602052604081206002015461153560648261554b565b831061155957601254611552906301000000900460ff168261554b565b915061160b565b61156460c88261554b565b831061158f57601254611582906301000000900460ff166002615690565b6115529060ff168261554b565b61159b6101f48261554b565b83106115b957601254611582906301000000900460ff166003615690565b6115c56103e88261554b565b83106115e357601254611582906301000000900460ff166004615690565b6012546115fb906301000000900460ff166005615690565b6116089060ff168261554b565b91505b50919050565b611619613a95565b60235461010090046001600160a01b0390811691161461164b5760405162461bcd60e51b8152600401610a9d90614fd1565b60148160ff161161166e5760405162461bcd60e51b8152600401610a9d90615113565b6012805460ff909216650100000000000265ff000000000019909216919091179055565b61169a613a95565b60235461010090046001600160a01b039081169116146116cc5760405162461bcd60e51b8152600401610a9d90614fd1565b60028160ff1610156116f05760405162461bcd60e51b8152600401610a9d906151b2565b6000805460ff90921663010000000263ff00000019909216919091179055565b6001600160a01b03166000908152601c602052604090205460ff1690565b611736613a95565b60235461010090046001600160a01b039081169116146117685760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b61179b613a95565b60235461010090046001600160a01b039081169116146117cd5760405162461bcd60e51b8152600401610a9d90614fd1565b600980546001600160a01b0319166001600160a01b0392909216919091179055602a805460ff19166001179055565b6024546001600160a01b031633146118265760405162461bcd60e51b8152600401610a9d9061508c565b602480546001600160a01b031916905561183e613a95565b6023546040516001600160a01b0392831692610100909204909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3611888613a95565b602360016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b6118b8613a95565b60235461010090046001600160a01b039081169116146118ea5760405162461bcd60e51b8152600401610a9d90614fd1565b603c811161190a5760405162461bcd60e51b8152600401610a9d90614f02565b601b55565b611917613a95565b60235461010090046001600160a01b039081169116146119495760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b0381166000908152601c602052604090205462010000900460ff16156119885760405162461bcd60e51b8152600401610a9d90614d1f565b6001600160a01b0381166000908152601c60205260409020805462ff00001916620100001781556003015415611a03576119c0611da4565b6001600160a01b0382166000908152601c60205260409020600301546119e6919061554b565b6001600160a01b0382166000908152601c60205260409020600201555b6001600160a01b0381166000908152601c60205260409020805462ff0000191662010000179055611a35602182613de6565b5050565b6007546001600160a01b03166000908152601c6020526040812060020154610cfa906101f49061554b565b6012546007546001600160a01b03166000908152601c60205260408120600201549091610cfa91600160401b90910460ff169061554b565b6008546000906001600160a01b0384811691161415611abd57506001610cb0565b6001600160a01b0383166000908152601c602052604090205460ff16806112aa5750506001600160a01b03166000908152601c602052604090205460ff16919050565b600080600160235460ff166002811115611b2a57634e487b7160e01b600052602160045260246000fd5b148015611b38575060175483115b15611b4d57611b468361150c565b9050611b93565b600060235460ff166002811115611b7457634e487b7160e01b600052602160045260246000fd5b148015611b82575060175483115b15611b8f57611b46611a39565b5060005b6007546001600160a01b03166000908152601c60205260409020600201548111611bbd5780611608565b50600092915050565b601354336000908152601c602052604081206001015490914291611bea9190615533565b10905090565b6001600160a01b03166000908152601c602052604090206005015490565b602a5460ff16611c5557611c20612a61565b6001600160a01b0316336001600160a01b031614611c505760405162461bcd60e51b8152600401610a9d906150e9565b611c7f565b6009546001600160a01b03163314611c7f5760405162461bcd60e51b8152600401610a9d906150e9565b601454811415611ca15760405162461bcd60e51b8152600401610a9d90614dee565b601455565b60115490565b6000611cb782611070565b611cee57611cc3611da4565b6001600160a01b0383166000908152601c6020526040902060030154611ce9919061554b565b611062565b506001600160a01b03166000908152601c602052604090206002015490565b611d15613a95565b60235461010090046001600160a01b03908116911614611d475760405162461bcd60e51b8152600401610a9d90614fd1565b60235460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36023805474ffffffffffffffffffffffffffffffffffffffff0019169055565b600b54600c54600091610cfa9161554b565b60008054611dce9062010000900460ff16600a6155a5565b601754611ddb9190615671565b909111919050565b600054610100900460ff1615611e0b5760405162461bcd60e51b8152600401610a9d90614ea5565b611e1433611070565b15611e315760405162461bcd60e51b8152600401610a9d90614d56565b6000611e3b611da4565b611e459083615671565b601354336000908152601c60205260409020600101549192504291611e6a9190615533565b10611e875760405162461bcd60e51b8152600401610a9d9061533c565b60008211611ea75760405162461bcd60e51b8152600401610a9d906152ba565b6012546007546001600160a01b03166000908152601c6020526040902060030154611edc91600160401b900460ff169061554b565b811115611efb5760405162461bcd60e51b8152600401610a9d90614f63565b336000908152601c602052604081204260019091018190559054601454630100000090910460ff16914391611f309190615533565b611f3a9190615533565b611f449190615720565b611fe0576007546001600160a01b03166000908152601c602052604081206003018054839290611f759084906156b9565b9091555050336000908152601c602052604081206003018054839290611f9c908490615533565b90915550506040517f757836b3ce7ad0e51b0fe4bed57c1b672ab1b831cecd483669e298099ce33c3390611fd39033908590614998565b60405180910390a1611a35565b336000908152601c6020526040812060030180548392906120029084906156b9565b90915550506007546001600160a01b03166000908152601c602052604081206003018054839290612034908490615533565b90915550506040517fa77497b556f4aea76b14ecf80e749b85a2b4562f73ca2adf6764583c5d59b08390610c8c9033908590614998565b612073613a95565b60235461010090046001600160a01b039081169116146120a55760405162461bcd60e51b8152600401610a9d90614fd1565b600a8160ff1610156120c95760405162461bcd60e51b8152600401610a9d90614f2c565b6012805460ff9092166101000261ff0019909216919091179055565b60005460ff16156121085760405162461bcd60e51b8152600401610a9d9061503e565b60008054600160ff199091161762ff000019166212000017905560408051808201909152600680825265444f4749524160d01b602090920191825261214f91601f916145c8565b5060408051808201909152601d8082527f646f676972612e6c6f6c207c7c20646f676972612e6574682e6c696e6b000000602092830190815261219292916145c8565b506000546121aa9062010000900460ff16600a6155a5565b6121b8906305f5e100615671565b600b556121cb6305f5e100600019615720565b6121d7906000196156b9565b6000600b01600101819055506014600060120160000160006101000a81548160ff021916908360ff1602179055506014600060120160000160016101000a81548160ff021916908360ff1602179055506032600060120160000160036101000a81548160ff021916908360ff1602179055506064600060120160000160026101000a81548160ff021916908360ff1602179055506032600060120160000160056101000a81548160ff021916908360ff1602179055506032600060120160000160046101000a81548160ff021916908360ff1602179055506064600060120160000160076101000a81548160ff021916908360ff1602179055506064600060120160000160086101000a81548160ff021916908360ff160217905550610e10600060120160010181905550600a600060120160000160066101000a81548160ff021916908360ff16021790555060046000800160036101000a81548160ff021916908360ff1602179055506907695a92c20d6fe000006000601701819055506040516123629061464c565b604051809103906000f08015801561237e573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b03929092169190911790556040516123ab9061464c565b604051809103906000f0801580156123c7573d6000803e3d6000fd5b50600780546001600160a01b039283166001600160a01b031991821617909155600280548216737a250d5630b4cf539739df2c5dacb4c659f2488d17908190556005805490921673fedd9544b47a6d4a1967d385575866bd6f7a2b3717909155604080516315ab88c960e31b81529051919092169163ad5c4648916004828101926020929190829003018186803b15801561246157600080fd5b505afa158015612475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612499919061477c565b600380546001600160a01b0319166001600160a01b039283161790556002546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156124f257600080fd5b505afa158015612506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252a919061477c565b6003546040516364e329cb60e11b81526001600160a01b039283169263c9c653969261255e9230929091169060040161497e565b602060405180830381600087803b15801561257857600080fd5b505af115801561258c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b0919061477c565b600180546001600160a01b039283166001600160a01b0319909116178155601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f849805460ff19908116831790915533600090815260408082208054909316841790925591549092168152908120805461ff001916610100179055600c5461263c9060059061554b565b600c549091506000906126509083906156b9565b336000908152601c60205260409020600301819055905061267260048361554b565b61267c90836156b9565b6027908155600580546001600160a01b039081166000908152601c6020526040808220805460ff1916600117905593549254909116815291909120600301556126c660048361554b565b6007546001600160a01b03166000908152601c6020526040902060030155600b546126f39060149061554b565b6007546001600160a01b03166000908152601c6020526040812060020191909155805461ff001916610100179055610258601b55600a602955612739426203f480615533565b6026555050565b6001600160a01b0381166000908152601c6020526040812060050154612769906103e890615720565b905080156127775780611062565b506001919050565b612787613a95565b60235461010090046001600160a01b039081169116146127b95760405162461bcd60e51b8152600401610a9d90614fd1565b600a81101580156127cb575060648111155b6127e75760405162461bcd60e51b8152600401610a9d9061522d565b602955565b60235460ff1690565b6127fd613a95565b60235461010090046001600160a01b0390811691161461282f5760405162461bcd60e51b8152600401610a9d90614fd1565b6000805461ff0019169055565b612844613a95565b60235461010090046001600160a01b039081169116146128765760405162461bcd60e51b8152600401610a9d90614fd1565b6024546001600160a01b031661289e5760405162461bcd60e51b8152600401610a9d90614b1f565b602480546001600160a01b0319169055565b600054610100900460ff16156128d85760405162461bcd60e51b8152600401610a9d90614ea5565b601b54601a5442916128e991615533565b106129065760405162461bcd60e51b8152600401610a9d90614e6e565b6001546001600160a01b03166000908152601c602052604081206003015460125490919061293f90640100000000900460ff168361554b565b9050600061294b611da4565b612955908361554b565b6001546001600160a01b03166000908152601c60205260408120600301805492935084929091906129879084906156b9565b90915550506000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84c80548492906129c7908490615533565b90915550506000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84b8054839290612a07908490615533565b909155505060118054829190600090612a21908490615533565b909155505042601a55612a32612c93565b7f4acb597af16b6650a7028129045cb4d1779b97e359b0956584faa8892a4ec4b98160405161122d919061550e565b60235461010090046001600160a01b031690565b601b54601a546000918291612a8a9190615533565b9050804211612a9a576000612aa4565b612aa481426156b9565b91505090565b336000612ab5611da4565b9050612ac082611070565b15612add5760405162461bcd60e51b8152600401610a9d906152f1565b6001600160a01b0382166000908152601c6020526040902060030154612b038285615671565b10612b205760405162461bcd60e51b8152600401610a9d90614a2b565b612b2a8184615671565b6001600160a01b0383166000908152601c602052604081206003018054909190612b559084906156b9565b90915550612b6590508184615671565b600c8054600090612b779084906156b9565b909155505060108054849190600090612b91908490615533565b9091555050505050565b60606000601f018054610b01906156d0565b612bb5613a95565b60235461010090046001600160a01b03908116911614612be75760405162461bcd60e51b8152600401610a9d90614fd1565b69021e19e0c9bab24000008111612c105760405162461bcd60e51b8152600401610a9d90614ecb565b600054612c279062010000900460ff16600a6155a5565b612c319082615671565b60175550565b6000610cac612c44613a95565b8484601d6000612c52613a95565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546112a191906156b9565b60006112a6338484613b4d565b600154604080517ffff6cae900000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b158015612cf257600080fd5b505af1158015612d06573d6000803e3d6000fd5b50505050565b6002546001600160a01b031690565b336000612d26611da4565b9050612d3182611070565b15612d4e5760405162461bcd60e51b8152600401610a9d906152f1565b6001600160a01b0382166000908152601c6020526040902060030154612d748285615671565b10612d915760405162461bcd60e51b8152600401610a9d90614a2b565b612d9b8184615671565b6001600160a01b0383166000908152601c602052604081206003018054909190612dc69084906156b9565b90915550612dd690508184615671565b6000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84c8054909190612e11908490615533565b90915550506000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84b8054859290612e51908490615533565b909155505060118054849190600090612e6b908490615533565b90915550612e799050612c93565b7f5cda1501a74cd6ec9eb0a1315d6d11eb8f609345603746a5d2e3af97f4aac7ba8360405161122d919061550e565b6001600160a01b0383166000908152601c6020526040812054610100900460ff1615612ee857600f548214612edf57506002612ee3565b5060005b6112aa565b6001600160a01b0383166000908152601c6020526040902054610100900460ff1615612f16575060016112aa565b5060029392505050565b612f28614658565b50604080516101408101825260125460ff8082168352610100808304821660208501526201000083048216948401949094526301000000820481166060840152640100000000820481166080840152650100000000008204811660a084015266010000000000008204811660c08401526701000000000000008204811660e0840152600160401b909104169181019190915260135461012082015290565b612fce6146ac565b600080612fdc888886612ea8565b9150612fe88888611464565b8684529050846131415760125461300e908790670100000000000000900460ff1661341f565b604084015260125461302a90879062010000900460ff1661341f565b60c0840152600182600281111561305157634e487b7160e01b600052602160045260246000fd5b14156130b657601254600090613070908890610100900460ff1661341f565b90506000811561309f576029546130868b612740565b6130909084615671565b61309a919061554b565b6130a2565b60005b90506130ae81836156b9565b608086015250505b60008260028111156130d857634e487b7160e01b600052602160045260246000fd5b1415613141576130eb8661096f88613203565b606084015260006130fb87611b00565b90506000811561312a576029546131118a612740565b61311b9084615671565b613125919061554b565b61312d565b60005b90506131398183615533565b60a086015250505b60c0830151606084015160808501516040860151865161316191906156b9565b61316b91906156b9565b61317591906156b9565b61317f91906156b9565b6020840152955095509592505050565b613197613a95565b60235461010090046001600160a01b039081169116146131c95760405162461bcd60e51b8152600401610a9d90614fd1565b60148160ff1610156131ed5760405162461bcd60e51b8152600401610a9d90615113565b6012805460ff191660ff92909216919091179055565b600b54600090819061321884620186a0615671565b613222919061554b565b9050600181101561323a57505060125460ff16611065565b6103e8811061325f576012546132549060ff166005615690565b60ff16915050611065565b600a81101580156132705750606481105b15613286576012546132549060ff166002615690565b6064811015801561329857506101f481105b156132ae576012546132549060ff166003615690565b6101f481101580156132c157506103e881105b156132d7576012546132549060ff166004615690565b505060125460ff16611065565b6007546001600160a01b031690565b6003546001600160a01b031690565b61330a613a95565b60235461010090046001600160a01b0390811691161461333c5760405162461bcd60e51b8152600401610a9d90614fd1565b60148160ff1610156133605760405162461bcd60e51b8152600401610a9d90615113565b6012805460ff90921663010000000263ff00000019909216919091179055565b613388613a95565b60235461010090046001600160a01b039081169116146133ba5760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b0381166000908152601c602052604090205462010000900460ff166133f85760405162461bcd60e51b8152600401610a9d90614d1f565b6001600160a01b0381166000908152601c6020526040812060020155611a35602182613dfb565b60006112aa828461554b565b613433613a95565b60235461010090046001600160a01b039081169116146134655760405162461bcd60e51b8152600401610a9d90614fd1565b600a546001600160a01b03161561348e5760405162461bcd60e51b8152600401610a9d90614d8d565b803b806134ad5760405162461bcd60e51b8152600401610a9d90614c8f565b600a80546001600160a01b0319166001600160a01b0384161790556040517fbfca0af3a33c0bcae29f7d07934c90e392c5d6c2ba686ce898528ee63bea8f5290610c8c90849061496a565b613500613a95565b60235461010090046001600160a01b039081169116146135325760405162461bcd60e51b8152600401610a9d90614fd1565b602a54610100900460ff1661358957600880546001600160a01b0383166001600160a01b031990911681179091556000908152601c60205260409020805460ff19166001179055602a805461ff0019166101001790555b50565b60105490565b6001600160a01b039182166000908152601d6020908152604080832093909416825291909152205490565b6024546001600160a01b031690565b6135d4613a95565b60235461010090046001600160a01b039081169116146136065760405162461bcd60e51b8152600401610a9d90614fd1565b60328160ff16101561362a5760405162461bcd60e51b8152600401610a9d90614ad2565b6012805460ff909216600160401b0268ff000000000000000019909216919091179055565b600054610100900460ff16156136775760405162461bcd60e51b8152600401610a9d90614ea5565b601b54601a54429161368891615533565b106136a55760405162461bcd60e51b8152600401610a9d90614e6e565b60006136af611da4565b601154909150600090156136c5576011546136c9565b600b545b6012549091506000906136e89065010000000000900460ff168361554b565b60115490915081101561379b576011805482919060009061370a9084906156b9565b9091555061371a90508382615671565b6000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84c80549091906137559084906156b9565b90915550506000808052601c6020527fb9c6de81004e18dedadca3e5eabaab449ca91dff6f58efc9461da635fe77f84b80548392906137959084906156b9565b90915550505b6137a58382615671565b600c80546000906137b79084906156b9565b909155505042601a556137c8612c93565b7f4d0885014b9e2b7d05af2e851acb4501f546c37f2670e4c3c2c87681d98c1b418160405161122d919061550e565b6137ff613a95565b60235461010090046001600160a01b039081169116146138315760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b613864613a95565b60235461010090046001600160a01b039081169116146138965760405162461bcd60e51b8152600401610a9d90614fd1565b60328160ff1610156138ba5760405162461bcd60e51b8152600401610a9d90614c58565b6012805460ff909216620100000262ff000019909216919091179055565b6138e0613a95565b60235461010090046001600160a01b039081169116146139125760405162461bcd60e51b8152600401610a9d90614fd1565b6001600160a01b0381166139385760405162461bcd60e51b8152600401610a9d90614ba8565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031690565b6000613973611da4565b601c6000610ccc61395a565b613987613a95565b60235461010090046001600160a01b039081169116146139b95760405162461bcd60e51b8152600401610a9d90614fd1565b60148160ff16116139dc5760405162461bcd60e51b8152600401610a9d90615113565b6012805460ff9092166401000000000264ff0000000019909216919091179055565b613a066146e9565b506001600160a01b03166000908152601c6020908152604091829020825161012081018452815460ff80821615158352610100808304821615159584019590955262010000909104161515938101939093526001810154606084015260028101546080840152600381015460a0840152600481015460c0840152600581015460e0840152600601549082015290565b3390565b6001600160a01b038316613abf5760405162461bcd60e51b8152600401610a9d906151e9565b6001600160a01b038216613ae55760405162461bcd60e51b8152600401610a9d90614bee565b6001600160a01b038084166000818152601d602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590613b4090859061550e565b60405180910390a3505050565b60006001600160a01b038416613b755760405162461bcd60e51b8152600401610a9d9061516d565b6001600160a01b038316613b9b5760405162461bcd60e51b8152600401610a9d90614a8f565b60008211613bbb5760405162461bcd60e51b8152600401610a9d90614ff5565b6001546001600160a01b0385811691161415613bf957600054610100900460ff1615613bf95760405162461bcd60e51b8152600401610a9d90614ce8565b6005546001600160a01b0385811691161415613c9e576014602754613c1e919061554b565b821115613c3d5760405162461bcd60e51b8152600401610a9d90614a2b565b4260285462015180613c4f9190615533565b10613c6c5760405162461bcd60e51b8152600401610a9d90614cc6565b6001546001600160a01b03848116911614613c995760405162461bcd60e51b8152600401610a9d90614db7565b426028555b6000613caa8585611a9c565b90506000613cb6611da4565b90506000613cc2610cff565b90506000806000613cd68a8a8a8988612fc6565b600f87905591945092509050613cee89868486613e10565b613cfb8a8a87868561418c565b604083015160108054600090613d12908490615533565b90915550506040830151613d27908690615671565b600c8054600090613d399084906156b9565b90915550506023805483919060ff19166001836002811115613d6b57634e487b7160e01b600052602160045260246000fd5b0217905550886001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560200151604051613db7919061550e565b60405180910390a35060019998505050505050505050565b6000611062826143ec565b60006112aa83836143f0565b60006112aa836001600160a01b038416614449565b60006112aa836001600160a01b038416614493565b828160c00151613e209190615671565b6005546001600160a01b03166000908152601c602052604081206003018054909190613e4d908490615533565b9091555060019050826002811115613e7557634e487b7160e01b600052602160045260246000fd5b1415613ef557828160800151613e8b9190615671565b6007546001600160a01b03166000908152601c602052604081206003018054909190613eb8908490615533565b909155505060808101516007546001600160a01b03166000908152601c602052604081206002018054909190613eef908490615533565b90915550505b6000826002811115613f1757634e487b7160e01b600052602160045260246000fd5b1415612d065760188054906000613f2d83615705565b91905055506000838260600151613f449190615671565b601254601854919250613f6591660100000000000090910460ff1690615720565b61402c576006546001600160a01b03166000908152601c6020526040812060030154613f92908390615533565b600680546001600160a01b039081166000908152601c60205260408082206003908101839055935483168252808220600201829055918a16815290812090910180549293508392909190613fe7908490615533565b90915550506040517f9c2270628a9b29d30ae96b6c4c14ed646ee134febdce38a5b77f2bde9cea2e209061401e9088908490614998565b60405180910390a150614096565b6006546001600160a01b03166000908152601c602052604081206003018054839290614059908490615533565b909155505060608201516006546001600160a01b03166000908152601c602052604081206002018054909190614090908490615533565b90915550505b6000848360a001516140a89190615671565b6007546001600160a01b03166000908152601c60205260408120600301805492935083929091906140da9084906156b9565b909155505060a08301516007546001600160a01b03166000908152601c6020526040812060020180549091906141119084906156b9565b90915550506001600160a01b0386166000908152601c602052604081206003018054839290614141908490615533565b909155505060a08301516040517f9cf92e896d7fce8c4a7600daa08f0a39e68eb99cd4413843df33e0fdb75535389161417c91899190614998565b60405180910390a1505050505050565b60018160038111156141ae57634e487b7160e01b600052602160045260246000fd5b141561426e5781516141c1908490615671565b6001600160a01b0386166000908152601c6020526040812060030180549091906141ec9084906156b9565b90915550506020808301516001600160a01b0386166000908152601c90925260408220600201805491929091614223908490615533565b90915550506020820151614238908490615671565b6001600160a01b0385166000908152601c602052604081206003018054909190614263908490615533565b909155506143e59050565b600081600381111561429057634e487b7160e01b600052602160045260246000fd5b14156143005781516001600160a01b0386166000908152601c6020526040812060020180549091906142c39084906156b9565b909155505081516142d5908490615671565b6001600160a01b0386166000908152601c6020526040812060030180549091906142239084906156b9565b600281600381111561432257634e487b7160e01b600052602160045260246000fd5b14156143675781516001600160a01b0386166000908152601c6020526040812060020180549091906143559084906156b9565b909155505081516141c1908490615671565b8151614374908490615671565b6001600160a01b0386166000908152601c60205260408120600301805490919061439f9084906156b9565b909155505060208201516143b4908490615671565b6001600160a01b0385166000908152601c6020526040812060030180549091906143df908490615533565b90915550505b5050505050565b5490565b815460009082106144135760405162461bcd60e51b8152600401610a9d90614a4d565b82600001828154811061443657634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600061445583836145b0565b61448b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610cb0565b506000610cb0565b600081815260018301602052604081205480156145a65760006144b76001836156b9565b85549091506000906144cb906001906156b9565b905060008660000182815481106144f257634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061452357634e487b7160e01b600052603260045260246000fd5b60009182526020909120015561453a836001615533565b6000828152600189016020526040902055865487908061456a57634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610cb0565b6000915050610cb0565b60009081526001919091016020526040902054151590565b8280546145d4906156d0565b90600052602060002090601f0160209004810192826145f6576000855561463c565b82601f1061460f57805160ff191683800117855561463c565b8280016001018555821561463c579182015b8281111561463c578251825591602001919060010190614621565b5061464892915061473b565b5090565b605c8061578c83390190565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915290565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518061012001604052806000151581526020016000151581526020016000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b5b80821115614648576000815560010161473c565b8035801515811461106557600080fd5b600060208284031215614771578081fd5b81356112aa81615776565b60006020828403121561478d578081fd5b81516112aa81615776565b600080604083850312156147aa578081fd5b82356147b581615776565b915060208301356147c581615776565b809150509250929050565b6000806000606084860312156147e4578081fd5b83356147ef81615776565b925060208401356147ff81615776565b929592945050506040919091013590565b600080600080600060a08688031215614827578081fd5b853561483281615776565b9450602086013561484281615776565b93506040860135925061485760608701614750565b949793965091946080013592915050565b6000806040838503121561487a578182fd5b823561488581615776565b915061489360208401614750565b90509250929050565b600080604083850312156148ae578182fd5b82356148b981615776565b946020939093013593505050565b6000602082840312156148d8578081fd5b5035919050565b6000602082840312156148f0578081fd5b5051919050565b60008060408385031215614909578182fd5b50508035926020909101359150565b600060208284031215614929578081fd5b813560ff811681146112aa578182fd5b15159052565b6003811061494f5761494f615760565b9052565b6004811061494f5761494f615760565b60ff169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60208101610cb0828461493f565b60208101610cb08284614953565b6000602080835283518082850152825b81811015614a04578581018301518582016040015282016149e8565b81811115614a155783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600890820152670e8dede40daeac6d60c31b604082015260600190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602d908201527f63616e2774206265206d6f7265207468616e203225206f66207468652062757960408201526c20626f6e757320737570706c7960981b606082015260800190565b60208082526010908201526f3737903832b73234b7339037bbb732b960811b604082015260600190565b6020808252601b908201527f6e696365207368696c6c20627574206e65656420746f20776169740000000000604082015260600190565b6020808252600e908201526d746f6f206665772070656f706c6560901b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600e908201526d34b73b30b634b21031b0b63632b960911b604082015260600190565b60208082526015908201527f63616e2774206265206d6f7265207468616e2032250000000000000000000000604082015260600190565b60208082526012908201527f6d757374206265206120636f6e74726163740000000000000000000000000000604082015260600190565b6020808252600890820152673a37b79039b7b7b760c11b604082015260600190565b60208082526014908201527f5472616e73666572732061726520706175736564000000000000000000000000604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526013908201527f6578636c756465642063616e27742063616c6c00000000000000000000000000604082015260600190565b60208082526010908201526f19985c9b48185b1c9958591e481cd95d60821b604082015260600190565b6020808252601d908201527f63616e206f6e6c792073656c6c20746f20756e697377617020706f6f6c000000604082015260600190565b6020808252601c908201527f63616e277420757365207468652073616d65206f6e6520747769636500000000604082015260600190565b60208082526029908201527f63616e2774206265206d6f7265207468616e202e3125206f6620646f676563696040820152681d1e481c995dd85c9960ba1b606082015260800190565b60208082526012908201527f446f6769726120636f6f6c696e67646f776e0000000000000000000000000000604082015260600190565b6020808252600c908201526b1cdd1a5b1b081c185d5cd95960a21b604082015260600190565b6020808252601d908201527f63616e2774206265206c657373207468616e2031306b20746f6b656e73000000604082015260600190565b60208082526010908201526f746f6f2073686f727420612074696d6560801b604082015260600190565b60208082526016908201527f63616e2774206265206d6f7265207468616e2031302500000000000000000000604082015260600190565b60208082526012908201527f63616e2774206b656b20746f6f206d7563680000000000000000000000000000604082015260600190565b6020808252601a908201527f6e6963652068656c7020627574206e65656420746f2077616974000000000000604082015260600190565b6020808252600a90820152694f776e6572206f6e6c7960b01b604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600c908201526b63616e6e6f7420636c61696d60a01b604082015260600190565b6020808252601f908201527f63616e2774206265206d6f7265207468616e20612066756c6c206c6576656c00604082015260600190565b60208082526010908201526f3737ba103b30b634b21031b0b63632b960811b604082015260600190565b60208082526015908201527f63616e2774206265206d6f7265207468616e2035250000000000000000000000604082015260600190565b602080825260099082015268746f6f20717569636b60b81b604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526018908201527f63616e2774206265206d6f7265207468616e2035302f35300000000000000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602a908201527f63616e2774206265206c6f776572207468616e203130206f7220677265617465604082015269072207468616e203130360b41b606082015260800190565b60208082526023908201527f6578636c75646564206164647265737365732063616e2774206265206177617260408201526219195960ea1b606082015260800190565b60208082526014908201527f646f6e277420776173746520796f757220676173000000000000000000000000604082015260600190565b6020808252602b908201527f4578636c75646564206164647265737365732063616e27742063616c6c20746860408201526a34b990333ab731ba34b7b760a91b606082015260800190565b60208082526018908201527f796f75206e65656420746f207761697420746f20646f67650000000000000000604082015260600190565b60006101208201905082511515825260208301511515602083015260408301516153a06040840182614939565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525092915050565b6000610140820190506153f9828451614963565b602083015161540b6020840182614963565b50604083015161541e6040840182614963565b5060608301516154316060840182614963565b5060808301516154446080840182614963565b5060a083015161545760a0840182614963565b5060c083015161546a60c0840182614963565b5060e083015161547d60e0840182614963565b506101008084015161549182850182614963565b505061012092830151919092015290565b600061012082019050845182526020850151602083015260408501516040830152606085015160608301526080850151608083015260a085015160a083015260c085015160c08301526154f860e083018561493f565b615506610100830184614953565b949350505050565b90815260200190565b918252602082015260400190565b60ff91909116815260200190565b6000821982111561554657615546615734565b500190565b60008261555a5761555a61574a565b500490565b80825b6001808611615571575061559c565b81870482111561558357615583615734565b8086161561559057918102915b9490941c938002615562565b94509492505050565b60006112aa60001960ff8516846000826155c1575060016112aa565b816155ce575060006112aa565b81600181146155e457600281146155ee5761561b565b60019150506112aa565b60ff8411156155ff576155ff615734565b6001841b91508482111561561557615615615734565b506112aa565b5060208310610133831016604e8410600b8410161715615649575081810a83811115612ee357612ee3615734565b615656848484600161555f565b80860482111561566857615668615734565b02949350505050565b600081600019048311821515161561568b5761568b615734565b500290565b600060ff821660ff84168160ff04811182151516156156b1576156b1615734565b029392505050565b6000828210156156cb576156cb615734565b500390565b6002810460018216806156e457607f821691505b6020821081141561160b57634e487b7160e01b600052602260045260246000fd5b600060001982141561571957615719615734565b5060010190565b60008261572f5761572f61574a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038116811461358957600080fdfe6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220135137c4ade22b7f735777a2fc6c8efcb1b9117c246593f293cc61b07449f50d64736f6c63430008010033a26469706673582212202409d15672711167790a9a314fc6e4e6aeb24643a29176294734248b3501add164736f6c63430008010033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.