ERC-20
Overview
Max Total Supply
777,777,777 SLOTS
Holders
70
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
6,979,830.825980535403317571 SLOTSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoBananas
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-01 */ // SPDX-License-Identifier: MIT /******************************************************************************************* TELEGRAM: https://t.me/GoBananasERC WEB: https://gobananas.bet X: https://twitter.com/GoBananasERC _ //\ V \ \ \_ \,'.`-. |\ `. `. ( \ `. `-. _,.-:\ \ \ `. `-._ __..--' ,-';/ \ `. `-. `-..___..---' _.--' ,'/ `. `. `-._ __..--' ,' / `. `-_ ``--..'' _.-' ,' `-_ `-.___ __,--' ,' `-.__ `----""" __.-' `--..____..--' */////////////////////////////////////////////////////////////////////////////////////////// pragma solidity 0.8.18; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract GoBananas is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address payable public marketingWallet; address payable public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("Go Bananas", "SLOTS") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 15; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 5; uint256 _sellMarketingFee = 20; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 5; uint256 totalSupply = 777_777_777 * 1e18; maxTransactionAmount = 15_555_555 * 1e18; // 2% from total supply maxTransactionAmountTxn maxWallet = 15_555_555 * 1e18; // 2% from total supply maxWallet swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = payable(0x856FdC0Ce3AD95806849f518c70B9b8D6De8Bc27); devWallet = payable(0x87f5Ba2cc9c7f091bdf50054C7f23AD3b3c62b46); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(marketingWallet, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(marketingWallet, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 30, "Must keep fees at 30% or less"); } function updateSellFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 30, "Must keep fees at 30% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateDevWallet(address payable newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function updateMarketingWallet(address payable newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } // buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } // sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && automatedMarketMakerPairs[to] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForDev += (fees * sellDevFee) / sellTotalFees; tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForDev += (fees * buyDevFee) / buyTotalFees; tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 10) { contractBalance = swapTokensAtAmount * 10; } uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; devWallet.transfer(ethForDev); if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, tokensForLiquidity ); } marketingWallet.transfer(address(this).balance); } }
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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600b805462ffffff19166001908117909155600d805460ff191690911790553480156200003057600080fd5b506040518060400160405280600a815260200169476f2042616e616e617360b01b81525060405180604001604052806005815260200164534c4f545360d81b81525081600390816200008391906200075a565b5060046200009282826200075a565b505050620000af620000a9620003fe60201b60201c565b62000402565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000d181600162000454565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000826565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000826565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022a919062000826565b6001600160a01b031660a08190526200024590600162000454565b60a05162000255906001620004ce565b6a0cde045385d561f9ac00006008819055600a55600f60006005601482826b02835cd9c6d6f2156b2400006127106200028f82846200086e565b6200029b91906200088e565b600955600f8790556010869055601185905584620002ba8789620008b1565b620002c69190620008b1565b600e5560138490556014839055601582905581620002e58486620008b1565b620002f19190620008b1565b601255600680546001600160a01b031990811673856fdc0ce3ad95806849f518c70b9b8d6de8bc2717909155600780549091167387f5ba2cc9c7f091bdf50054c7f23ad3b3c62b461790556200035b620003536005546001600160a01b031690565b600162000522565b60065462000374906001600160a01b0316600162000522565b6200038130600162000522565b6200039061dead600162000522565b620003af620003a76005546001600160a01b031690565b600162000454565b600654620003c8906001600160a01b0316600162000454565b620003d530600162000454565b620003e461dead600162000454565b620003f03382620005cc565b5050505050505050620008c7565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004a35760405162461bcd60e51b81526020600482018190526024820152600080516020620032f283398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200056d5760405162461bcd60e51b81526020600482018190526024820152600080516020620032f283398151915260448201526064016200049a565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006245760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200049a565b8060026000828254620006389190620008b1565b90915550506001600160a01b0382166000908152602081905260408120805483929062000667908490620008b1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006e157607f821691505b6020821081036200070257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006b157600081815260208120601f850160051c81016020861015620007315750805b601f850160051c820191505b8181101562000752578281556001016200073d565b505050505050565b81516001600160401b03811115620007765762000776620006b6565b6200078e81620007878454620006cc565b8462000708565b602080601f831160018114620007c65760008415620007ad5750858301515b600019600386901b1c1916600185901b17855562000752565b600085815260208120601f198616915b82811015620007f757888601518255948401946001909101908401620007d6565b5085821015620008165787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200083957600080fd5b81516001600160a01b03811681146200085157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000888576200088862000858565b92915050565b600082620008ac57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000888576200088862000858565b60805160a0516129cd620009256000396000818161052d01528181610f2001526118240152600081816103e2015281816117e601528181612344015281816123fd01528181612439015281816124b3015261251001526129cd6000f3fe6080604052600436106103395760003560e01c80638ea5220f116101ab578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610994578063f2fde38b146109aa578063f6374342146109ca578063f8b45b05146109e057600080fd5b8063dd62ed3e14610923578063e2f4560514610969578063e884f2601461097f57600080fd5b8063c876d0b9116100d1578063c876d0b9146108bd578063c8c8ebe4146108d7578063d257b34f146108ed578063d85ba0631461090d57600080fd5b8063c02466681461085d578063c17b5b8c1461087d578063c18bc1951461089d57600080fd5b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb146107ce578063aacebbe3146107ee578063b62496f51461080e578063bbc0c7421461083e57600080fd5b80639fccce3214610782578063a0d82dc514610798578063a457c2d7146107ae57600080fd5b80638ea5220f146106e15780639213691314610701578063924de9b71461071757806395d89b41146107375780639a7a23d61461074c5780639c3b4fdc1461076c57600080fd5b806349bd5a5e11610285578063751039fc116102235780637bce5a04116101fd5780637bce5a04146106785780638095d5641461068e5780638a8c523c146106ae5780638da5cb5b146106c357600080fd5b8063751039fc146106235780637571336a1461063857806375f0a8741461065857600080fd5b80636a486a8e1161025f5780636a486a8e146105a25780636ddd1713146105b857806370a08231146105d8578063715018a61461060e57600080fd5b806349bd5a5e1461051b5780634a62bb651461054f5780634fbee1931461056957600080fd5b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104a957806327c8f835146104c9578063313ce567146104df57806339509351146104fb57600080fd5b80631a8145bb1461045d5780631f3fed8f14610473578063203e727e1461048957600080fd5b806306fdde0314610345578063095ea7b31461037057806310d5de53146103a05780631694505e146103d057806318160ddd1461041c5780631816467f1461043b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109f6565b604051610367919061258e565b60405180910390f35b34801561037c57600080fd5b5061039061038b3660046125f1565b610a88565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb36600461261d565b601a6020526000908152604090205460ff1681565b3480156103dc57600080fd5b506104047f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610367565b34801561042857600080fd5b506002545b604051908152602001610367565b34801561044757600080fd5b5061045b61045636600461261d565b610a9f565b005b34801561046957600080fd5b5061042d60175481565b34801561047f57600080fd5b5061042d60165481565b34801561049557600080fd5b5061045b6104a436600461263a565b610b2f565b3480156104b557600080fd5b506103906104c4366004612653565b610c0c565b3480156104d557600080fd5b5061040461dead81565b3480156104eb57600080fd5b5060405160128152602001610367565b34801561050757600080fd5b506103906105163660046125f1565b610cb6565b34801561052757600080fd5b506104047f000000000000000000000000000000000000000000000000000000000000000081565b34801561055b57600080fd5b50600b546103909060ff1681565b34801561057557600080fd5b5061039061058436600461261d565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105ae57600080fd5b5061042d60125481565b3480156105c457600080fd5b50600b546103909062010000900460ff1681565b3480156105e457600080fd5b5061042d6105f336600461261d565b6001600160a01b031660009081526020819052604090205490565b34801561061a57600080fd5b5061045b610cf2565b34801561062f57600080fd5b50610390610d28565b34801561064457600080fd5b5061045b6106533660046126a4565b610d65565b34801561066457600080fd5b50600654610404906001600160a01b031681565b34801561068457600080fd5b5061042d600f5481565b34801561069a57600080fd5b5061045b6106a93660046126d9565b610dba565b3480156106ba57600080fd5b5061045b610e62565b3480156106cf57600080fd5b506005546001600160a01b0316610404565b3480156106ed57600080fd5b50600754610404906001600160a01b031681565b34801561070d57600080fd5b5061042d60135481565b34801561072357600080fd5b5061045b610732366004612705565b610e9f565b34801561074357600080fd5b5061035a610ee5565b34801561075857600080fd5b5061045b6107673660046126a4565b610ef4565b34801561077857600080fd5b5061042d60115481565b34801561078e57600080fd5b5061042d60185481565b3480156107a457600080fd5b5061042d60155481565b3480156107ba57600080fd5b506103906107c93660046125f1565b610fd3565b3480156107da57600080fd5b506103906107e93660046125f1565b61106c565b3480156107fa57600080fd5b5061045b61080936600461261d565b611079565b34801561081a57600080fd5b5061039061082936600461261d565b601b6020526000908152604090205460ff1681565b34801561084a57600080fd5b50600b5461039090610100900460ff1681565b34801561086957600080fd5b5061045b6108783660046126a4565b611100565b34801561088957600080fd5b5061045b6108983660046126d9565b611189565b3480156108a957600080fd5b5061045b6108b836600461263a565b61122c565b3480156108c957600080fd5b50600d546103909060ff1681565b3480156108e357600080fd5b5061042d60085481565b3480156108f957600080fd5b5061039061090836600461263a565b6112fd565b34801561091957600080fd5b5061042d600e5481565b34801561092f57600080fd5b5061042d61093e366004612720565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561097557600080fd5b5061042d60095481565b34801561098b57600080fd5b50610390611454565b3480156109a057600080fd5b5061042d60105481565b3480156109b657600080fd5b5061045b6109c536600461261d565b611491565b3480156109d657600080fd5b5061042d60145481565b3480156109ec57600080fd5b5061042d600a5481565b606060038054610a0590612759565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3190612759565b8015610a7e5780601f10610a5357610100808354040283529160200191610a7e565b820191906000526020600020905b815481529060010190602001808311610a6157829003601f168201915b5050505050905090565b6000610a9533848461152c565b5060015b92915050565b6005546001600160a01b03163314610ad25760405162461bcd60e51b8152600401610ac990612793565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b595760405162461bcd60e51b8152600401610ac990612793565b670de0b6b3a76400006103e8610b6e60025490565b610b799060016127de565b610b8391906127f5565b610b8d91906127f5565b811015610bf45760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610ac9565b610c0681670de0b6b3a76400006127de565b60085550565b6000610c19848484611650565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c9e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ac9565b610cab853385840361152c565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a95918590610ced908690612817565b61152c565b6005546001600160a01b03163314610d1c5760405162461bcd60e51b8152600401610ac990612793565b610d266000611ec6565b565b6005546000906001600160a01b03163314610d555760405162461bcd60e51b8152600401610ac990612793565b50600b805460ff19169055600190565b6005546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610ac990612793565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610de45760405162461bcd60e51b8152600401610ac990612793565b600f8390556010829055601181905580610dfe8385612817565b610e089190612817565b600e819055601e1015610e5d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610ac9565b505050565b6005546001600160a01b03163314610e8c5760405162461bcd60e51b8152600401610ac990612793565b600b805462ffff00191662010100179055565b6005546001600160a01b03163314610ec95760405162461bcd60e51b8152600401610ac990612793565b600b8054911515620100000262ff000019909216919091179055565b606060048054610a0590612759565b6005546001600160a01b03163314610f1e5760405162461bcd60e51b8152600401610ac990612793565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610fc55760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ac9565b610fcf8282611f18565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110555760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ac9565b611062338585840361152c565b5060019392505050565b6000610a95338484611650565b6005546001600160a01b031633146110a35760405162461bcd60e51b8152600401610ac990612793565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610ac990612793565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146111b35760405162461bcd60e51b8152600401610ac990612793565b601383905560148290556015819055806111cd8385612817565b6111d79190612817565b6012819055601e1015610e5d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610ac9565b6005546001600160a01b031633146112565760405162461bcd60e51b8152600401610ac990612793565b670de0b6b3a76400006103e861126b60025490565b6112769060056127de565b61128091906127f5565b61128a91906127f5565b8110156112e55760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610ac9565b6112f781670de0b6b3a76400006127de565b600a5550565b6005546000906001600160a01b0316331461132a5760405162461bcd60e51b8152600401610ac990612793565b620186a061133760025490565b6113429060016127de565b61134c91906127f5565b8210156113b95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ac9565b6103e86113c560025490565b6113d09060056127de565b6113da91906127f5565b8211156114465760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ac9565b50600981905560015b919050565b6005546000906001600160a01b031633146114815760405162461bcd60e51b8152600401610ac990612793565b50600d805460ff19169055600190565b6005546001600160a01b031633146114bb5760405162461bcd60e51b8152600401610ac990612793565b6001600160a01b0381166115205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac9565b61152981611ec6565b50565b6001600160a01b03831661158e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac9565b6001600160a01b0382166115ef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116765760405162461bcd60e51b8152600401610ac99061282a565b6001600160a01b03821661169c5760405162461bcd60e51b8152600401610ac99061286f565b806000036116b057610e5d83836000611f6c565b600b5460ff1615611b6d576005546001600160a01b038481169116148015906116e757506005546001600160a01b03838116911614155b80156116fb57506001600160a01b03821615155b801561171257506001600160a01b03821661dead14155b80156117285750600554600160a01b900460ff16155b15611b6d57600b54610100900460ff166117c0576001600160a01b03831660009081526019602052604090205460ff168061177b57506001600160a01b03821660009081526019602052604090205460ff165b6117c05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ac9565b600d5460ff1615611907576005546001600160a01b0383811691161480159061181b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561185957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561190757326000908152600c602052604090205443116118f45760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610ac9565b326000908152600c602052604090204390555b6001600160a01b0383166000908152601b602052604090205460ff16801561194857506001600160a01b0382166000908152601a602052604090205460ff16155b15611a2c576008548111156119bd5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ac9565b600a546001600160a01b0383166000908152602081905260409020546119e39083612817565b1115611a275760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ac9565b611b6d565b6001600160a01b0382166000908152601b602052604090205460ff168015611a6d57506001600160a01b0383166000908152601a602052604090205460ff16155b15611ae357600854811115611a275760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ac9565b6001600160a01b0382166000908152601a602052604090205460ff16611b6d57600a546001600160a01b038316600090815260208190526040902054611b299083612817565b1115611b6d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ac9565b3060009081526020819052604090205460095481108015908190611b995750600b5462010000900460ff165b8015611baf5750600554600160a01b900460ff16155b8015611bd457506001600160a01b0385166000908152601b602052604090205460ff16155b8015611bf857506001600160a01b0384166000908152601b602052604090205460ff165b8015611c1d57506001600160a01b03851660009081526019602052604090205460ff16155b8015611c4257506001600160a01b03841660009081526019602052604090205460ff16155b15611c70576005805460ff60a01b1916600160a01b179055611c626120c1565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526019602052604090205460ff600160a01b909204821615911680611cbe57506001600160a01b03851660009081526019602052604090205460ff165b15611cc7575060005b60008115611eb2576001600160a01b0386166000908152601b602052604090205460ff168015611cf957506000601254115b15611db757611d1e6064611d18601254886122c290919063ffffffff16565b906122d5565b905060125460145482611d3191906127de565b611d3b91906127f5565b60176000828254611d4c9190612817565b9091555050601254601554611d6190836127de565b611d6b91906127f5565b60186000828254611d7c9190612817565b9091555050601254601354611d9190836127de565b611d9b91906127f5565b60166000828254611dac9190612817565b90915550611e949050565b6001600160a01b0387166000908152601b602052604090205460ff168015611de157506000600e54115b15611e9457611e006064611d18600e54886122c290919063ffffffff16565b9050600e5460105482611e1391906127de565b611e1d91906127f5565b60176000828254611e2e9190612817565b9091555050600e54601154611e4390836127de565b611e4d91906127f5565b60186000828254611e5e9190612817565b9091555050600e54600f54611e7390836127de565b611e7d91906127f5565b60166000828254611e8e9190612817565b90915550505b8015611ea557611ea5873083611f6c565b611eaf81866128b2565b94505b611ebd878787611f6c565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611f925760405162461bcd60e51b8152600401610ac99061282a565b6001600160a01b038216611fb85760405162461bcd60e51b8152600401610ac99061286f565b6001600160a01b038316600090815260208190526040902054818110156120305760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ac9565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612067908490612817565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120b391815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006018546016546017546120e89190612817565b6120f29190612817565b90508115806120ff575080155b15612108575050565b60095461211690600a6127de565b82111561212e5760095461212b90600a6127de565b91505b60006002826017548561214191906127de565b61214b91906127f5565b61215591906127f5565b9050600061216384836122e1565b90504761216f826122ed565b600061217b47836122e1565b9050600061219886611d18601654856122c290919063ffffffff16565b905060006121b587611d18601854866122c290919063ffffffff16565b90506000816121c484866128b2565b6121ce91906128b2565b60006017819055601681905560188190556007546040519293506001600160a01b03169184156108fc0291859190818181858888f19350505050158015612219573d6000803e3d6000fd5b5060008711801561222a5750600081115b1561227d5761223987826124ad565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156122b6573d6000803e3d6000fd5b50505050505050505050565b60006122ce82846127de565b9392505050565b60006122ce82846127f5565b60006122ce82846128b2565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612322576123226128c5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c491906128db565b816001815181106123d7576123d76128c5565b60200260200101906001600160a01b031690816001600160a01b031681525050612422307f00000000000000000000000000000000000000000000000000000000000000008461152c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906124779085906000908690309042906004016128f8565b600060405180830381600087803b15801561249157600080fd5b505af11580156124a5573d6000803e3d6000fd5b505050505050565b6124d8307f00000000000000000000000000000000000000000000000000000000000000008461152c565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612562573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125879190612969565b5050505050565b600060208083528351808285015260005b818110156125bb5785810183015185820160400152820161259f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461152957600080fd5b6000806040838503121561260457600080fd5b823561260f816125dc565b946020939093013593505050565b60006020828403121561262f57600080fd5b81356122ce816125dc565b60006020828403121561264c57600080fd5b5035919050565b60008060006060848603121561266857600080fd5b8335612673816125dc565b92506020840135612683816125dc565b929592945050506040919091013590565b8035801515811461144f57600080fd5b600080604083850312156126b757600080fd5b82356126c2816125dc565b91506126d060208401612694565b90509250929050565b6000806000606084860312156126ee57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561271757600080fd5b6122ce82612694565b6000806040838503121561273357600080fd5b823561273e816125dc565b9150602083013561274e816125dc565b809150509250929050565b600181811c9082168061276d57607f821691505b60208210810361278d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9957610a996127c8565b60008261281257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610a9957610a996127c8565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9957610a996127c8565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156128ed57600080fd5b81516122ce816125dc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129485784516001600160a01b031683529383019391830191600101612923565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561297e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cf047cdc3a9fe6d247daf34e1acf9de577e1d7b04d6c9da89dd7c868c1cce67c64736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106103395760003560e01c80638ea5220f116101ab578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610994578063f2fde38b146109aa578063f6374342146109ca578063f8b45b05146109e057600080fd5b8063dd62ed3e14610923578063e2f4560514610969578063e884f2601461097f57600080fd5b8063c876d0b9116100d1578063c876d0b9146108bd578063c8c8ebe4146108d7578063d257b34f146108ed578063d85ba0631461090d57600080fd5b8063c02466681461085d578063c17b5b8c1461087d578063c18bc1951461089d57600080fd5b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb146107ce578063aacebbe3146107ee578063b62496f51461080e578063bbc0c7421461083e57600080fd5b80639fccce3214610782578063a0d82dc514610798578063a457c2d7146107ae57600080fd5b80638ea5220f146106e15780639213691314610701578063924de9b71461071757806395d89b41146107375780639a7a23d61461074c5780639c3b4fdc1461076c57600080fd5b806349bd5a5e11610285578063751039fc116102235780637bce5a04116101fd5780637bce5a04146106785780638095d5641461068e5780638a8c523c146106ae5780638da5cb5b146106c357600080fd5b8063751039fc146106235780637571336a1461063857806375f0a8741461065857600080fd5b80636a486a8e1161025f5780636a486a8e146105a25780636ddd1713146105b857806370a08231146105d8578063715018a61461060e57600080fd5b806349bd5a5e1461051b5780634a62bb651461054f5780634fbee1931461056957600080fd5b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104a957806327c8f835146104c9578063313ce567146104df57806339509351146104fb57600080fd5b80631a8145bb1461045d5780631f3fed8f14610473578063203e727e1461048957600080fd5b806306fdde0314610345578063095ea7b31461037057806310d5de53146103a05780631694505e146103d057806318160ddd1461041c5780631816467f1461043b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109f6565b604051610367919061258e565b60405180910390f35b34801561037c57600080fd5b5061039061038b3660046125f1565b610a88565b6040519015158152602001610367565b3480156103ac57600080fd5b506103906103bb36600461261d565b601a6020526000908152604090205460ff1681565b3480156103dc57600080fd5b506104047f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610367565b34801561042857600080fd5b506002545b604051908152602001610367565b34801561044757600080fd5b5061045b61045636600461261d565b610a9f565b005b34801561046957600080fd5b5061042d60175481565b34801561047f57600080fd5b5061042d60165481565b34801561049557600080fd5b5061045b6104a436600461263a565b610b2f565b3480156104b557600080fd5b506103906104c4366004612653565b610c0c565b3480156104d557600080fd5b5061040461dead81565b3480156104eb57600080fd5b5060405160128152602001610367565b34801561050757600080fd5b506103906105163660046125f1565b610cb6565b34801561052757600080fd5b506104047f000000000000000000000000652032d79fd044b3155fb1fecc1b0ed9a84782fa81565b34801561055b57600080fd5b50600b546103909060ff1681565b34801561057557600080fd5b5061039061058436600461261d565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105ae57600080fd5b5061042d60125481565b3480156105c457600080fd5b50600b546103909062010000900460ff1681565b3480156105e457600080fd5b5061042d6105f336600461261d565b6001600160a01b031660009081526020819052604090205490565b34801561061a57600080fd5b5061045b610cf2565b34801561062f57600080fd5b50610390610d28565b34801561064457600080fd5b5061045b6106533660046126a4565b610d65565b34801561066457600080fd5b50600654610404906001600160a01b031681565b34801561068457600080fd5b5061042d600f5481565b34801561069a57600080fd5b5061045b6106a93660046126d9565b610dba565b3480156106ba57600080fd5b5061045b610e62565b3480156106cf57600080fd5b506005546001600160a01b0316610404565b3480156106ed57600080fd5b50600754610404906001600160a01b031681565b34801561070d57600080fd5b5061042d60135481565b34801561072357600080fd5b5061045b610732366004612705565b610e9f565b34801561074357600080fd5b5061035a610ee5565b34801561075857600080fd5b5061045b6107673660046126a4565b610ef4565b34801561077857600080fd5b5061042d60115481565b34801561078e57600080fd5b5061042d60185481565b3480156107a457600080fd5b5061042d60155481565b3480156107ba57600080fd5b506103906107c93660046125f1565b610fd3565b3480156107da57600080fd5b506103906107e93660046125f1565b61106c565b3480156107fa57600080fd5b5061045b61080936600461261d565b611079565b34801561081a57600080fd5b5061039061082936600461261d565b601b6020526000908152604090205460ff1681565b34801561084a57600080fd5b50600b5461039090610100900460ff1681565b34801561086957600080fd5b5061045b6108783660046126a4565b611100565b34801561088957600080fd5b5061045b6108983660046126d9565b611189565b3480156108a957600080fd5b5061045b6108b836600461263a565b61122c565b3480156108c957600080fd5b50600d546103909060ff1681565b3480156108e357600080fd5b5061042d60085481565b3480156108f957600080fd5b5061039061090836600461263a565b6112fd565b34801561091957600080fd5b5061042d600e5481565b34801561092f57600080fd5b5061042d61093e366004612720565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561097557600080fd5b5061042d60095481565b34801561098b57600080fd5b50610390611454565b3480156109a057600080fd5b5061042d60105481565b3480156109b657600080fd5b5061045b6109c536600461261d565b611491565b3480156109d657600080fd5b5061042d60145481565b3480156109ec57600080fd5b5061042d600a5481565b606060038054610a0590612759565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3190612759565b8015610a7e5780601f10610a5357610100808354040283529160200191610a7e565b820191906000526020600020905b815481529060010190602001808311610a6157829003601f168201915b5050505050905090565b6000610a9533848461152c565b5060015b92915050565b6005546001600160a01b03163314610ad25760405162461bcd60e51b8152600401610ac990612793565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b595760405162461bcd60e51b8152600401610ac990612793565b670de0b6b3a76400006103e8610b6e60025490565b610b799060016127de565b610b8391906127f5565b610b8d91906127f5565b811015610bf45760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610ac9565b610c0681670de0b6b3a76400006127de565b60085550565b6000610c19848484611650565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c9e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ac9565b610cab853385840361152c565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a95918590610ced908690612817565b61152c565b6005546001600160a01b03163314610d1c5760405162461bcd60e51b8152600401610ac990612793565b610d266000611ec6565b565b6005546000906001600160a01b03163314610d555760405162461bcd60e51b8152600401610ac990612793565b50600b805460ff19169055600190565b6005546001600160a01b03163314610d8f5760405162461bcd60e51b8152600401610ac990612793565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610de45760405162461bcd60e51b8152600401610ac990612793565b600f8390556010829055601181905580610dfe8385612817565b610e089190612817565b600e819055601e1015610e5d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610ac9565b505050565b6005546001600160a01b03163314610e8c5760405162461bcd60e51b8152600401610ac990612793565b600b805462ffff00191662010100179055565b6005546001600160a01b03163314610ec95760405162461bcd60e51b8152600401610ac990612793565b600b8054911515620100000262ff000019909216919091179055565b606060048054610a0590612759565b6005546001600160a01b03163314610f1e5760405162461bcd60e51b8152600401610ac990612793565b7f000000000000000000000000652032d79fd044b3155fb1fecc1b0ed9a84782fa6001600160a01b0316826001600160a01b031603610fc55760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ac9565b610fcf8282611f18565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110555760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ac9565b611062338585840361152c565b5060019392505050565b6000610a95338484611650565b6005546001600160a01b031633146110a35760405162461bcd60e51b8152600401610ac990612793565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461112a5760405162461bcd60e51b8152600401610ac990612793565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146111b35760405162461bcd60e51b8152600401610ac990612793565b601383905560148290556015819055806111cd8385612817565b6111d79190612817565b6012819055601e1015610e5d5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610ac9565b6005546001600160a01b031633146112565760405162461bcd60e51b8152600401610ac990612793565b670de0b6b3a76400006103e861126b60025490565b6112769060056127de565b61128091906127f5565b61128a91906127f5565b8110156112e55760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610ac9565b6112f781670de0b6b3a76400006127de565b600a5550565b6005546000906001600160a01b0316331461132a5760405162461bcd60e51b8152600401610ac990612793565b620186a061133760025490565b6113429060016127de565b61134c91906127f5565b8210156113b95760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610ac9565b6103e86113c560025490565b6113d09060056127de565b6113da91906127f5565b8211156114465760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610ac9565b50600981905560015b919050565b6005546000906001600160a01b031633146114815760405162461bcd60e51b8152600401610ac990612793565b50600d805460ff19169055600190565b6005546001600160a01b031633146114bb5760405162461bcd60e51b8152600401610ac990612793565b6001600160a01b0381166115205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac9565b61152981611ec6565b50565b6001600160a01b03831661158e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac9565b6001600160a01b0382166115ef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac9565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116765760405162461bcd60e51b8152600401610ac99061282a565b6001600160a01b03821661169c5760405162461bcd60e51b8152600401610ac99061286f565b806000036116b057610e5d83836000611f6c565b600b5460ff1615611b6d576005546001600160a01b038481169116148015906116e757506005546001600160a01b03838116911614155b80156116fb57506001600160a01b03821615155b801561171257506001600160a01b03821661dead14155b80156117285750600554600160a01b900460ff16155b15611b6d57600b54610100900460ff166117c0576001600160a01b03831660009081526019602052604090205460ff168061177b57506001600160a01b03821660009081526019602052604090205460ff165b6117c05760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ac9565b600d5460ff1615611907576005546001600160a01b0383811691161480159061181b57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561185957507f000000000000000000000000652032d79fd044b3155fb1fecc1b0ed9a84782fa6001600160a01b0316826001600160a01b031614155b1561190757326000908152600c602052604090205443116118f45760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610ac9565b326000908152600c602052604090204390555b6001600160a01b0383166000908152601b602052604090205460ff16801561194857506001600160a01b0382166000908152601a602052604090205460ff16155b15611a2c576008548111156119bd5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ac9565b600a546001600160a01b0383166000908152602081905260409020546119e39083612817565b1115611a275760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ac9565b611b6d565b6001600160a01b0382166000908152601b602052604090205460ff168015611a6d57506001600160a01b0383166000908152601a602052604090205460ff16155b15611ae357600854811115611a275760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ac9565b6001600160a01b0382166000908152601a602052604090205460ff16611b6d57600a546001600160a01b038316600090815260208190526040902054611b299083612817565b1115611b6d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ac9565b3060009081526020819052604090205460095481108015908190611b995750600b5462010000900460ff165b8015611baf5750600554600160a01b900460ff16155b8015611bd457506001600160a01b0385166000908152601b602052604090205460ff16155b8015611bf857506001600160a01b0384166000908152601b602052604090205460ff165b8015611c1d57506001600160a01b03851660009081526019602052604090205460ff16155b8015611c4257506001600160a01b03841660009081526019602052604090205460ff16155b15611c70576005805460ff60a01b1916600160a01b179055611c626120c1565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526019602052604090205460ff600160a01b909204821615911680611cbe57506001600160a01b03851660009081526019602052604090205460ff165b15611cc7575060005b60008115611eb2576001600160a01b0386166000908152601b602052604090205460ff168015611cf957506000601254115b15611db757611d1e6064611d18601254886122c290919063ffffffff16565b906122d5565b905060125460145482611d3191906127de565b611d3b91906127f5565b60176000828254611d4c9190612817565b9091555050601254601554611d6190836127de565b611d6b91906127f5565b60186000828254611d7c9190612817565b9091555050601254601354611d9190836127de565b611d9b91906127f5565b60166000828254611dac9190612817565b90915550611e949050565b6001600160a01b0387166000908152601b602052604090205460ff168015611de157506000600e54115b15611e9457611e006064611d18600e54886122c290919063ffffffff16565b9050600e5460105482611e1391906127de565b611e1d91906127f5565b60176000828254611e2e9190612817565b9091555050600e54601154611e4390836127de565b611e4d91906127f5565b60186000828254611e5e9190612817565b9091555050600e54600f54611e7390836127de565b611e7d91906127f5565b60166000828254611e8e9190612817565b90915550505b8015611ea557611ea5873083611f6c565b611eaf81866128b2565b94505b611ebd878787611f6c565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611f925760405162461bcd60e51b8152600401610ac99061282a565b6001600160a01b038216611fb85760405162461bcd60e51b8152600401610ac99061286f565b6001600160a01b038316600090815260208190526040902054818110156120305760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ac9565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612067908490612817565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120b391815260200190565b60405180910390a350505050565b30600090815260208190526040812054905060006018546016546017546120e89190612817565b6120f29190612817565b90508115806120ff575080155b15612108575050565b60095461211690600a6127de565b82111561212e5760095461212b90600a6127de565b91505b60006002826017548561214191906127de565b61214b91906127f5565b61215591906127f5565b9050600061216384836122e1565b90504761216f826122ed565b600061217b47836122e1565b9050600061219886611d18601654856122c290919063ffffffff16565b905060006121b587611d18601854866122c290919063ffffffff16565b90506000816121c484866128b2565b6121ce91906128b2565b60006017819055601681905560188190556007546040519293506001600160a01b03169184156108fc0291859190818181858888f19350505050158015612219573d6000803e3d6000fd5b5060008711801561222a5750600081115b1561227d5761223987826124ad565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156122b6573d6000803e3d6000fd5b50505050505050505050565b60006122ce82846127de565b9392505050565b60006122ce82846127f5565b60006122ce82846128b2565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612322576123226128c5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c491906128db565b816001815181106123d7576123d76128c5565b60200260200101906001600160a01b031690816001600160a01b031681525050612422307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461152c565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906124779085906000908690309042906004016128f8565b600060405180830381600087803b15801561249157600080fd5b505af11580156124a5573d6000803e3d6000fd5b505050505050565b6124d8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461152c565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612562573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125879190612969565b5050505050565b600060208083528351808285015260005b818110156125bb5785810183015185820160400152820161259f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461152957600080fd5b6000806040838503121561260457600080fd5b823561260f816125dc565b946020939093013593505050565b60006020828403121561262f57600080fd5b81356122ce816125dc565b60006020828403121561264c57600080fd5b5035919050565b60008060006060848603121561266857600080fd5b8335612673816125dc565b92506020840135612683816125dc565b929592945050506040919091013590565b8035801515811461144f57600080fd5b600080604083850312156126b757600080fd5b82356126c2816125dc565b91506126d060208401612694565b90509250929050565b6000806000606084860312156126ee57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561271757600080fd5b6122ce82612694565b6000806040838503121561273357600080fd5b823561273e816125dc565b9150602083013561274e816125dc565b809150509250929050565b600181811c9082168061276d57607f821691505b60208210810361278d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a9957610a996127c8565b60008261281257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610a9957610a996127c8565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9957610a996127c8565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156128ed57600080fd5b81516122ce816125dc565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129485784516001600160a01b031683529383019391830191600101612923565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561297e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220cf047cdc3a9fe6d247daf34e1acf9de577e1d7b04d6c9da89dd7c868c1cce67c64736f6c63430008120033
Deployed Bytecode Sourcemap
31128:16183:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9192:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11359:169;;;;;;;;;;-1:-1:-1;11359:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11359:169:0;1023:187:1;32463:63:0;;;;;;;;;;-1:-1:-1;32463:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31207:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;31207:51:0;1467:230:1;10312:108:0;;;;;;;;;;-1:-1:-1;10400:12:0;;10312:108;;;1848:25:1;;;1836:2;1821:18;10312:108:0;1702:177:1;39372:165:0;;;;;;;;;;-1:-1:-1;39372:165:0;;;;;:::i;:::-;;:::i;:::-;;32275:33;;;;;;;;;;;;;;;;32235;;;;;;;;;;;;;;;;36925:275;;;;;;;;;;-1:-1:-1;36925:275:0;;;;;:::i;:::-;;:::i;12010:492::-;;;;;;;;;;-1:-1:-1;12010:492:0;;;;;:::i;:::-;;:::i;31310:53::-;;;;;;;;;;;;31356:6;31310:53;;10154:93;;;;;;;;;;-1:-1:-1;10154:93:0;;10237:2;3140:36:1;;3128:2;3113:18;10154:93:0;2998:184:1;12911:215:0;;;;;;;;;;-1:-1:-1;12911:215:0;;;;;:::i;:::-;;:::i;31265:38::-;;;;;;;;;;;;;;;31603:33;;;;;;;;;;-1:-1:-1;31603:33:0;;;;;;;;39769:126;;;;;;;;;;-1:-1:-1;39769:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;39859:28:0;39835:4;39859:28;;;:19;:28;;;;;;;;;39769:126;32090:28;;;;;;;;;;;;;;;;31683:31;;;;;;;;;;-1:-1:-1;31683:31:0;;;;;;;;;;;10483:127;;;;;;;;;;-1:-1:-1;10483:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10584:18:0;10557:7;10584:18;;;;;;;;;;;;10483:127;3104:103;;;;;;;;;;;;;:::i;36033:121::-;;;;;;;;;;;;;:::i;37472:167::-;;;;;;;;;;-1:-1:-1;37472:167:0;;;;;:::i;:::-;;:::i;31402:38::-;;;;;;;;;;-1:-1:-1;31402:38:0;;;;-1:-1:-1;;;;;31402:38:0;;;31983:30;;;;;;;;;;;;;;;;37843:403;;;;;;;;;;-1:-1:-1;37843:403:0;;;;;:::i;:::-;;:::i;35869:112::-;;;;;;;;;;;;;:::i;2453:87::-;;;;;;;;;;-1:-1:-1;2526:6:0;;-1:-1:-1;;;;;2526:6:0;2453:87;;31447:32;;;;;;;;;;-1:-1:-1;31447:32:0;;;;-1:-1:-1;;;;;31447:32:0;;;32125:31;;;;;;;;;;;;;;;;37735:100;;;;;;;;;;-1:-1:-1;37735:100:0;;;;;:::i;:::-;;:::i;9411:104::-;;;;;;;;;;;;;:::i;38864:304::-;;;;;;;;;;-1:-1:-1;38864:304:0;;;;;:::i;:::-;;:::i;32057:24::-;;;;;;;;;;;;;;;;32315:27;;;;;;;;;;;;;;;;32201:25;;;;;;;;;;;;;;;;13629:413;;;;;;;;;;-1:-1:-1;13629:413:0;;;;;:::i;:::-;;:::i;10823:175::-;;;;;;;;;;-1:-1:-1;10823:175:0;;;;;:::i;:::-;;:::i;39545:216::-;;;;;;;;;;-1:-1:-1;39545:216:0;;;;;:::i;:::-;;:::i;32684:57::-;;;;;;;;;;-1:-1:-1;32684:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31643:33;;;;;;;;;;-1:-1:-1;31643:33:0;;;;;;;;;;;38674:182;;;;;;;;;;-1:-1:-1;38674:182:0;;;;;:::i;:::-;;:::i;38254:412::-;;;;;;;;;;-1:-1:-1;38254:412:0;;;;;:::i;:::-;;:::i;37208:256::-;;;;;;;;;;-1:-1:-1;37208:256:0;;;;;:::i;:::-;;:::i;31901:39::-;;;;;;;;;;-1:-1:-1;31901:39:0;;;;;;;;31488:35;;;;;;;;;;;;;;;;36420:497;;;;;;;;;;-1:-1:-1;36420:497:0;;;;;:::i;:::-;;:::i;31949:27::-;;;;;;;;;;;;;;;;11061:151;;;;;;;;;;-1:-1:-1;11061:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11177:18:0;;;11150:7;11177:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11061:151;31530:33;;;;;;;;;;;;;;;;36215:135;;;;;;;;;;;;;:::i;32020:30::-;;;;;;;;;;;;;;;;3362:201;;;;;;;;;;-1:-1:-1;3362:201:0;;;;;:::i;:::-;;:::i;32163:31::-;;;;;;;;;;;;;;;;31570:24;;;;;;;;;;;;;;;;9192:100;9246:13;9279:5;9272:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9192:100;:::o;11359:169::-;11442:4;11459:39;1400:10;11482:7;11491:6;11459:8;:39::i;:::-;-1:-1:-1;11516:4:0;11359:169;;;;;:::o;39372:165::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;;;;;;;;;39487:9:::1;::::0;39459:38:::1;::::0;-1:-1:-1;;;;;39487:9:0;;::::1;::::0;39459:38;::::1;::::0;::::1;::::0;39487:9:::1;::::0;39459:38:::1;39508:9;:21:::0;;-1:-1:-1;;;;;;39508:21:0::1;-1:-1:-1::0;;;;;39508:21:0;;;::::1;::::0;;;::::1;::::0;;39372:165::o;36925:275::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;37062:4:::1;37054;37033:13;10400:12:::0;;;10312:108;37033:13:::1;:17;::::0;37049:1:::1;37033:17;:::i;:::-;37032:26;;;;:::i;:::-;37031:35;;;;:::i;:::-;37021:6;:45;;36999:142;;;::::0;-1:-1:-1;;;36999:142:0;;6270:2:1;36999:142:0::1;::::0;::::1;6252:21:1::0;6309:2;6289:18;;;6282:30;6348:34;6328:18;;;6321:62;-1:-1:-1;;;6399:18:1;;;6392:45;6454:19;;36999:142:0::1;6068:411:1::0;36999:142:0::1;37175:17;:6:::0;37185::::1;37175:17;:::i;:::-;37152:20;:40:::0;-1:-1:-1;36925:275:0:o;12010:492::-;12150:4;12167:36;12177:6;12185:9;12196:6;12167:9;:36::i;:::-;-1:-1:-1;;;;;12243:19:0;;12216:24;12243:19;;;:11;:19;;;;;;;;1400:10;12243:33;;;;;;;;12295:26;;;;12287:79;;;;-1:-1:-1;;;12287:79:0;;6686:2:1;12287:79:0;;;6668:21:1;6725:2;6705:18;;;6698:30;6764:34;6744:18;;;6737:62;-1:-1:-1;;;6815:18:1;;;6808:38;6863:19;;12287:79:0;6484:404:1;12287:79:0;12402:57;12411:6;1400:10;12452:6;12433:16;:25;12402:8;:57::i;:::-;-1:-1:-1;12490:4:0;;12010:492;-1:-1:-1;;;;12010:492:0:o;12911:215::-;1400:10;12999:4;13048:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13048:34:0;;;;;;;;;;12999:4;;13016:80;;13039:7;;13048:47;;13085:10;;13048:47;:::i;:::-;13016:8;:80::i;3104:103::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;3169:30:::1;3196:1;3169:18;:30::i;:::-;3104:103::o:0;36033:121::-;2526:6;;36085:4;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;-1:-1:-1;36102:14:0::1;:22:::0;;-1:-1:-1;;36102:22:0::1;::::0;;;36033:121;:::o;37472:167::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37585:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;37585:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37472:167::o;37843:403::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;37993:15:::1;:31:::0;;;38035:15:::1;:31:::0;;;38077:9:::1;:19:::0;;;38089:7;38122:33:::1;38053:13:::0;38011;38122:33:::1;:::i;:::-;:45;;;;:::i;:::-;38107:12;:60:::0;;;38202:2:::1;-1:-1:-1::0;38186:18:0::1;38178:60;;;::::0;-1:-1:-1;;;38178:60:0;;7225:2:1;38178:60:0::1;::::0;::::1;7207:21:1::0;7264:2;7244:18;;;7237:30;7303:31;7283:18;;;7276:59;7352:18;;38178:60:0::1;7023:353:1::0;38178:60:0::1;37843:403:::0;;;:::o;35869:112::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;35924:13:::1;:20:::0;;-1:-1:-1;;35955:18:0;;;;;35869:112::o;37735:100::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;37806:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;37806:21:0;;::::1;::::0;;;::::1;::::0;;37735:100::o;9411:104::-;9467:13;9500:7;9493:14;;;;;:::i;38864:304::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;39008:13:::1;-1:-1:-1::0;;;;;39000:21:0::1;:4;-1:-1:-1::0;;;;;39000:21:0::1;::::0;38978:128:::1;;;::::0;-1:-1:-1;;;38978:128:0;;7583:2:1;38978:128:0::1;::::0;::::1;7565:21:1::0;7622:2;7602:18;;;7595:30;7661:34;7641:18;;;7634:62;7732:27;7712:18;;;7705:55;7777:19;;38978:128:0::1;7381:421:1::0;38978:128:0::1;39119:41;39148:4;39154:5;39119:28;:41::i;:::-;38864:304:::0;;:::o;13629:413::-;1400:10;13722:4;13766:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13766:34:0;;;;;;;;;;13819:35;;;;13811:85;;;;-1:-1:-1;;;13811:85:0;;8009:2:1;13811:85:0;;;7991:21:1;8048:2;8028:18;;;8021:30;8087:34;8067:18;;;8060:62;-1:-1:-1;;;8138:18:1;;;8131:35;8183:19;;13811:85:0;7807:401:1;13811:85:0;13932:67;1400:10;13955:7;13983:15;13964:16;:34;13932:8;:67::i;:::-;-1:-1:-1;14030:4:0;;13629:413;-1:-1:-1;;;13629:413:0:o;10823:175::-;10909:4;10926:42;1400:10;10950:9;10961:6;10926:9;:42::i;39545:216::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;39690:15:::1;::::0;39647:59:::1;::::0;-1:-1:-1;;;;;39690:15:0;;::::1;::::0;39647:59;::::1;::::0;::::1;::::0;39690:15:::1;::::0;39647:59:::1;39717:15;:36:::0;;-1:-1:-1;;;;;;39717:36:0::1;-1:-1:-1::0;;;;;39717:36:0;;;::::1;::::0;;;::::1;::::0;;39545:216::o;38674:182::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38759:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;38759:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38814:34;;1163:41:1;;;38814:34:0::1;::::0;1136:18:1;38814:34:0::1;;;;;;;38674:182:::0;;:::o;38254:412::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;38405:16:::1;:32:::0;;;38448:16:::1;:32:::0;;;38491:10:::1;:20:::0;;;38504:7;38538:35:::1;38467:13:::0;38424;38538:35:::1;:::i;:::-;:48;;;;:::i;:::-;38522:13;:64:::0;;;38622:2:::1;-1:-1:-1::0;38605:19:0::1;38597:61;;;::::0;-1:-1:-1;;;38597:61:0;;7225:2:1;38597:61:0::1;::::0;::::1;7207:21:1::0;7264:2;7244:18;;;7237:30;7303:31;7283:18;;;7276:59;7352:18;;38597:61:0::1;7023:353:1::0;37208:256:0;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;37348:4:::1;37340;37319:13;10400:12:::0;;;10312:108;37319:13:::1;:17;::::0;37335:1:::1;37319:17;:::i;:::-;37318:26;;;;:::i;:::-;37317:35;;;;:::i;:::-;37307:6;:45;;37285:131;;;::::0;-1:-1:-1;;;37285:131:0;;8415:2:1;37285:131:0::1;::::0;::::1;8397:21:1::0;8454:2;8434:18;;;8427:30;8493:34;8473:18;;;8466:62;-1:-1:-1;;;8544:18:1;;;8537:34;8588:19;;37285:131:0::1;8213:400:1::0;37285:131:0::1;37439:17;:6:::0;37449::::1;37439:17;:::i;:::-;37427:9;:29:::0;-1:-1:-1;37208:256:0:o;36420:497::-;2526:6;;36528:4;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;36607:6:::1;36586:13;10400:12:::0;;;10312:108;36586:13:::1;:17;::::0;36602:1:::1;36586:17;:::i;:::-;36585:28;;;;:::i;:::-;36572:9;:41;;36550:144;;;::::0;-1:-1:-1;;;36550:144:0;;8820:2:1;36550:144:0::1;::::0;::::1;8802:21:1::0;8859:2;8839:18;;;8832:30;8898:34;8878:18;;;8871:62;-1:-1:-1;;;8949:18:1;;;8942:51;9010:19;;36550:144:0::1;8618:417:1::0;36550:144:0::1;36762:4;36741:13;10400:12:::0;;;10312:108;36741:13:::1;:17;::::0;36757:1:::1;36741:17;:::i;:::-;36740:26;;;;:::i;:::-;36727:9;:39;;36705:141;;;::::0;-1:-1:-1;;;36705:141:0;;9242:2:1;36705:141:0::1;::::0;::::1;9224:21:1::0;9281:2;9261:18;;;9254:30;9320:34;9300:18;;;9293:62;-1:-1:-1;;;9371:18:1;;;9364:50;9431:19;;36705:141:0::1;9040:416:1::0;36705:141:0::1;-1:-1:-1::0;36857:18:0::1;:30:::0;;;36905:4:::1;2744:1;36420:497:::0;;;:::o;36215:135::-;2526:6;;36275:4;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;-1:-1:-1;36292:20:0::1;:28:::0;;-1:-1:-1;;36292:28:0::1;::::0;;;36215:135;:::o;3362:201::-;2526:6;;-1:-1:-1;;;;;2526:6:0;1400:10;2673:23;2665:68;;;;-1:-1:-1;;;2665:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3451:22:0;::::1;3443:73;;;::::0;-1:-1:-1;;;3443:73:0;;9663:2:1;3443:73:0::1;::::0;::::1;9645:21:1::0;9702:2;9682:18;;;9675:30;9741:34;9721:18;;;9714:62;-1:-1:-1;;;9792:18:1;;;9785:36;9838:19;;3443:73:0::1;9461:402:1::0;3443:73:0::1;3527:28;3546:8;3527:18;:28::i;:::-;3362:201:::0;:::o;17313:380::-;-1:-1:-1;;;;;17449:19:0;;17441:68;;;;-1:-1:-1;;;17441:68:0;;10070:2:1;17441:68:0;;;10052:21:1;10109:2;10089:18;;;10082:30;10148:34;10128:18;;;10121:62;-1:-1:-1;;;10199:18:1;;;10192:34;10243:19;;17441:68:0;9868:400:1;17441:68:0;-1:-1:-1;;;;;17528:21:0;;17520:68;;;;-1:-1:-1;;;17520:68:0;;10475:2:1;17520:68:0;;;10457:21:1;10514:2;10494:18;;;10487:30;10553:34;10533:18;;;10526:62;-1:-1:-1;;;10604:18:1;;;10597:32;10646:19;;17520:68:0;10273:398:1;17520:68:0;-1:-1:-1;;;;;17601:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17653:32;;1848:25:1;;;17653:32:0;;1821:18:1;17653:32:0;;;;;;;17313:380;;;:::o;39903:4755::-;-1:-1:-1;;;;;40035:18:0;;40027:68;;;;-1:-1:-1;;;40027:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40114:16:0;;40106:64;;;;-1:-1:-1;;;40106:64:0;;;;;;;:::i;:::-;40187:6;40197:1;40187:11;40183:93;;40215:28;40231:4;40237:2;40241:1;40215:15;:28::i;40183:93::-;40292:14;;;;40288:2479;;;2526:6;;-1:-1:-1;;;;;40345:15:0;;;2526:6;;40345:15;;;;:49;;-1:-1:-1;2526:6:0;;-1:-1:-1;;;;;40381:13:0;;;2526:6;;40381:13;;40345:49;:86;;;;-1:-1:-1;;;;;;40415:16:0;;;;40345:86;:128;;;;-1:-1:-1;;;;;;40452:21:0;;40466:6;40452:21;;40345:128;:158;;;;-1:-1:-1;40495:8:0;;-1:-1:-1;;;40495:8:0;;;;40494:9;40345:158;40323:2433;;;40543:13;;;;;;;40538:223;;-1:-1:-1;;;;;40615:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;40644:23:0;;;;;;:19;:23;;;;;;;;40615:52;40581:160;;;;-1:-1:-1;;;40581:160:0;;11688:2:1;40581:160:0;;;11670:21:1;11727:2;11707:18;;;11700:30;-1:-1:-1;;;11746:18:1;;;11739:52;11808:18;;40581:160:0;11486:346:1;40581:160:0;40917:20;;;;40913:641;;;2526:6;;-1:-1:-1;;;;;40992:13:0;;;2526:6;;40992:13;;;;:72;;;41048:15;-1:-1:-1;;;;;41034:30:0;:2;-1:-1:-1;;;;;41034:30:0;;;40992:72;:129;;;;;41107:13;-1:-1:-1;;;;;41093:28:0;:2;-1:-1:-1;;;;;41093:28:0;;;40992:129;40962:573;;;41239:9;41210:39;;;;:28;:39;;;;;;41285:12;-1:-1:-1;41172:258:0;;;;-1:-1:-1;;;41172:258:0;;12039:2:1;41172:258:0;;;12021:21:1;12078:2;12058:18;;;12051:30;12117:34;12097:18;;;12090:62;12188:34;12168:18;;;12161:62;-1:-1:-1;;;12239:19:1;;;12232:40;12289:19;;41172:258:0;11837:477:1;41172:258:0;41486:9;41457:39;;;;:28;:39;;;;;41499:12;41457:54;;40962:573;-1:-1:-1;;;;;41624:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;41681:35:0;;;;;;:31;:35;;;;;;;;41680:36;41624:92;41598:1143;;;41803:20;;41793:6;:30;;41759:169;;;;-1:-1:-1;;;41759:169:0;;12521:2:1;41759:169:0;;;12503:21:1;12560:2;12540:18;;;12533:30;12599:34;12579:18;;;12572:62;-1:-1:-1;;;12650:18:1;;;12643:51;12711:19;;41759:169:0;12319:417:1;41759:169:0;42011:9;;-1:-1:-1;;;;;10584:18:0;;10557:7;10584:18;;;;;;;;;;;41985:22;;:6;:22;:::i;:::-;:35;;41951:140;;;;-1:-1:-1;;;41951:140:0;;12943:2:1;41951:140:0;;;12925:21:1;12982:2;12962:18;;;12955:30;-1:-1:-1;;;13001:18:1;;;12994:49;13060:18;;41951:140:0;12741:343:1;41951:140:0;41598:1143;;;-1:-1:-1;;;;;42185:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;42240:37:0;;;;;;:31;:37;;;;;;;;42239:38;42185:92;42159:582;;;42364:20;;42354:6;:30;;42320:170;;;;-1:-1:-1;;;42320:170:0;;13291:2:1;42320:170:0;;;13273:21:1;13330:2;13310:18;;;13303:30;13369:34;13349:18;;;13342:62;-1:-1:-1;;;13420:18:1;;;13413:52;13482:19;;42320:170:0;13089:418:1;42159:582:0;-1:-1:-1;;;;;42521:35:0;;;;;;:31;:35;;;;;;;;42516:225;;42641:9;;-1:-1:-1;;;;;10584:18:0;;10557:7;10584:18;;;;;;;;;;;42615:22;;:6;:22;:::i;:::-;:35;;42581:140;;;;-1:-1:-1;;;42581:140:0;;12943:2:1;42581:140:0;;;12925:21:1;12982:2;12962:18;;;12955:30;-1:-1:-1;;;13001:18:1;;;12994:49;13060:18;;42581:140:0;12741:343:1;42581:140:0;42828:4;42779:28;10584:18;;;;;;;;;;;42886;;42862:42;;;;;;;42935:35;;-1:-1:-1;42959:11:0;;;;;;;42935:35;:61;;;;-1:-1:-1;42988:8:0;;-1:-1:-1;;;42988:8:0;;;;42987:9;42935:61;:110;;;;-1:-1:-1;;;;;;43014:31:0;;;;;;:25;:31;;;;;;;;43013:32;42935:110;:156;;;;-1:-1:-1;;;;;;43062:29:0;;;;;;:25;:29;;;;;;;;42935:156;:199;;;;-1:-1:-1;;;;;;43109:25:0;;;;;;:19;:25;;;;;;;;43108:26;42935:199;:240;;;;-1:-1:-1;;;;;;43152:23:0;;;;;;:19;:23;;;;;;;;43151:24;42935:240;42917:372;;;43202:8;:15;;-1:-1:-1;;;;43202:15:0;-1:-1:-1;;;43202:15:0;;;43234:10;:8;:10::i;:::-;43261:8;:16;;-1:-1:-1;;;;43261:16:0;;;42917:372;43317:8;;-1:-1:-1;;;;;43427:25:0;;43301:12;43427:25;;;:19;:25;;;;;;43317:8;-1:-1:-1;;;43317:8:0;;;;;43316:9;;43427:25;;:52;;-1:-1:-1;;;;;;43456:23:0;;;;;;:19;:23;;;;;;;;43427:52;43423:100;;;-1:-1:-1;43506:5:0;43423:100;43535:12;43640:7;43636:969;;;-1:-1:-1;;;;;43692:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;43741:1;43725:13;;:17;43692:50;43688:768;;;43770:34;43800:3;43770:25;43781:13;;43770:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;43763:41;;43873:13;;43853:16;;43846:4;:23;;;;:::i;:::-;43845:41;;;;:::i;:::-;43823:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;43943:13:0;;43929:10;;43922:17;;:4;:17;:::i;:::-;43921:35;;;;:::i;:::-;43905:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;44025:13:0;;44005:16;;43998:23;;:4;:23;:::i;:::-;43997:41;;;;:::i;:::-;43975:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;43688:768:0;;-1:-1:-1;43688:768:0;;-1:-1:-1;;;;;44100:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;44150:1;44135:12;;:16;44100:51;44096:360;;;44179:33;44208:3;44179:24;44190:12;;44179:6;:10;;:24;;;;:::i;:33::-;44172:40;;44280:12;;44261:15;;44254:4;:22;;;;:::i;:::-;44253:39;;;;:::i;:::-;44231:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;44348:12:0;;44335:9;;44328:16;;:4;:16;:::i;:::-;44327:33;;;;:::i;:::-;44311:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;44428:12:0;;44409:15;;44402:22;;:4;:22;:::i;:::-;44401:39;;;;:::i;:::-;44379:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;44096:360:0;44476:8;;44472:91;;44505:42;44521:4;44535;44542;44505:15;:42::i;:::-;44579:14;44589:4;44579:14;;:::i;:::-;;;43636:969;44617:33;44633:4;44639:2;44643:6;44617:15;:33::i;:::-;40016:4642;;;;39903:4755;;;:::o;3723:191::-;3816:6;;;-1:-1:-1;;;;;3833:17:0;;;-1:-1:-1;;;;;;3833:17:0;;;;;;;3866:40;;3816:6;;;3833:17;3816:6;;3866:40;;3797:16;;3866:40;3786:128;3723:191;:::o;39176:188::-;-1:-1:-1;;;;;39259:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;39259:39:0;;;;;;;;;;39316:40;;39259:39;;:31;39316:40;;;39176:188;;:::o;14532:733::-;-1:-1:-1;;;;;14672:20:0;;14664:70;;;;-1:-1:-1;;;14664:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14753:23:0;;14745:71;;;;-1:-1:-1;;;14745:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14913:17:0;;14889:21;14913:17;;;;;;;;;;;14949:23;;;;14941:74;;;;-1:-1:-1;;;14941:74:0;;13847:2:1;14941:74:0;;;13829:21:1;13886:2;13866:18;;;13859:30;13925:34;13905:18;;;13898:62;-1:-1:-1;;;13976:18:1;;;13969:36;14022:19;;14941:74:0;13645:402:1;14941:74:0;-1:-1:-1;;;;;15051:17:0;;;:9;:17;;;;;;;;;;;15071:22;;;15051:42;;15115:20;;;;;;;;:30;;15087:6;;15051:9;15115:30;;15087:6;;15115:30;:::i;:::-;;;;;;;;15180:9;-1:-1:-1;;;;;15163:35:0;15172:6;-1:-1:-1;;;;;15163:35:0;;15191:6;15163:35;;;;1848:25:1;;1836:2;1821:18;;1702:177;15163:35:0;;;;;;;;14653:612;14532:733;;;:::o;45788:1520::-;45871:4;45827:23;10584:18;;;;;;;;;;;45827:50;;45888:25;45958:12;;45937:18;;45916;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;45888:82;-1:-1:-1;45987:20:0;;;:46;;-1:-1:-1;46011:22:0;;45987:46;45983:85;;;46050:7;;45788:1520::o;45983:85::-;46102:18;;:23;;46123:2;46102:23;:::i;:::-;46084:15;:41;46080:115;;;46160:18;;:23;;46181:2;46160:23;:::i;:::-;46142:41;;46080:115;46207:23;46294:1;46274:17;46252:18;;46234:15;:36;;;;:::i;:::-;46233:58;;;;:::i;:::-;:62;;;;:::i;:::-;46207:88;-1:-1:-1;46306:26:0;46335:36;:15;46207:88;46335:19;:36::i;:::-;46306:65;-1:-1:-1;46412:21:0;46446:36;46306:65;46446:16;:36::i;:::-;46495:18;46516:44;:21;46542:17;46516:25;:44::i;:::-;46495:65;;46571:23;46597:57;46636:17;46597:34;46612:18;;46597:10;:14;;:34;;;;:::i;:57::-;46571:83;;46665:17;46685:51;46718:17;46685:28;46700:12;;46685:10;:14;;:28;;;;:::i;:51::-;46665:71;-1:-1:-1;46747:23:0;46665:71;46773:28;46786:15;46773:10;:28;:::i;:::-;:40;;;;:::i;:::-;46847:1;46826:18;:22;;;46859:18;:22;;;46892:12;:16;;;46921:9;;:29;;46747:66;;-1:-1:-1;;;;;;46921:9:0;;:29;;;;;46940:9;;46921:29;;46847:1;46921:29;46940:9;46921;:29;;;;;;;;;;;;;;;;;;;;;46985:1;46967:15;:19;:42;;;;;47008:1;46990:15;:19;46967:42;46963:278;;;47026:46;47039:15;47056;47026:12;:46::i;:::-;47196:18;;47092:137;;;14254:25:1;;;14310:2;14295:18;;14288:34;;;14338:18;;;14331:34;;;;47092:137:0;;;;;;14242:2:1;47092:137:0;;;46963:278;47253:15;;:47;;-1:-1:-1;;;;;47253:15:0;;;;47278:21;47253:47;;;;;:15;:47;:15;:47;47278:21;47253:15;:47;;;;;;;;;;;;;;;;;;;;;45816:1492;;;;;;;;;45788:1520::o;22445:98::-;22503:7;22530:5;22534:1;22530;:5;:::i;:::-;22523:12;22445:98;-1:-1:-1;;;22445:98:0:o;22844:::-;22902:7;22929:5;22933:1;22929;:5;:::i;22088:98::-;22146:7;22173:5;22177:1;22173;:5;:::i;44666:589::-;44816:16;;;44830:1;44816:16;;;;;;;;44792:21;;44816:16;;;;;;;;;;-1:-1:-1;44816:16:0;44792:40;;44861:4;44843;44848:1;44843:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;44843:23:0;;;-1:-1:-1;;;;;44843:23:0;;;;;44887:15;-1:-1:-1;;;;;44887:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44877:4;44882:1;44877:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;44877:32:0;;;-1:-1:-1;;;;;44877:32:0;;;;;44922:62;44939:4;44954:15;44972:11;44922:8;:62::i;:::-;45023:224;;-1:-1:-1;;;45023:224:0;;-1:-1:-1;;;;;45023:15:0;:66;;;;:224;;45104:11;;45130:1;;45174:4;;45201;;45221:15;;45023:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44721:534;44666:589;:::o;45263:517::-;45411:62;45428:4;45443:15;45461:11;45411:8;:62::i;:::-;45516:256;;-1:-1:-1;;;45516:256:0;;45588:4;45516:256;;;16222:34:1;16272:18;;;16265:34;;;45634:1:0;16315:18:1;;;16308:34;;;16358:18;;;16351:34;31356:6:0;16401:19:1;;;16394:44;45746:15:0;16454:19:1;;;16447:35;45516:15:0;-1:-1:-1;;;;;45516:31:0;;;;45555:9;;16156:19:1;;45516:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45263:517;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;2144:180::-;2203:6;2256:2;2244:9;2235:7;2231:23;2227:32;2224:52;;;2272:1;2269;2262:12;2224:52;-1:-1:-1;2295:23:1;;2144:180;-1:-1:-1;2144:180:1:o;2329:456::-;2406:6;2414;2422;2475:2;2463:9;2454:7;2450:23;2446:32;2443:52;;;2491:1;2488;2481:12;2443:52;2530:9;2517:23;2549:31;2574:5;2549:31;:::i;:::-;2599:5;-1:-1:-1;2656:2:1;2641:18;;2628:32;2669:33;2628:32;2669:33;:::i;:::-;2329:456;;2721:7;;-1:-1:-1;;;2775:2:1;2760:18;;;;2747:32;;2329:456::o;3187:160::-;3252:20;;3308:13;;3301:21;3291:32;;3281:60;;3337:1;3334;3327:12;3352:315;3417:6;3425;3478:2;3466:9;3457:7;3453:23;3449:32;3446:52;;;3494:1;3491;3484:12;3446:52;3533:9;3520:23;3552:31;3577:5;3552:31;:::i;:::-;3602:5;-1:-1:-1;3626:35:1;3657:2;3642:18;;3626:35;:::i;:::-;3616:45;;3352:315;;;;;:::o;3896:316::-;3973:6;3981;3989;4042:2;4030:9;4021:7;4017:23;4013:32;4010:52;;;4058:1;4055;4048:12;4010:52;-1:-1:-1;;4081:23:1;;;4151:2;4136:18;;4123:32;;-1:-1:-1;4202:2:1;4187:18;;;4174:32;;3896:316;-1:-1:-1;3896:316:1:o;4217:180::-;4273:6;4326:2;4314:9;4305:7;4301:23;4297:32;4294:52;;;4342:1;4339;4332:12;4294:52;4365:26;4381:9;4365:26;:::i;4402:388::-;4470:6;4478;4531:2;4519:9;4510:7;4506:23;4502:32;4499:52;;;4547:1;4544;4537:12;4499:52;4586:9;4573:23;4605:31;4630:5;4605:31;:::i;:::-;4655:5;-1:-1:-1;4712:2:1;4697:18;;4684:32;4725:33;4684:32;4725:33;:::i;:::-;4777:7;4767:17;;;4402:388;;;;;:::o;4795:380::-;4874:1;4870:12;;;;4917;;;4938:61;;4992:4;4984:6;4980:17;4970:27;;4938:61;5045:2;5037:6;5034:14;5014:18;5011:38;5008:161;;5091:10;5086:3;5082:20;5079:1;5072:31;5126:4;5123:1;5116:15;5154:4;5151:1;5144:15;5008:161;;4795:380;;;:::o;5180:356::-;5382:2;5364:21;;;5401:18;;;5394:30;5460:34;5455:2;5440:18;;5433:62;5527:2;5512:18;;5180:356::o;5541:127::-;5602:10;5597:3;5593:20;5590:1;5583:31;5633:4;5630:1;5623:15;5657:4;5654:1;5647:15;5673:168;5746:9;;;5777;;5794:15;;;5788:22;;5774:37;5764:71;;5815:18;;:::i;5846:217::-;5886:1;5912;5902:132;;5956:10;5951:3;5947:20;5944:1;5937:31;5991:4;5988:1;5981:15;6019:4;6016:1;6009:15;5902:132;-1:-1:-1;6048:9:1;;5846:217::o;6893:125::-;6958:9;;;6979:10;;;6976:36;;;6992:18;;:::i;10676:401::-;10878:2;10860:21;;;10917:2;10897:18;;;10890:30;10956:34;10951:2;10936:18;;10929:62;-1:-1:-1;;;11022:2:1;11007:18;;11000:35;11067:3;11052:19;;10676:401::o;11082:399::-;11284:2;11266:21;;;11323:2;11303:18;;;11296:30;11362:34;11357:2;11342:18;;11335:62;-1:-1:-1;;;11428:2:1;11413:18;;11406:33;11471:3;11456:19;;11082:399::o;13512:128::-;13579:9;;;13600:11;;;13597:37;;;13614:18;;:::i;14508:127::-;14569:10;14564:3;14560:20;14557:1;14550:31;14600:4;14597:1;14590:15;14624:4;14621:1;14614:15;14640:251;14710:6;14763:2;14751:9;14742:7;14738:23;14734:32;14731:52;;;14779:1;14776;14769:12;14731:52;14811:9;14805:16;14830:31;14855:5;14830:31;:::i;14896:980::-;15158:4;15206:3;15195:9;15191:19;15237:6;15226:9;15219:25;15263:2;15301:6;15296:2;15285:9;15281:18;15274:34;15344:3;15339:2;15328:9;15324:18;15317:31;15368:6;15403;15397:13;15434:6;15426;15419:22;15472:3;15461:9;15457:19;15450:26;;15511:2;15503:6;15499:15;15485:29;;15532:1;15542:195;15556:6;15553:1;15550:13;15542:195;;;15621:13;;-1:-1:-1;;;;;15617:39:1;15605:52;;15712:15;;;;15677:12;;;;15653:1;15571:9;15542:195;;;-1:-1:-1;;;;;;;15793:32:1;;;;15788:2;15773:18;;15766:60;-1:-1:-1;;;15857:3:1;15842:19;15835:35;15754:3;14896:980;-1:-1:-1;;;14896:980:1:o;16493:306::-;16581:6;16589;16597;16650:2;16638:9;16629:7;16625:23;16621:32;16618:52;;;16666:1;16663;16656:12;16618:52;16695:9;16689:16;16679:26;;16745:2;16734:9;16730:18;16724:25;16714:35;;16789:2;16778:9;16774:18;16768:25;16758:35;;16493:306;;;;;:::o
Swarm Source
ipfs://cf047cdc3a9fe6d247daf34e1acf9de577e1d7b04d6c9da89dd7c868c1cce67c
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.