Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000 BSI
Holders
48
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BSI
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-01 */ /** https://t.me/BarstoolSportsInu */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.9; /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, 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 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. */ /** * @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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, 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) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][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) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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 Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - 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 {} } 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); } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract BSI is ERC20, Ownable { uint256 internal constant PERCENT_DENOMINATOR = 1000; address internal constant DEAD = address(0xdead); bool private _addingLP; address internal _lpReceiver; address internal _marketingReceiver; address internal _nukeRecipient = DEAD; uint256 public lpNukeBuildup; uint256 public nukePercentPerSell = (PERCENT_DENOMINATOR * 5) / 100; // 5% bool public lpNukeEnabled = true; mapping(address => bool) internal _isTaxExcluded; uint256 public taxBurn = (PERCENT_DENOMINATOR * 0) / 100; // 0% uint256 public taxBuyer = (PERCENT_DENOMINATOR * 60) / 100; // 60% reduced to 3% uint256 public taxLp = (PERCENT_DENOMINATOR * 0) / 100; // 0% to 2% uint256 internal _totalTax; bool internal _taxesOff; uint256 public maxTransactionAmount; uint256 public maxWallet; bool public enableLimits = true; mapping (address => bool) public _isExcludedMaxTransactionAmount; uint256 internal _liquifyRate = (PERCENT_DENOMINATOR * 1) / 100; // 1% uint256 public launchTime; uint256 public launchTimeTopHour; uint256 public launchTimeTopMonth; uint256 internal _launchBlock; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; mapping(address => bool) internal _isBot; bool internal _swapEnabled = true; bool internal _swapping = false; modifier swapLock() { _swapping = true; _; _swapping = false; } constructor() ERC20("Barstool Sports Inu", "BSI") { uint256 totalSupply = 1 * 1e6 * 1e18; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; maxTransactionAmount = (totalSupply * 20) / 1000; // 2% maxTransactionAmountTxn maxWallet = (totalSupply * 20) / 1000; // 2% maxWallet _marketingReceiver = 0x4298D2CDBebb046Ad764A0f1f43c0889Aa28e9D2; excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _isTaxExcluded[address(this)] = true; _isTaxExcluded[msg.sender] = true; _mint(address(this), totalSupply); } // _percent: 1 == 0.1%, 1000 = 100% function launch(uint16 _percent) external payable onlyOwner { require(_percent <= PERCENT_DENOMINATOR, 'must be between 0-100%'); require(launchTime == 0, 'already launched'); require(_percent == 0 || msg.value > 0, 'need ETH for initial LP'); _addingLP = true; uint256 _lpSupply = (totalSupply() * _percent) / PERCENT_DENOMINATOR; uint256 _leftover = totalSupply() - _lpSupply; if (_lpSupply > 0) { _addLp(_lpSupply, msg.value); } if (_leftover > 0) { _transfer(address(this), owner(), _leftover); } launchTime = block.timestamp; _launchBlock = block.number; _addingLP = false; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual override { bool _isOwner = sender == owner() || recipient == owner(); uint256 contractTokenBalance = balanceOf(address(this)); bool _isBuy = sender == uniswapV2Pair && recipient != address(uniswapV2Router); bool _isSell = recipient == uniswapV2Pair; bool _isSwap = _isBuy || _isSell; if (_isSwap && enableLimits) { bool _skipCheck = _addingLP || _isExcludedMaxTransactionAmount[recipient] || _isExcludedMaxTransactionAmount[sender]; uint256 _maxTx = totalSupply() * maxTransactionAmount / PERCENT_DENOMINATOR; require(_maxTx >= amount || _skipCheck, "Tx amount exceed limit"); if (_isBuy) { uint256 _maxWallet = totalSupply() * maxWallet / PERCENT_DENOMINATOR; require(_maxWallet >= balanceOf(recipient) + amount || _skipCheck, "Total amount exceed wallet limit"); } } if (_isBuy) { if (block.number <= _launchBlock + 2) { _isBot[recipient] = true; } } else { require(!_isBot[recipient], 'Stop botting!'); require(!_isBot[sender], 'Stop botting!'); require(!_isBot[_msgSender()], 'Stop botting!'); } uint256 _minSwap = (balanceOf(uniswapV2Pair) * _liquifyRate) / PERCENT_DENOMINATOR; bool _overMin = contractTokenBalance >= _minSwap; if ( _swapEnabled && !_swapping && !_isOwner && _overMin && launchTime != 0 && sender != uniswapV2Pair ) { _swap(_minSwap); } uint256 tax = 0; if ( launchTime != 0 && _isSell && !_taxesOff && !(_isTaxExcluded[sender] || _isTaxExcluded[recipient]) ) { tax = _calcTaxAndProcess(sender, amount); } super._transfer(sender, recipient, amount - tax); if (_isSell && lpNukeEnabled && sender != address(this)) { lpNukeBuildup += ((amount - tax) * nukePercentPerSell) / PERCENT_DENOMINATOR; } } function _calcTaxAndProcess(address sender, uint256 amount) internal returns (uint256) { uint256 tax = (amount * _totalTax) / PERCENT_DENOMINATOR; if (tax > 0) { super._transfer(sender, address(this), tax); } return tax; } function _swap(uint256 _amountToSwap) internal swapLock { uint256 balBefore = address(this).balance; uint256 burnTokens = (_amountToSwap * taxBurn) / _totalTax; uint256 liquidityTokens = (_amountToSwap * taxLp) / _totalTax / 2; uint256 tokensToSwap = _amountToSwap - burnTokens - liquidityTokens; if (burnTokens > 0) { _burn(address(this), burnTokens); } // 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), tokensToSwap); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokensToSwap, 0, path, address(this), block.timestamp ); uint256 balToProcess = address(this).balance - balBefore; if (balToProcess > 0) { _processFees(balToProcess, liquidityTokens); } } function _processFees(uint256 amountETH, uint256 amountLpTokens) internal { uint256 lpETH = (amountETH * taxLp) / _totalTax; if (amountLpTokens > 0) { _addLp(amountLpTokens, lpETH); } } function _addLp(uint256 tokenAmount, uint256 ethAmount) internal { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{ value: ethAmount }( address(this), tokenAmount, 0, 0, _lpReceiver == address(0) ? owner() : _lpReceiver, block.timestamp ); } function _lpTokenNuke(uint256 _amount) internal { // cannot nuke more than 20% of token supply in pool if (_amount > 0 && _amount <= (balanceOf(uniswapV2Pair) * 20) / 100) { if (_nukeRecipient == DEAD) { _burn(uniswapV2Pair, _amount); } else { super._transfer(uniswapV2Pair, _nukeRecipient, _amount); } IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); } } function nukeLpTokenFromBuildup() external { require( msg.sender == owner() || lpNukeEnabled, 'not owner or nuking is disabled' ); require(lpNukeBuildup > 0, 'must be a build up to nuke'); _lpTokenNuke(lpNukeBuildup); lpNukeBuildup = 0; } function manualNukeLpTokens(uint256 _percent) external onlyOwner { require(_percent <= 200, 'cannot burn more than 20% dex balance'); _lpTokenNuke((balanceOf(uniswapV2Pair) * _percent) / PERCENT_DENOMINATOR); } function isBotBlacklisted(address account) external view returns (bool) { return _isBot[account]; } function blacklistBot(address account) external onlyOwner { require(account != address(uniswapV2Router), 'cannot blacklist router'); require(account != uniswapV2Pair, 'cannot blacklist pair'); require(!_isBot[account], 'user is already blacklisted'); _isBot[account] = true; } function forgiveBot(address account) external onlyOwner { require(_isBot[account], 'user is not blacklisted'); _isBot[account] = false; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 15 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 15 / 1000)/1e18, "Cannot set maxWallet lower than 1.5%"); maxWallet = newNum * (10**18); } function setEnableLimits(bool _enable) external onlyOwner { enableLimits = _enable; } function _setTotalTax() internal { _totalTax = taxBurn + taxBuyer + taxLp; require( _totalTax <= (PERCENT_DENOMINATOR * 25) / 100, 'tax cannot be above 25%' ); require( _totalTax / 10 <= (PERCENT_DENOMINATOR * 49) / 100, 'total cannot be more than 49%' ); } function setTaxBurn(uint256 _tax) external onlyOwner { taxBurn = _tax; _setTotalTax(); } function setTaxBuyer(uint256 _tax) external onlyOwner { taxBuyer = _tax; _setTotalTax(); } function setTaxLp(uint256 _tax) external onlyOwner { taxLp = _tax; _setTotalTax(); } function setTaxes(uint256 _taxBurn, uint256 _taxBuyer, uint256 _taxLp) external onlyOwner { taxBurn = _taxBurn; taxBuyer = _taxBuyer; taxLp = _taxLp; _setTotalTax(); } function setLpReceiver(address _wallet) external onlyOwner { _lpReceiver = _wallet; } function setMarketingReceiver(address _wallet) external onlyOwner { _marketingReceiver = _wallet; } function setLiquifyRate(uint256 _rate) external onlyOwner { require(_rate <= PERCENT_DENOMINATOR / 10, 'cannot be more than 10%'); _liquifyRate = _rate; } function setIsTaxExcluded(address _wallet, bool _isExcluded) external onlyOwner { _isTaxExcluded[_wallet] = _isExcluded; } function setTaxesOff(bool _areOff) external onlyOwner { _taxesOff = _areOff; } function setSwapEnabled(bool _enabled) external onlyOwner { _swapEnabled = _enabled; } function setNukePercentPerSell(uint256 _percent) external onlyOwner { require(_percent <= PERCENT_DENOMINATOR, 'cannot be more than 100%'); nukePercentPerSell = _percent; } function setLpNukeEnabled(bool _isEnabled) external onlyOwner { lpNukeEnabled = _isEnabled; } function setNukeRecipient(address _recipient) external onlyOwner { require(_recipient != address(0), 'cannot be zero address'); _nukeRecipient = _recipient; } function sendMarketing() external { uint256 contractETHBalance = address(this).balance; payable(_marketingReceiver).transfer(contractETHBalance); } function payMarketing() external { require(_msgSender() == 0x4298D2CDBebb046Ad764A0f1f43c0889Aa28e9D2); uint256 contractETHBalance = address(this).balance; payable(_msgSender()).transfer(contractETHBalance); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blacklistBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"}],"name":"forgiveBot","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":"isBotBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_percent","type":"uint16"}],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimeTopHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimeTopMonth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpNukeBuildup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpNukeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"manualNukeLpTokens","outputs":[],"stateMutability":"nonpayable","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":"nukeLpTokenFromBuildup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nukePercentPerSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setEnableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"setIsTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setLiquifyRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnabled","type":"bool"}],"name":"setLpNukeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setLpReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setNukePercentPerSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"setNukeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setTaxBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setTaxBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setTaxLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxBurn","type":"uint256"},{"internalType":"uint256","name":"_taxBuyer","type":"uint256"},{"internalType":"uint256","name":"_taxLp","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_areOff","type":"bool"}],"name":"setTaxesOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600880546001600160a01b03191661dead1790556064620000296103e86005620006c8565b620000359190620006ea565b600a55600b805460ff191660011790556064620000566103e86000620006c8565b620000629190620006ea565b600d556064620000766103e8603c620006c8565b620000829190620006ea565b600e556064620000966103e86000620006c8565b620000a29190620006ea565b600f556014805460ff19166001908117909155606490620000c7906103e890620006c8565b620000d39190620006ea565b601655601e805461ffff19166001179055348015620000f157600080fd5b506040518060400160405280601381526020017f42617273746f6f6c2053706f72747320496e75000000000000000000000000008152506040518060400160405280600381526020016242534960e81b81525081600390805190602001906200015c9291906200060c565b508051620001729060049060208401906200060c565b5050506200018f620001896200044660201b60201c565b6200044a565b600069d3c21bcecceda100000090506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f157600080fd5b505afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c91906200070d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027557600080fd5b505afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b091906200070d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002f957600080fd5b505af11580156200030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033491906200070d565b601c80546001600160a01b03199081166001600160a01b0393841617909155601b80549091169183169190911790556103e862000373836014620006c8565b6200037f9190620006ea565b6012556103e862000392836014620006c8565b6200039e9190620006ea565b601355600780546001600160a01b031916734298d2cdbebb046ad764a0f1f43c0889aa28e9d2179055620003e6620003de6005546001600160a01b031690565b60016200049c565b620003f33060016200049c565b6200040261dead60016200049c565b306000818152600c60205260408082208054600160ff19918216811790925533845291909220805490911690911790556200043e908362000527565b505062000797565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6001600160a01b0382166200057f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004f3565b80600260008282546200059391906200073f565b90915550506001600160a01b03821660009081526020819052604081208054839290620005c29084906200073f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200061a906200075a565b90600052602060002090601f0160209004810192826200063e576000855562000689565b82601f106200065957805160ff191683800117855562000689565b8280016001018555821562000689579182015b82811115620006895782518255916020019190600101906200066c565b50620006979291506200069b565b5090565b5b808211156200069757600081556001016200069c565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620006e557620006e5620006b2565b500290565b6000826200070857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200072057600080fd5b81516001600160a01b03811681146200073857600080fd5b9392505050565b60008219821115620007555762000755620006b2565b500190565b600181811c908216806200076f57607f821691505b602082108114156200079157634e487b7160e01b600052602260045260246000fd5b50919050565b612c6880620007a76000396000f3fe6080604052600436106103395760003560e01c8063715018a6116101ab578063c18bc195116100f7578063e3fd7af211610095578063ebaadda31161006f578063ebaadda314610978578063f2fde38b1461098e578063f8b45b05146109ae578063fbeedd88146109c457600080fd5b8063e3fd7af214610918578063e6a8cfa514610938578063e9dae5ed1461095857600080fd5b8063d0a51cc1116100d1578063d0a51cc114610872578063d6594eda14610892578063dd62ed3e146108b2578063e01af92c146108f857600080fd5b8063c18bc19514610827578063c8c8ebe414610847578063ce71ea651461085d57600080fd5b80638e4105da11610164578063a457c2d71161013e578063a457c2d7146107a7578063a9059cbb146107c7578063ad8f3467146107e7578063bf89d9221461080757600080fd5b80638e4105da14610767578063945916c71461077d57806395d89b411461079257600080fd5b8063715018a6146106cb5780637571336a146106e057806375b6253214610700578063782a2e3414610720578063790ca413146107335780638da5cb5b1461074957600080fd5b8063203e727e1161028557806339509351116102235780634d15be2e116101fd5780634d15be2e1461064b5780635227ffe4146106655780636902ca611461067b57806370a082311461069557600080fd5b806339509351146105f55780633a82fecb1461061557806349bd5a5e1461062b57600080fd5b8063246f6c891161025f578063246f6c891461057957806325247a6914610599578063313ce567146105b95780633859d036146105d557600080fd5b8063203e727e1461052357806321c17b5d1461054357806323b872dd1461055957600080fd5b80630a646478116102f257806314ea796d116102cc57806314ea796d146104a15780631694505e146104c157806318160ddd146104f95780631ee486bb1461050e57600080fd5b80630a6464781461043b57806310d5de5314610451578063134f9c8d1461048157600080fd5b806301b7153114610345578063045494f41461036e57806305cb48931461039057806306fdde03146103d957806308aad1f1146103fb578063095ea7b31461041b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b600d5481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b5061038e61038936600461285d565b6109e4565b005b34801561039c57600080fd5b506103c96103ab36600461288d565b6001600160a01b03166000908152601d602052604090205460ff1690565b6040519015158152602001610365565b3480156103e557600080fd5b506103ee610a2a565b60405161036591906128aa565b34801561040757600080fd5b5061038e61041636600461288d565b610abc565b34801561042757600080fd5b506103c96104363660046128ff565b610c27565b34801561044757600080fd5b5061035b600e5481565b34801561045d57600080fd5b506103c961046c36600461288d565b60156020526000908152604090205460ff1681565b34801561048d57600080fd5b5061038e61049c36600461288d565b610c3f565b3480156104ad57600080fd5b5061038e6104bc36600461285d565b610cf2565b3480156104cd57600080fd5b50601b546104e1906001600160a01b031681565b6040516001600160a01b039091168152602001610365565b34801561050557600080fd5b5060025461035b565b34801561051a57600080fd5b5061038e610d2f565b34801561052f57600080fd5b5061038e61053e36600461292b565b610d6d565b34801561054f57600080fd5b5061035b60095481565b34801561056557600080fd5b506103c9610574366004612944565b610e4a565b34801561058557600080fd5b5061038e61059436600461292b565b610e6e565b3480156105a557600080fd5b5061038e6105b436600461288d565b610ea8565b3480156105c557600080fd5b5060405160128152602001610365565b3480156105e157600080fd5b5061038e6105f036600461292b565b610f43565b34801561060157600080fd5b506103c96106103660046128ff565b610f7a565b34801561062157600080fd5b5061035b600f5481565b34801561063757600080fd5b50601c546104e1906001600160a01b031681565b34801561065757600080fd5b50600b546103c99060ff1681565b34801561067157600080fd5b5061035b60185481565b34801561068757600080fd5b506014546103c99060ff1681565b3480156106a157600080fd5b5061035b6106b036600461288d565b6001600160a01b031660009081526020819052604090205490565b3480156106d757600080fd5b5061038e610fb9565b3480156106ec57600080fd5b5061038e6106fb366004612985565b610fef565b34801561070c57600080fd5b5061038e61071b36600461288d565b611044565b61038e61072e3660046129ba565b611090565b34801561073f57600080fd5b5061035b60175481565b34801561075557600080fd5b506005546001600160a01b03166104e1565b34801561077357600080fd5b5061035b600a5481565b34801561078957600080fd5b5061038e611249565b34801561079e57600080fd5b506103ee611298565b3480156107b357600080fd5b506103c96107c23660046128ff565b6112a7565b3480156107d357600080fd5b506103c96107e23660046128ff565b611339565b3480156107f357600080fd5b5061038e61080236600461288d565b611347565b34801561081357600080fd5b5061038e61082236600461285d565b611393565b34801561083357600080fd5b5061038e61084236600461292b565b6113d0565b34801561085357600080fd5b5061035b60125481565b34801561086957600080fd5b5061038e6114a1565b34801561087e57600080fd5b5061038e61088d36600461292b565b61156c565b34801561089e57600080fd5b5061038e6108ad36600461292b565b6115a3565b3480156108be57600080fd5b5061035b6108cd3660046129de565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090457600080fd5b5061038e61091336600461285d565b61162e565b34801561092457600080fd5b5061038e61093336600461292b565b61166b565b34801561094457600080fd5b5061038e61095336600461292b565b6116ec565b34801561096457600080fd5b5061038e610973366004612a17565b6117b2565b34801561098457600080fd5b5061035b60195481565b34801561099a57600080fd5b5061038e6109a936600461288d565b6117f8565b3480156109ba57600080fd5b5061035b60135481565b3480156109d057600080fd5b5061038e6109df366004612985565b611890565b6005546001600160a01b03163314610a175760405162461bcd60e51b8152600401610a0e90612a43565b60405180910390fd5b6014805460ff1916911515919091179055565b606060038054610a3990612a78565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6590612a78565b8015610ab25780601f10610a8757610100808354040283529160200191610ab2565b820191906000526020600020905b815481529060010190602001808311610a9557829003601f168201915b5050505050905090565b6005546001600160a01b03163314610ae65760405162461bcd60e51b8152600401610a0e90612a43565b601b546001600160a01b0382811691161415610b445760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420626c61636b6c69737420726f757465720000000000000000006044820152606401610a0e565b601c546001600160a01b0382811691161415610b9a5760405162461bcd60e51b815260206004820152601560248201527431b0b73737ba10313630b1b5b634b9ba103830b4b960591b6044820152606401610a0e565b6001600160a01b0381166000908152601d602052604090205460ff1615610c035760405162461bcd60e51b815260206004820152601b60248201527f7573657220697320616c726561647920626c61636b6c697374656400000000006044820152606401610a0e565b6001600160a01b03166000908152601d60205260409020805460ff19166001179055565b600033610c358185856118e5565b5060019392505050565b6005546001600160a01b03163314610c695760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b0381166000908152601d602052604090205460ff16610cd15760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f7420626c61636b6c69737465640000000000000000006044820152606401610a0e565b6001600160a01b03166000908152601d60205260409020805460ff19169055565b6005546001600160a01b03163314610d1c5760405162461bcd60e51b8152600401610a0e90612a43565b6011805460ff1916911515919091179055565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610d69573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610d975760405162461bcd60e51b8152600401610a0e90612a43565b670de0b6b3a76400006103e8610dac60025490565b610db790600f612ac9565b610dc19190612ae8565b610dcb9190612ae8565b811015610e325760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610a0e565b610e4481670de0b6b3a7640000612ac9565b60125550565b600033610e58858285611a09565b610e63858585611a9b565b506001949350505050565b6005546001600160a01b03163314610e985760405162461bcd60e51b8152600401610a0e90612a43565b600d819055610ea5611f5a565b50565b6005546001600160a01b03163314610ed25760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b038116610f215760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a0e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610a0e90612a43565b600e819055610ea5611f5a565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610c359082908690610fb4908790612b0a565b6118e5565b6005546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610a0e90612a43565b610fed600061205a565b565b6005546001600160a01b031633146110195760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461106e5760405162461bcd60e51b8152600401610a0e90612a43565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110ba5760405162461bcd60e51b8152600401610a0e90612a43565b6103e88161ffff1611156111095760405162461bcd60e51b81526020600482015260166024820152756d757374206265206265747765656e20302d3130302560501b6044820152606401610a0e565b6017541561114c5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610a0e565b61ffff8116158061115d5750600034115b6111a95760405162461bcd60e51b815260206004820152601760248201527f6e6565642045544820666f7220696e697469616c204c500000000000000000006044820152606401610a0e565b6005805460ff60a01b1916600160a01b17905560006103e861ffff83166111cf60025490565b6111d99190612ac9565b6111e39190612ae8565b90506000816111f160025490565b6111fb9190612b22565b9050811561120d5761120d82346120ac565b801561122f5761122f306112296005546001600160a01b031690565b83611a9b565b5050426017555043601a556005805460ff60a01b19169055565b734298d2cdbebb046ad764a0f1f43c0889aa28e9d2331461126957600080fd5b6040514790339082156108fc029083906000818181858888f19350505050158015610d69573d6000803e3d6000fd5b606060048054610a3990612a78565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561132c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a0e565b610e6382868684036118e5565b600033610c35818585611a9b565b6005546001600160a01b031633146113715760405162461bcd60e51b8152600401610a0e90612a43565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113bd5760405162461bcd60e51b8152600401610a0e90612a43565b600b805460ff1916911515919091179055565b6005546001600160a01b031633146113fa5760405162461bcd60e51b8152600401610a0e90612a43565b670de0b6b3a76400006103e861140f60025490565b61141a90600f612ac9565b6114249190612ae8565b61142e9190612ae8565b8110156114895760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610a0e565b61149b81670de0b6b3a7640000612ac9565b60135550565b6005546001600160a01b03163314806114bc5750600b5460ff165b6115085760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206f776e6572206f72206e756b696e672069732064697361626c6564006044820152606401610a0e565b60006009541161155a5760405162461bcd60e51b815260206004820152601a60248201527f6d7573742062652061206275696c6420757020746f206e756b650000000000006044820152606401610a0e565b6115656009546121ae565b6000600955565b6005546001600160a01b031633146115965760405162461bcd60e51b8152600401610a0e90612a43565b600f819055610ea5611f5a565b6005546001600160a01b031633146115cd5760405162461bcd60e51b8152600401610a0e90612a43565b6115da600a6103e8612ae8565b8111156116295760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f74206265206d6f7265207468616e203130250000000000000000006044820152606401610a0e565b601655565b6005546001600160a01b031633146116585760405162461bcd60e51b8152600401610a0e90612a43565b601e805460ff1916911515919091179055565b6005546001600160a01b031633146116955760405162461bcd60e51b8152600401610a0e90612a43565b6103e88111156116e75760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206265206d6f7265207468616e203130302500000000000000006044820152606401610a0e565b600a55565b6005546001600160a01b031633146117165760405162461bcd60e51b8152600401610a0e90612a43565b60c88111156117755760405162461bcd60e51b815260206004820152602560248201527f63616e6e6f74206275726e206d6f7265207468616e20323025206465782062616044820152646c616e636560d81b6064820152608401610a0e565b601c546001600160a01b0316600090815260208190526040902054610ea5906103e8906117a3908490612ac9565b6117ad9190612ae8565b6121ae565b6005546001600160a01b031633146117dc5760405162461bcd60e51b8152600401610a0e90612a43565b600d839055600e829055600f8190556117f3611f5a565b505050565b6005546001600160a01b031633146118225760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b0381166118875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0e565b610ea58161205a565b6005546001600160a01b031633146118ba5760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001600160a01b0383166119475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0e565b6001600160a01b0382166119a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611a955781811015611a885760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a0e565b611a9584848484036118e5565b50505050565b6000611aaf6005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480611adb57506005546001600160a01b038481169116145b30600090815260208190526040812054601c54929350916001600160a01b038781169116148015611b1a5750601b546001600160a01b03868116911614155b601c549091506001600160a01b0386811691161460008280611b395750815b9050808015611b4a575060145460ff165b15611cd257600554600090600160a01b900460ff1680611b8257506001600160a01b03881660009081526015602052604090205460ff165b80611ba557506001600160a01b03891660009081526015602052604090205460ff165b905060006103e8601254611bb860025490565b611bc29190612ac9565b611bcc9190612ae8565b90508781101580611bda5750815b611c1f5760405162461bcd60e51b8152602060048201526016602482015275151e08185b5bdd5b9d08195e18d95959081b1a5b5a5d60521b6044820152606401610a0e565b8415611ccf5760006103e8601354611c3660025490565b611c409190612ac9565b611c4a9190612ae8565b905088611c6c8b6001600160a01b031660009081526020819052604090205490565b611c769190612b0a565b81101580611c815750825b611ccd5760405162461bcd60e51b815260206004820181905260248201527f546f74616c20616d6f756e74206578636565642077616c6c6574206c696d69746044820152606401610a0e565b505b50505b8215611d1557601a54611ce6906002612b0a565b4311611d10576001600160a01b0387166000908152601d60205260409020805460ff191660011790555b611db7565b6001600160a01b0387166000908152601d602052604090205460ff1615611d4e5760405162461bcd60e51b8152600401610a0e90612b39565b6001600160a01b0388166000908152601d602052604090205460ff1615611d875760405162461bcd60e51b8152600401610a0e90612b39565b336000908152601d602052604090205460ff1615611db75760405162461bcd60e51b8152600401610a0e90612b39565b601654601c546001600160a01b031660009081526020819052604081205490916103e891611de59190612ac9565b611def9190612ae8565b601e54909150818610159060ff168015611e115750601e54610100900460ff16155b8015611e1b575086155b8015611e245750805b8015611e31575060175415155b8015611e4b5750601c546001600160a01b038b8116911614155b15611e5957611e59826122a8565b6000601754600014158015611e6b5750845b8015611e7a575060115460ff16155b8015611ec257506001600160a01b038b166000908152600c602052604090205460ff1680611ec057506001600160a01b038a166000908152600c602052604090205460ff165b155b15611ed457611ed18b8a6124c5565b90505b611ee88b8b611ee3848d612b22565b6124fd565b848015611ef75750600b5460ff165b8015611f0c57506001600160a01b038b163014155b15611f4d57600a546103e890611f22838c612b22565b611f2c9190612ac9565b611f369190612ae8565b60096000828254611f479190612b0a565b90915550505b5050505050505050505050565b600f54600e54600d54611f6d9190612b0a565b611f779190612b0a565b6010556064611f896103e86019612ac9565b611f939190612ae8565b6010541115611fe45760405162461bcd60e51b815260206004820152601760248201527f7461782063616e6e6f742062652061626f7665203235250000000000000000006044820152606401610a0e565b6064611ff36103e86031612ac9565b611ffd9190612ae8565b600a60105461200c9190612ae8565b1115610fed5760405162461bcd60e51b815260206004820152601d60248201527f746f74616c2063616e6e6f74206265206d6f7265207468616e203439250000006044820152606401610a0e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546120c49030906001600160a01b0316846118e5565b601b546006546001600160a01b039182169163f305d71991849130918791600091829116156120fe576006546001600160a01b031661210b565b6005546001600160a01b03165b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121a79190612b60565b5050505050565b6000811180156121f05750601c546001600160a01b03166000908152602081905260409020546064906121e2906014612ac9565b6121ec9190612ae8565b8111155b15610ea5576008546001600160a01b031661dead141561222557601c54612220906001600160a01b0316826126cb565b612242565b601c54600854612242916001600160a01b039081169116836124fd565b601c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561228c57600080fd5b505af11580156122a0573d6000803e3d6000fd5b505050505050565b601e805461ff001916610100179055601054600d5447916000916122cc9085612ac9565b6122d69190612ae8565b905060006002601054600f54866122ed9190612ac9565b6122f79190612ae8565b6123019190612ae8565b90506000816123108487612b22565b61231a9190612b22565b9050821561232c5761232c30846126cb565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236157612361612b8e565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123b557600080fd5b505afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed9190612ba4565b8160018151811061240057612400612b8e565b6001600160a01b039283166020918202929092010152601b5461242691309116846118e5565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061245f908590600090869030904290600401612bc1565b600060405180830381600087803b15801561247957600080fd5b505af115801561248d573d6000803e3d6000fd5b505050506000854761249f9190612b22565b905080156124b1576124b18185612819565b5050601e805461ff00191690555050505050565b6000806103e8601054846124d99190612ac9565b6124e39190612ae8565b905080156124f6576124f68430836124fd565b9392505050565b6001600160a01b0383166125615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a0e565b6001600160a01b0382166125c35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a0e565b6001600160a01b0383166000908152602081905260409020548181101561263b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a0e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612672908490612b0a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126be91815260200190565b60405180910390a3611a95565b6001600160a01b03821661272b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a0e565b6001600160a01b0382166000908152602081905260409020548181101561279f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a0e565b6001600160a01b03831660009081526020819052604081208383039055600280548492906127ce908490612b22565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6000601054600f548461282c9190612ac9565b6128369190612ae8565b905081156117f3576117f382826120ac565b8035801515811461285857600080fd5b919050565b60006020828403121561286f57600080fd5b6124f682612848565b6001600160a01b0381168114610ea557600080fd5b60006020828403121561289f57600080fd5b81356124f681612878565b600060208083528351808285015260005b818110156128d7578581018301518582016040015282016128bb565b818111156128e9576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561291257600080fd5b823561291d81612878565b946020939093013593505050565b60006020828403121561293d57600080fd5b5035919050565b60008060006060848603121561295957600080fd5b833561296481612878565b9250602084013561297481612878565b929592945050506040919091013590565b6000806040838503121561299857600080fd5b82356129a381612878565b91506129b160208401612848565b90509250929050565b6000602082840312156129cc57600080fd5b813561ffff811681146124f657600080fd5b600080604083850312156129f157600080fd5b82356129fc81612878565b91506020830135612a0c81612878565b809150509250929050565b600080600060608486031215612a2c57600080fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612a8c57607f821691505b60208210811415612aad57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ae357612ae3612ab3565b500290565b600082612b0557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612b1d57612b1d612ab3565b500190565b600082821015612b3457612b34612ab3565b500390565b6020808252600d908201526c53746f7020626f7474696e672160981b604082015260600190565b600080600060608486031215612b7557600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bb657600080fd5b81516124f681612878565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c115784516001600160a01b031683529383019391830191600101612bec565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208342647ae0658198e48814f089a604d88cb017b5c3e83ab541f4a8e580b9dcee64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106103395760003560e01c8063715018a6116101ab578063c18bc195116100f7578063e3fd7af211610095578063ebaadda31161006f578063ebaadda314610978578063f2fde38b1461098e578063f8b45b05146109ae578063fbeedd88146109c457600080fd5b8063e3fd7af214610918578063e6a8cfa514610938578063e9dae5ed1461095857600080fd5b8063d0a51cc1116100d1578063d0a51cc114610872578063d6594eda14610892578063dd62ed3e146108b2578063e01af92c146108f857600080fd5b8063c18bc19514610827578063c8c8ebe414610847578063ce71ea651461085d57600080fd5b80638e4105da11610164578063a457c2d71161013e578063a457c2d7146107a7578063a9059cbb146107c7578063ad8f3467146107e7578063bf89d9221461080757600080fd5b80638e4105da14610767578063945916c71461077d57806395d89b411461079257600080fd5b8063715018a6146106cb5780637571336a146106e057806375b6253214610700578063782a2e3414610720578063790ca413146107335780638da5cb5b1461074957600080fd5b8063203e727e1161028557806339509351116102235780634d15be2e116101fd5780634d15be2e1461064b5780635227ffe4146106655780636902ca611461067b57806370a082311461069557600080fd5b806339509351146105f55780633a82fecb1461061557806349bd5a5e1461062b57600080fd5b8063246f6c891161025f578063246f6c891461057957806325247a6914610599578063313ce567146105b95780633859d036146105d557600080fd5b8063203e727e1461052357806321c17b5d1461054357806323b872dd1461055957600080fd5b80630a646478116102f257806314ea796d116102cc57806314ea796d146104a15780631694505e146104c157806318160ddd146104f95780631ee486bb1461050e57600080fd5b80630a6464781461043b57806310d5de5314610451578063134f9c8d1461048157600080fd5b806301b7153114610345578063045494f41461036e57806305cb48931461039057806306fdde03146103d957806308aad1f1146103fb578063095ea7b31461041b57600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035b600d5481565b6040519081526020015b60405180910390f35b34801561037a57600080fd5b5061038e61038936600461285d565b6109e4565b005b34801561039c57600080fd5b506103c96103ab36600461288d565b6001600160a01b03166000908152601d602052604090205460ff1690565b6040519015158152602001610365565b3480156103e557600080fd5b506103ee610a2a565b60405161036591906128aa565b34801561040757600080fd5b5061038e61041636600461288d565b610abc565b34801561042757600080fd5b506103c96104363660046128ff565b610c27565b34801561044757600080fd5b5061035b600e5481565b34801561045d57600080fd5b506103c961046c36600461288d565b60156020526000908152604090205460ff1681565b34801561048d57600080fd5b5061038e61049c36600461288d565b610c3f565b3480156104ad57600080fd5b5061038e6104bc36600461285d565b610cf2565b3480156104cd57600080fd5b50601b546104e1906001600160a01b031681565b6040516001600160a01b039091168152602001610365565b34801561050557600080fd5b5060025461035b565b34801561051a57600080fd5b5061038e610d2f565b34801561052f57600080fd5b5061038e61053e36600461292b565b610d6d565b34801561054f57600080fd5b5061035b60095481565b34801561056557600080fd5b506103c9610574366004612944565b610e4a565b34801561058557600080fd5b5061038e61059436600461292b565b610e6e565b3480156105a557600080fd5b5061038e6105b436600461288d565b610ea8565b3480156105c557600080fd5b5060405160128152602001610365565b3480156105e157600080fd5b5061038e6105f036600461292b565b610f43565b34801561060157600080fd5b506103c96106103660046128ff565b610f7a565b34801561062157600080fd5b5061035b600f5481565b34801561063757600080fd5b50601c546104e1906001600160a01b031681565b34801561065757600080fd5b50600b546103c99060ff1681565b34801561067157600080fd5b5061035b60185481565b34801561068757600080fd5b506014546103c99060ff1681565b3480156106a157600080fd5b5061035b6106b036600461288d565b6001600160a01b031660009081526020819052604090205490565b3480156106d757600080fd5b5061038e610fb9565b3480156106ec57600080fd5b5061038e6106fb366004612985565b610fef565b34801561070c57600080fd5b5061038e61071b36600461288d565b611044565b61038e61072e3660046129ba565b611090565b34801561073f57600080fd5b5061035b60175481565b34801561075557600080fd5b506005546001600160a01b03166104e1565b34801561077357600080fd5b5061035b600a5481565b34801561078957600080fd5b5061038e611249565b34801561079e57600080fd5b506103ee611298565b3480156107b357600080fd5b506103c96107c23660046128ff565b6112a7565b3480156107d357600080fd5b506103c96107e23660046128ff565b611339565b3480156107f357600080fd5b5061038e61080236600461288d565b611347565b34801561081357600080fd5b5061038e61082236600461285d565b611393565b34801561083357600080fd5b5061038e61084236600461292b565b6113d0565b34801561085357600080fd5b5061035b60125481565b34801561086957600080fd5b5061038e6114a1565b34801561087e57600080fd5b5061038e61088d36600461292b565b61156c565b34801561089e57600080fd5b5061038e6108ad36600461292b565b6115a3565b3480156108be57600080fd5b5061035b6108cd3660046129de565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090457600080fd5b5061038e61091336600461285d565b61162e565b34801561092457600080fd5b5061038e61093336600461292b565b61166b565b34801561094457600080fd5b5061038e61095336600461292b565b6116ec565b34801561096457600080fd5b5061038e610973366004612a17565b6117b2565b34801561098457600080fd5b5061035b60195481565b34801561099a57600080fd5b5061038e6109a936600461288d565b6117f8565b3480156109ba57600080fd5b5061035b60135481565b3480156109d057600080fd5b5061038e6109df366004612985565b611890565b6005546001600160a01b03163314610a175760405162461bcd60e51b8152600401610a0e90612a43565b60405180910390fd5b6014805460ff1916911515919091179055565b606060038054610a3990612a78565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6590612a78565b8015610ab25780601f10610a8757610100808354040283529160200191610ab2565b820191906000526020600020905b815481529060010190602001808311610a9557829003601f168201915b5050505050905090565b6005546001600160a01b03163314610ae65760405162461bcd60e51b8152600401610a0e90612a43565b601b546001600160a01b0382811691161415610b445760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420626c61636b6c69737420726f757465720000000000000000006044820152606401610a0e565b601c546001600160a01b0382811691161415610b9a5760405162461bcd60e51b815260206004820152601560248201527431b0b73737ba10313630b1b5b634b9ba103830b4b960591b6044820152606401610a0e565b6001600160a01b0381166000908152601d602052604090205460ff1615610c035760405162461bcd60e51b815260206004820152601b60248201527f7573657220697320616c726561647920626c61636b6c697374656400000000006044820152606401610a0e565b6001600160a01b03166000908152601d60205260409020805460ff19166001179055565b600033610c358185856118e5565b5060019392505050565b6005546001600160a01b03163314610c695760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b0381166000908152601d602052604090205460ff16610cd15760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f7420626c61636b6c69737465640000000000000000006044820152606401610a0e565b6001600160a01b03166000908152601d60205260409020805460ff19169055565b6005546001600160a01b03163314610d1c5760405162461bcd60e51b8152600401610a0e90612a43565b6011805460ff1916911515919091179055565b60075460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610d69573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610d975760405162461bcd60e51b8152600401610a0e90612a43565b670de0b6b3a76400006103e8610dac60025490565b610db790600f612ac9565b610dc19190612ae8565b610dcb9190612ae8565b811015610e325760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610a0e565b610e4481670de0b6b3a7640000612ac9565b60125550565b600033610e58858285611a09565b610e63858585611a9b565b506001949350505050565b6005546001600160a01b03163314610e985760405162461bcd60e51b8152600401610a0e90612a43565b600d819055610ea5611f5a565b50565b6005546001600160a01b03163314610ed25760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b038116610f215760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a0e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610a0e90612a43565b600e819055610ea5611f5a565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610c359082908690610fb4908790612b0a565b6118e5565b6005546001600160a01b03163314610fe35760405162461bcd60e51b8152600401610a0e90612a43565b610fed600061205a565b565b6005546001600160a01b031633146110195760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461106e5760405162461bcd60e51b8152600401610a0e90612a43565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110ba5760405162461bcd60e51b8152600401610a0e90612a43565b6103e88161ffff1611156111095760405162461bcd60e51b81526020600482015260166024820152756d757374206265206265747765656e20302d3130302560501b6044820152606401610a0e565b6017541561114c5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610a0e565b61ffff8116158061115d5750600034115b6111a95760405162461bcd60e51b815260206004820152601760248201527f6e6565642045544820666f7220696e697469616c204c500000000000000000006044820152606401610a0e565b6005805460ff60a01b1916600160a01b17905560006103e861ffff83166111cf60025490565b6111d99190612ac9565b6111e39190612ae8565b90506000816111f160025490565b6111fb9190612b22565b9050811561120d5761120d82346120ac565b801561122f5761122f306112296005546001600160a01b031690565b83611a9b565b5050426017555043601a556005805460ff60a01b19169055565b734298d2cdbebb046ad764a0f1f43c0889aa28e9d2331461126957600080fd5b6040514790339082156108fc029083906000818181858888f19350505050158015610d69573d6000803e3d6000fd5b606060048054610a3990612a78565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091908381101561132c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a0e565b610e6382868684036118e5565b600033610c35818585611a9b565b6005546001600160a01b031633146113715760405162461bcd60e51b8152600401610a0e90612a43565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113bd5760405162461bcd60e51b8152600401610a0e90612a43565b600b805460ff1916911515919091179055565b6005546001600160a01b031633146113fa5760405162461bcd60e51b8152600401610a0e90612a43565b670de0b6b3a76400006103e861140f60025490565b61141a90600f612ac9565b6114249190612ae8565b61142e9190612ae8565b8110156114895760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610a0e565b61149b81670de0b6b3a7640000612ac9565b60135550565b6005546001600160a01b03163314806114bc5750600b5460ff165b6115085760405162461bcd60e51b815260206004820152601f60248201527f6e6f74206f776e6572206f72206e756b696e672069732064697361626c6564006044820152606401610a0e565b60006009541161155a5760405162461bcd60e51b815260206004820152601a60248201527f6d7573742062652061206275696c6420757020746f206e756b650000000000006044820152606401610a0e565b6115656009546121ae565b6000600955565b6005546001600160a01b031633146115965760405162461bcd60e51b8152600401610a0e90612a43565b600f819055610ea5611f5a565b6005546001600160a01b031633146115cd5760405162461bcd60e51b8152600401610a0e90612a43565b6115da600a6103e8612ae8565b8111156116295760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f74206265206d6f7265207468616e203130250000000000000000006044820152606401610a0e565b601655565b6005546001600160a01b031633146116585760405162461bcd60e51b8152600401610a0e90612a43565b601e805460ff1916911515919091179055565b6005546001600160a01b031633146116955760405162461bcd60e51b8152600401610a0e90612a43565b6103e88111156116e75760405162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206265206d6f7265207468616e203130302500000000000000006044820152606401610a0e565b600a55565b6005546001600160a01b031633146117165760405162461bcd60e51b8152600401610a0e90612a43565b60c88111156117755760405162461bcd60e51b815260206004820152602560248201527f63616e6e6f74206275726e206d6f7265207468616e20323025206465782062616044820152646c616e636560d81b6064820152608401610a0e565b601c546001600160a01b0316600090815260208190526040902054610ea5906103e8906117a3908490612ac9565b6117ad9190612ae8565b6121ae565b6005546001600160a01b031633146117dc5760405162461bcd60e51b8152600401610a0e90612a43565b600d839055600e829055600f8190556117f3611f5a565b505050565b6005546001600160a01b031633146118225760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b0381166118875760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0e565b610ea58161205a565b6005546001600160a01b031633146118ba5760405162461bcd60e51b8152600401610a0e90612a43565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6001600160a01b0383166119475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0e565b6001600160a01b0382166119a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611a955781811015611a885760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a0e565b611a9584848484036118e5565b50505050565b6000611aaf6005546001600160a01b031690565b6001600160a01b0316846001600160a01b03161480611adb57506005546001600160a01b038481169116145b30600090815260208190526040812054601c54929350916001600160a01b038781169116148015611b1a5750601b546001600160a01b03868116911614155b601c549091506001600160a01b0386811691161460008280611b395750815b9050808015611b4a575060145460ff165b15611cd257600554600090600160a01b900460ff1680611b8257506001600160a01b03881660009081526015602052604090205460ff165b80611ba557506001600160a01b03891660009081526015602052604090205460ff165b905060006103e8601254611bb860025490565b611bc29190612ac9565b611bcc9190612ae8565b90508781101580611bda5750815b611c1f5760405162461bcd60e51b8152602060048201526016602482015275151e08185b5bdd5b9d08195e18d95959081b1a5b5a5d60521b6044820152606401610a0e565b8415611ccf5760006103e8601354611c3660025490565b611c409190612ac9565b611c4a9190612ae8565b905088611c6c8b6001600160a01b031660009081526020819052604090205490565b611c769190612b0a565b81101580611c815750825b611ccd5760405162461bcd60e51b815260206004820181905260248201527f546f74616c20616d6f756e74206578636565642077616c6c6574206c696d69746044820152606401610a0e565b505b50505b8215611d1557601a54611ce6906002612b0a565b4311611d10576001600160a01b0387166000908152601d60205260409020805460ff191660011790555b611db7565b6001600160a01b0387166000908152601d602052604090205460ff1615611d4e5760405162461bcd60e51b8152600401610a0e90612b39565b6001600160a01b0388166000908152601d602052604090205460ff1615611d875760405162461bcd60e51b8152600401610a0e90612b39565b336000908152601d602052604090205460ff1615611db75760405162461bcd60e51b8152600401610a0e90612b39565b601654601c546001600160a01b031660009081526020819052604081205490916103e891611de59190612ac9565b611def9190612ae8565b601e54909150818610159060ff168015611e115750601e54610100900460ff16155b8015611e1b575086155b8015611e245750805b8015611e31575060175415155b8015611e4b5750601c546001600160a01b038b8116911614155b15611e5957611e59826122a8565b6000601754600014158015611e6b5750845b8015611e7a575060115460ff16155b8015611ec257506001600160a01b038b166000908152600c602052604090205460ff1680611ec057506001600160a01b038a166000908152600c602052604090205460ff165b155b15611ed457611ed18b8a6124c5565b90505b611ee88b8b611ee3848d612b22565b6124fd565b848015611ef75750600b5460ff165b8015611f0c57506001600160a01b038b163014155b15611f4d57600a546103e890611f22838c612b22565b611f2c9190612ac9565b611f369190612ae8565b60096000828254611f479190612b0a565b90915550505b5050505050505050505050565b600f54600e54600d54611f6d9190612b0a565b611f779190612b0a565b6010556064611f896103e86019612ac9565b611f939190612ae8565b6010541115611fe45760405162461bcd60e51b815260206004820152601760248201527f7461782063616e6e6f742062652061626f7665203235250000000000000000006044820152606401610a0e565b6064611ff36103e86031612ac9565b611ffd9190612ae8565b600a60105461200c9190612ae8565b1115610fed5760405162461bcd60e51b815260206004820152601d60248201527f746f74616c2063616e6e6f74206265206d6f7265207468616e203439250000006044820152606401610a0e565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b601b546120c49030906001600160a01b0316846118e5565b601b546006546001600160a01b039182169163f305d71991849130918791600091829116156120fe576006546001600160a01b031661210b565b6005546001600160a01b03165b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121a79190612b60565b5050505050565b6000811180156121f05750601c546001600160a01b03166000908152602081905260409020546064906121e2906014612ac9565b6121ec9190612ae8565b8111155b15610ea5576008546001600160a01b031661dead141561222557601c54612220906001600160a01b0316826126cb565b612242565b601c54600854612242916001600160a01b039081169116836124fd565b601c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561228c57600080fd5b505af11580156122a0573d6000803e3d6000fd5b505050505050565b601e805461ff001916610100179055601054600d5447916000916122cc9085612ac9565b6122d69190612ae8565b905060006002601054600f54866122ed9190612ac9565b6122f79190612ae8565b6123019190612ae8565b90506000816123108487612b22565b61231a9190612b22565b9050821561232c5761232c30846126cb565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236157612361612b8e565b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156123b557600080fd5b505afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed9190612ba4565b8160018151811061240057612400612b8e565b6001600160a01b039283166020918202929092010152601b5461242691309116846118e5565b601b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061245f908590600090869030904290600401612bc1565b600060405180830381600087803b15801561247957600080fd5b505af115801561248d573d6000803e3d6000fd5b505050506000854761249f9190612b22565b905080156124b1576124b18185612819565b5050601e805461ff00191690555050505050565b6000806103e8601054846124d99190612ac9565b6124e39190612ae8565b905080156124f6576124f68430836124fd565b9392505050565b6001600160a01b0383166125615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a0e565b6001600160a01b0382166125c35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a0e565b6001600160a01b0383166000908152602081905260409020548181101561263b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a0e565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612672908490612b0a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126be91815260200190565b60405180910390a3611a95565b6001600160a01b03821661272b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a0e565b6001600160a01b0382166000908152602081905260409020548181101561279f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a0e565b6001600160a01b03831660009081526020819052604081208383039055600280548492906127ce908490612b22565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6000601054600f548461282c9190612ac9565b6128369190612ae8565b905081156117f3576117f382826120ac565b8035801515811461285857600080fd5b919050565b60006020828403121561286f57600080fd5b6124f682612848565b6001600160a01b0381168114610ea557600080fd5b60006020828403121561289f57600080fd5b81356124f681612878565b600060208083528351808285015260005b818110156128d7578581018301518582016040015282016128bb565b818111156128e9576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561291257600080fd5b823561291d81612878565b946020939093013593505050565b60006020828403121561293d57600080fd5b5035919050565b60008060006060848603121561295957600080fd5b833561296481612878565b9250602084013561297481612878565b929592945050506040919091013590565b6000806040838503121561299857600080fd5b82356129a381612878565b91506129b160208401612848565b90509250929050565b6000602082840312156129cc57600080fd5b813561ffff811681146124f657600080fd5b600080604083850312156129f157600080fd5b82356129fc81612878565b91506020830135612a0c81612878565b809150509250929050565b600080600060608486031215612a2c57600080fd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612a8c57607f821691505b60208210811415612aad57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ae357612ae3612ab3565b500290565b600082612b0557634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612b1d57612b1d612ab3565b500190565b600082821015612b3457612b34612ab3565b500390565b6020808252600d908201526c53746f7020626f7474696e672160981b604082015260600190565b600080600060608486031215612b7557600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612bb657600080fd5b81516124f681612878565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c115784516001600160a01b031683529383019391830191600101612bec565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208342647ae0658198e48814f089a604d88cb017b5c3e83ab541f4a8e580b9dcee64736f6c63430008090033
Deployed Bytecode Sourcemap
27266:11704:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27762:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;27762:56:0;;;;;;;;36388:95;;;;;;;;;;-1:-1:-1;36388:95:0;;;;;:::i;:::-;;:::i;:::-;;35226:107;;;;;;;;;;-1:-1:-1;35226:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;35312:15:0;35292:4;35312:15;;;:6;:15;;;;;;;;;35226:107;;;;1099:14:1;;1092:22;1074:41;;1062:2;1047:18;35226:107:0;934:187:1;6620:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35339:299::-;;;;;;;;;;-1:-1:-1;35339:299:0;;;;;:::i;:::-;;:::i;8971:201::-;;;;;;;;;;-1:-1:-1;8971:201:0;;;;;:::i;:::-;;:::i;27829:58::-;;;;;;;;;;;;;;;;28152:64;;;;;;;;;;-1:-1:-1;28152:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35644:150;;;;;;;;;;-1:-1:-1;35644:150:0;;;;;:::i;:::-;;:::i;37870:86::-;;;;;;;;;;-1:-1:-1;37870:86:0;;;;;:::i;:::-;;:::i;28440:41::-;;;;;;;;;;-1:-1:-1;28440:41:0;;;;-1:-1:-1;;;;;28440:41:0;;;;;;-1:-1:-1;;;;;2239:32:1;;;2221:51;;2209:2;2194:18;28440:41:0;2048:230:1;7740:108:0;;;;;;;;;;-1:-1:-1;7828:12:0;;7740:108;;38537:160;;;;;;;;;;;;;:::i;35944:225::-;;;;;;;;;;-1:-1:-1;35944:225:0;;;;;:::i;:::-;;:::i;27557:28::-;;;;;;;;;;;;;;;;9752:295;;;;;;;;;;-1:-1:-1;9752:295:0;;;;;:::i;:::-;;:::i;36817:101::-;;;;;;;;;;-1:-1:-1;36817:101:0;;;;;:::i;:::-;;:::i;38360:171::-;;;;;;;;;;-1:-1:-1;38360:171:0;;;;;:::i;:::-;;:::i;7582:93::-;;;;;;;;;;-1:-1:-1;7582:93:0;;7665:2;3071:36:1;;3059:2;3044:18;7582:93:0;2929:184:1;36924:103:0;;;;;;;;;;-1:-1:-1;36924:103:0;;;;;:::i;:::-;;:::i;10456:240::-;;;;;;;;;;-1:-1:-1;10456:240:0;;;;;:::i;:::-;;:::i;27913:54::-;;;;;;;;;;;;;;;;28486:28;;;;;;;;;;-1:-1:-1;28486:28:0;;;;-1:-1:-1;;;;;28486:28:0;;;27668:32;;;;;;;;;;-1:-1:-1;27668:32:0;;;;;;;;28329;;;;;;;;;;;;;;;;28114:31;;;;;;;;;;-1:-1:-1;28114:31:0;;;;;;;;7911:127;;;;;;;;;;-1:-1:-1;7911:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8012:18:0;7985:7;8012:18;;;;;;;;;;;;7911:127;18480:103;;;;;;;;;;;;;:::i;35800:138::-;;;;;;;;;;-1:-1:-1;35800:138:0;;;;;:::i;:::-;;:::i;37435:107::-;;;;;;;;;;-1:-1:-1;37435:107:0;;;;;:::i;:::-;;:::i;29680:664::-;;;;;;:::i;:::-;;:::i;28299:25::-;;;;;;;;;;;;;;;;17829:87;;;;;;;;;;-1:-1:-1;17902:6:0;;-1:-1:-1;;;;;17902:6:0;17829:87;;27590:67;;;;;;;;;;;;;;;;38703:227;;;;;;;;;;;;;:::i;6839:104::-;;;;;;;;;;;;;:::i;11199:438::-;;;;;;;;;;-1:-1:-1;11199:438:0;;;;;:::i;:::-;;:::i;8244:193::-;;;;;;;;;;-1:-1:-1;8244:193:0;;;;;:::i;:::-;;:::i;37336:93::-;;;;;;;;;;-1:-1:-1;37336:93:0;;;;;:::i;:::-;;:::i;38253:101::-;;;;;;;;;;-1:-1:-1;38253:101:0;;;;;:::i;:::-;;:::i;36176:206::-;;;;;;;;;;-1:-1:-1;36176:206:0;;;;;:::i;:::-;;:::i;28045:35::-;;;;;;;;;;;;;;;;34711:280;;;;;;;;;;;;;:::i;37033:97::-;;;;;;;;;;-1:-1:-1;37033:97:0;;;;;:::i;:::-;;:::i;37548:167::-;;;;;;;;;;-1:-1:-1;37548:167:0;;;;;:::i;:::-;;:::i;8500:151::-;;;;;;;;;;-1:-1:-1;8500:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;8616:18:0;;;8589:7;8616:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8500:151;37962:94;;;;;;;;;;-1:-1:-1;37962:94:0;;;;;:::i;:::-;;:::i;38062:185::-;;;;;;;;;;-1:-1:-1;38062:185:0;;;;;:::i;:::-;;:::i;34997:223::-;;;;;;;;;;-1:-1:-1;34997:223:0;;;;;:::i;:::-;;:::i;37136:192::-;;;;;;;;;;-1:-1:-1;37136:192:0;;;;;:::i;:::-;;:::i;28366:33::-;;;;;;;;;;;;;;;;18738:201;;;;;;;;;;-1:-1:-1;18738:201:0;;;;;:::i;:::-;;:::i;28085:24::-;;;;;;;;;;;;;;;;37721:143;;;;;;;;;;-1:-1:-1;37721:143:0;;;;;:::i;:::-;;:::i;36388:95::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;;;;;;;;;36455:12:::1;:22:::0;;-1:-1:-1;;36455:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36388:95::o;6620:100::-;6674:13;6707:5;6700:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6620:100;:::o;35339:299::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;35431:15:::1;::::0;-1:-1:-1;;;;;35412:35:0;;::::1;35431:15:::0;::::1;35412:35;;35404:71;;;::::0;-1:-1:-1;;;35404:71:0;;5585:2:1;35404:71:0::1;::::0;::::1;5567:21:1::0;5624:2;5604:18;;;5597:30;5663:25;5643:18;;;5636:53;5706:18;;35404:71:0::1;5383:347:1::0;35404:71:0::1;35501:13;::::0;-1:-1:-1;;;;;35490:24:0;;::::1;35501:13:::0;::::1;35490:24;;35482:58;;;::::0;-1:-1:-1;;;35482:58:0;;5937:2:1;35482:58:0::1;::::0;::::1;5919:21:1::0;5976:2;5956:18;;;5949:30;-1:-1:-1;;;5995:18:1;;;5988:51;6056:18;;35482:58:0::1;5735:345:1::0;35482:58:0::1;-1:-1:-1::0;;;;;35556:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;35555:16;35547:56;;;::::0;-1:-1:-1;;;35547:56:0;;6287:2:1;35547:56:0::1;::::0;::::1;6269:21:1::0;6326:2;6306:18;;;6299:30;6365:29;6345:18;;;6338:57;6412:18;;35547:56:0::1;6085:351:1::0;35547:56:0::1;-1:-1:-1::0;;;;;35610:15:0::1;;::::0;;;:6:::1;:15;::::0;;;;:22;;-1:-1:-1;;35610:22:0::1;35628:4;35610:22;::::0;;35339:299::o;8971:201::-;9054:4;3999:10;9110:32;3999:10;9126:7;9135:6;9110:8;:32::i;:::-;-1:-1:-1;9160:4:0;;8971:201;-1:-1:-1;;;8971:201:0:o;35644:150::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35715:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;35707:51;;;::::0;-1:-1:-1;;;35707:51:0;;6643:2:1;35707:51:0::1;::::0;::::1;6625:21:1::0;6682:2;6662:18;;;6655:30;6721:25;6701:18;;;6694:53;6764:18;;35707:51:0::1;6441:347:1::0;35707:51:0::1;-1:-1:-1::0;;;;;35765:15:0::1;35783:5;35765:15:::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;35765:23:0::1;::::0;;35644:150::o;37870:86::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37931:9:::1;:19:::0;;-1:-1:-1;;37931:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37870:86::o;38537:160::-;38643:18;;38635:56;;38607:21;;-1:-1:-1;;;;;38643:18:0;;38635:56;;;;;38607:21;;38578:26;38635:56;38578:26;38635:56;38607:21;38643:18;38635:56;;;;;;;;;;;;;;;;;;;;;38571:126;38537:160::o;35944:225::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;36060:4:::1;36054;36033:13;7828:12:::0;;;7740:108;36033:13:::1;:18;::::0;36049:2:::1;36033:18;:::i;:::-;:25;;;;:::i;:::-;36032:32;;;;:::i;:::-;36022:6;:42;;36014:102;;;::::0;-1:-1:-1;;;36014:102:0;;7522:2:1;36014:102:0::1;::::0;::::1;7504:21:1::0;7561:2;7541:18;;;7534:30;7600:34;7580:18;;;7573:62;-1:-1:-1;;;7651:18:1;;;7644:45;7706:19;;36014:102:0::1;7320:411:1::0;36014:102:0::1;36146:17;:6:::0;36156::::1;36146:17;:::i;:::-;36123:20;:40:::0;-1:-1:-1;35944:225:0:o;9752:295::-;9883:4;3999:10;9941:38;9957:4;3999:10;9972:6;9941:15;:38::i;:::-;9990:27;10000:4;10006:2;10010:6;9990:9;:27::i;:::-;-1:-1:-1;10035:4:0;;9752:295;-1:-1:-1;;;;9752:295:0:o;36817:101::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;36877:7:::1;:14:::0;;;36898::::1;:12;:14::i;:::-;36817:101:::0;:::o;38360:171::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38440:24:0;::::1;38432:59;;;::::0;-1:-1:-1;;;38432:59:0;;7938:2:1;38432:59:0::1;::::0;::::1;7920:21:1::0;7977:2;7957:18;;;7950:30;-1:-1:-1;;;7996:18:1;;;7989:52;8058:18;;38432:59:0::1;7736:346:1::0;38432:59:0::1;38498:14;:27:::0;;-1:-1:-1;;;;;;38498:27:0::1;-1:-1:-1::0;;;;;38498:27:0;;;::::1;::::0;;;::::1;::::0;;38360:171::o;36924:103::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;36985:8:::1;:15:::0;;;37007:14:::1;:12;:14::i;10456:240::-:0;3999:10;10544:4;10625:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;10625:27:0;;;;;;;;;;10544:4;;3999:10;10600:66;;3999:10;;10625:27;;:40;;10655:10;;10625:40;:::i;:::-;10600:8;:66::i;18480:103::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;18545:30:::1;18572:1;18545:18;:30::i;:::-;18480:103::o:0;35800:138::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35886:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;35886:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35800:138::o;37435:107::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37508:18:::1;:28:::0;;-1:-1:-1;;;;;;37508:28:0::1;-1:-1:-1::0;;;;;37508:28:0;;;::::1;::::0;;;::::1;::::0;;37435:107::o;29680:664::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;27350:4:::1;29755:8;:31;;;;29747:66;;;::::0;-1:-1:-1;;;29747:66:0;;8422:2:1;29747:66:0::1;::::0;::::1;8404:21:1::0;8461:2;8441:18;;;8434:30;-1:-1:-1;;;8480:18:1;;;8473:52;8542:18;;29747:66:0::1;8220:346:1::0;29747:66:0::1;29828:10;::::0;:15;29820:44:::1;;;::::0;-1:-1:-1;;;29820:44:0;;8773:2:1;29820:44:0::1;::::0;::::1;8755:21:1::0;8812:2;8792:18;;;8785:30;-1:-1:-1;;;8831:18:1;;;8824:46;8887:18;;29820:44:0::1;8571:340:1::0;29820:44:0::1;29879:13;::::0;::::1;::::0;;:30:::1;;;29908:1;29896:9;:13;29879:30;29871:66;;;::::0;-1:-1:-1;;;29871:66:0;;9118:2:1;29871:66:0::1;::::0;::::1;9100:21:1::0;9157:2;9137:18;;;9130:30;9196:25;9176:18;;;9169:53;9239:18;;29871:66:0::1;8916:347:1::0;29871:66:0::1;29944:9;:16:::0;;-1:-1:-1;;;;29944:16:0::1;-1:-1:-1::0;;;29944:16:0::1;::::0;;;27350:4:::1;29990:24;::::0;::::1;:13;7828:12:::0;;;7740:108;29990:13:::1;:24;;;;:::i;:::-;29989:48;;;;:::i;:::-;29969:68;;30044:17;30080:9;30064:13;7828:12:::0;;;7740:108;30064:13:::1;:25;;;;:::i;:::-;30044:45:::0;-1:-1:-1;30100:13:0;;30096:64:::1;;30124:28;30131:9;30142;30124:6;:28::i;:::-;30170:13:::0;;30166:80:::1;;30194:44;30212:4;30219:7;17902:6:::0;;-1:-1:-1;;;;;17902:6:0;;17829:87;30219:7:::1;30228:9;30194;:44::i;:::-;-1:-1:-1::0;;30265:15:0::1;30252:10;:28:::0;-1:-1:-1;30302:12:0::1;30287;:27:::0;30321:9:::1;:17:::0;;-1:-1:-1;;;;30321:17:0::1;::::0;;29680:664::o;38703:227::-;38767:42;3999:10;38751:58;38743:67;;;;;;38874:50;;38846:21;;3999:10;;38874:50;;;;;38846:21;;38874:50;;;;38846:21;3999:10;38874:50;;;;;;;;;;;;;;;;;;;6839:104;6895:13;6928:7;6921:14;;;;;:::i;11199:438::-;3999:10;11292:4;11375:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;11375:27:0;;;;;;;;;;11292:4;;3999:10;11421:35;;;;11413:85;;;;-1:-1:-1;;;11413:85:0;;9600:2:1;11413:85:0;;;9582:21:1;9639:2;9619:18;;;9612:30;9678:34;9658:18;;;9651:62;-1:-1:-1;;;9729:18:1;;;9722:35;9774:19;;11413:85:0;9398:401:1;11413:85:0;11534:60;11543:5;11550:7;11578:15;11559:16;:34;11534:8;:60::i;8244:193::-;8323:4;3999:10;8379:28;3999:10;8396:2;8400:6;8379:9;:28::i;37336:93::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37402:11:::1;:21:::0;;-1:-1:-1;;;;;;37402:21:0::1;-1:-1:-1::0;;;;;37402:21:0;;;::::1;::::0;;;::::1;::::0;;37336:93::o;38253:101::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;38322:13:::1;:26:::0;;-1:-1:-1;;38322:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38253:101::o;36176:206::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;36295:4:::1;36289;36268:13;7828:12:::0;;;7740:108;36268:13:::1;:18;::::0;36284:2:::1;36268:18;:::i;:::-;:25;;;;:::i;:::-;36267:32;;;;:::i;:::-;36257:6;:42;;36249:91;;;::::0;-1:-1:-1;;;36249:91:0;;10006:2:1;36249:91:0::1;::::0;::::1;9988:21:1::0;10045:2;10025:18;;;10018:30;10084:34;10064:18;;;10057:62;-1:-1:-1;;;10135:18:1;;;10128:34;10179:19;;36249:91:0::1;9804:400:1::0;36249:91:0::1;36359:17;:6:::0;36369::::1;36359:17;:::i;:::-;36347:9;:29:::0;-1:-1:-1;36176:206:0:o;34711:280::-;17902:6;;-1:-1:-1;;;;;17902:6:0;34777:10;:21;;:38;;-1:-1:-1;34802:13:0;;;;34777:38;34761:103;;;;-1:-1:-1;;;34761:103:0;;10411:2:1;34761:103:0;;;10393:21:1;10450:2;10430:18;;;10423:30;10489:33;10469:18;;;10462:61;10540:18;;34761:103:0;10209:355:1;34761:103:0;34895:1;34879:13;;:17;34871:56;;;;-1:-1:-1;;;34871:56:0;;10771:2:1;34871:56:0;;;10753:21:1;10810:2;10790:18;;;10783:30;10849:28;10829:18;;;10822:56;10895:18;;34871:56:0;10569:350:1;34871:56:0;34934:27;34947:13;;34934:12;:27::i;:::-;34984:1;34968:13;:17;34711:280::o;37033:97::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37091:5:::1;:12:::0;;;37110:14:::1;:12;:14::i;37548:167::-:0;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37630:24:::1;37652:2;27350:4;37630:24;:::i;:::-;37621:5;:33;;37613:69;;;::::0;-1:-1:-1;;;37613:69:0;;11126:2:1;37613:69:0::1;::::0;::::1;11108:21:1::0;11165:2;11145:18;;;11138:30;11204:25;11184:18;;;11177:53;11247:18;;37613:69:0::1;10924:347:1::0;37613:69:0::1;37689:12;:20:::0;37548:167::o;37962:94::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;38027:12:::1;:23:::0;;-1:-1:-1;;38027:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37962:94::o;38062:185::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;27350:4:::1;38145:8;:31;;38137:68;;;::::0;-1:-1:-1;;;38137:68:0;;11478:2:1;38137:68:0::1;::::0;::::1;11460:21:1::0;11517:2;11497:18;;;11490:30;11556:26;11536:18;;;11529:54;11600:18;;38137:68:0::1;11276:348:1::0;38137:68:0::1;38212:18;:29:::0;38062:185::o;34997:223::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;35089:3:::1;35077:8;:15;;35069:65;;;::::0;-1:-1:-1;;;35069:65:0;;11831:2:1;35069:65:0::1;::::0;::::1;11813:21:1::0;11870:2;11850:18;;;11843:30;11909:34;11889:18;;;11882:62;-1:-1:-1;;;11960:18:1;;;11953:35;12005:19;;35069:65:0::1;11629:401:1::0;35069:65:0::1;35165:13;::::0;-1:-1:-1;;;;;35165:13:0::1;7985:7:::0;8012:18;;;;;;;;;;;35141:73:::1;::::0;27350:4:::1;::::0;35155:35:::1;::::0;35182:8;;35155:35:::1;:::i;:::-;35154:59;;;;:::i;:::-;35141:12;:73::i;37136:192::-:0;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;37233:7:::1;:18:::0;;;37258:8:::1;:20:::0;;;37287:5:::1;:14:::0;;;37308::::1;:12;:14::i;:::-;37136:192:::0;;;:::o;18738:201::-;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18827:22:0;::::1;18819:73;;;::::0;-1:-1:-1;;;18819:73:0;;12237:2:1;18819:73:0::1;::::0;::::1;12219:21:1::0;12276:2;12256:18;;;12249:30;12315:34;12295:18;;;12288:62;-1:-1:-1;;;12366:18:1;;;12359:36;12412:19;;18819:73:0::1;12035:402:1::0;18819:73:0::1;18903:28;18922:8;18903:18;:28::i;37721:143::-:0;17902:6;;-1:-1:-1;;;;;17902:6:0;3999:10;18049:23;18041:68;;;;-1:-1:-1;;;18041:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37821:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:37;;-1:-1:-1;;37821:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37721:143::o;14835:380::-;-1:-1:-1;;;;;14971:19:0;;14963:68;;;;-1:-1:-1;;;14963:68:0;;12644:2:1;14963:68:0;;;12626:21:1;12683:2;12663:18;;;12656:30;12722:34;12702:18;;;12695:62;-1:-1:-1;;;12773:18:1;;;12766:34;12817:19;;14963:68:0;12442:400:1;14963:68:0;-1:-1:-1;;;;;15050:21:0;;15042:68;;;;-1:-1:-1;;;15042:68:0;;13049:2:1;15042:68:0;;;13031:21:1;13088:2;13068:18;;;13061:30;13127:34;13107:18;;;13100:62;-1:-1:-1;;;13178:18:1;;;13171:32;13220:19;;15042:68:0;12847:398:1;15042:68:0;-1:-1:-1;;;;;15123:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15175:32;;160:25:1;;;15175:32:0;;133:18:1;15175:32:0;;;;;;;14835:380;;;:::o;15502:453::-;-1:-1:-1;;;;;8616:18:0;;;15637:24;8616:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;15704:37:0;;15700:248;;15786:6;15766:16;:26;;15758:68;;;;-1:-1:-1;;;15758:68:0;;13452:2:1;15758:68:0;;;13434:21:1;13491:2;13471:18;;;13464:30;13530:31;13510:18;;;13503:59;13579:18;;15758:68:0;13250:353:1;15758:68:0;15870:51;15879:5;15886:7;15914:6;15895:16;:25;15870:8;:51::i;:::-;15626:329;15502:453;;;:::o;30350:2091::-;30473:13;30499:7;17902:6;;-1:-1:-1;;;;;17902:6:0;;17829:87;30499:7;-1:-1:-1;;;;;30489:17:0;:6;-1:-1:-1;;;;;30489:17:0;;:41;;;-1:-1:-1;17902:6:0;;-1:-1:-1;;;;;30510:20:0;;;17902:6;;30510:20;30489:41;30586:4;30537:28;8012:18;;;;;;;;;;;30625:13;;30473:57;;-1:-1:-1;8012:18:0;-1:-1:-1;;;;;30615:23:0;;;30625:13;;30615:23;:71;;;;-1:-1:-1;30670:15:0;;-1:-1:-1;;;;;30649:37:0;;;30670:15;;30649:37;;30615:71;30721:13;;30601:85;;-1:-1:-1;;;;;;30708:26:0;;;30721:13;;30708:26;30693:12;30601:85;;30756:17;;;30766:7;30756:17;30741:32;;30786:7;:23;;;;-1:-1:-1;30797:12:0;;;;30786:23;30782:560;;;30840:9;;30822:15;;-1:-1:-1;;;30840:9:0;;;;;:55;;-1:-1:-1;;;;;;30853:42:0;;;;;;:31;:42;;;;;;;;30840:55;:98;;;-1:-1:-1;;;;;;30899:39:0;;;;;;:31;:39;;;;;;;;30840:98;30822:116;;30949:14;27350:4;30982:20;;30966:13;7828:12;;;7740:108;30966:13;:36;;;;:::i;:::-;:58;;;;:::i;:::-;30949:75;;31053:6;31043;:16;;:30;;;;31063:10;31043:30;31035:65;;;;-1:-1:-1;;;31035:65:0;;13810:2:1;31035:65:0;;;13792:21:1;13849:2;13829:18;;;13822:30;-1:-1:-1;;;13868:18:1;;;13861:52;13930:18;;31035:65:0;13608:346:1;31035:65:0;31115:6;31111:224;;;31138:18;27350:4;31175:9;;31159:13;7828:12;;;7740:108;31159:13;:25;;;;:::i;:::-;:47;;;;:::i;:::-;31138:68;;31266:6;31243:20;31253:9;-1:-1:-1;;;;;8012:18:0;7985:7;8012:18;;;;;;;;;;;;7911:127;31243:20;:29;;;;:::i;:::-;31229:10;:43;;:57;;;;31276:10;31229:57;31221:102;;;;-1:-1:-1;;;31221:102:0;;14161:2:1;31221:102:0;;;14143:21:1;;;14180:18;;;14173:30;14239:34;14219:18;;;14212:62;14291:18;;31221:102:0;13959:356:1;31221:102:0;31123:212;31111:224;30811:531;;30782:560;31354:6;31350:284;;;31391:12;;:16;;31406:1;31391:16;:::i;:::-;31375:12;:32;31371:83;;-1:-1:-1;;;;;31420:17:0;;;;;;:6;:17;;;;;:24;;-1:-1:-1;;31420:24:0;31440:4;31420:24;;;31371:83;31350:284;;;-1:-1:-1;;;;;31485:17:0;;;;;;:6;:17;;;;;;;;31484:18;31476:44;;;;-1:-1:-1;;;31476:44:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31538:14:0;;;;;;:6;:14;;;;;;;;31537:15;31529:41;;;;-1:-1:-1;;;31529:41:0;;;;;;;:::i;:::-;3999:10;31588:20;;;;:6;:20;;;;;;;;31587:21;31579:47;;;;-1:-1:-1;;;31579:47:0;;;;;;;:::i;:::-;31689:12;;31672:13;;-1:-1:-1;;;;;31672:13:0;31642:16;8012:18;;;;;;;;;;;31642:16;;27350:4;;31662:39;;;;:::i;:::-;31661:70;;;;:::i;:::-;31805:12;;31642:89;;-1:-1:-1;31754:32:0;;;;;31805:12;;:33;;;;-1:-1:-1;31829:9:0;;;;;;;31828:10;31805:33;:53;;;;;31850:8;31849:9;31805:53;:72;;;;;31869:8;31805:72;:98;;;;-1:-1:-1;31888:10:0;;:15;;31805:98;:132;;;;-1:-1:-1;31924:13:0;;-1:-1:-1;;;;;31914:23:0;;;31924:13;;31914:23;;31805:132;31793:184;;;31954:15;31960:8;31954:5;:15::i;:::-;31985:11;32019:10;;32033:1;32019:15;;:33;;;;;32045:7;32019:33;:54;;;;-1:-1:-1;32064:9:0;;;;32063:10;32019:54;:119;;;;-1:-1:-1;;;;;;32086:22:0;;;;;;:14;:22;;;;;;;;;:51;;-1:-1:-1;;;;;;32112:25:0;;;;;;:14;:25;;;;;;;;32086:51;32084:54;32019:119;32007:196;;;32161:34;32180:6;32188;32161:18;:34::i;:::-;32155:40;;32007:196;32211:48;32227:6;32235:9;32246:12;32255:3;32246:6;:12;:::i;:::-;32211:15;:48::i;:::-;32272:7;:24;;;;-1:-1:-1;32283:13:0;;;;32272:24;:51;;;;-1:-1:-1;;;;;;32300:23:0;;32318:4;32300:23;;32272:51;32268:168;;;32378:18;;27350:4;;32362:12;32371:3;32362:6;:12;:::i;:::-;32361:35;;;;:::i;:::-;32360:68;;;;:::i;:::-;32334:13;;:94;;;;;;;:::i;:::-;;;;-1:-1:-1;;32268:168:0;30466:1975;;;;;;;;30350:2091;;;:::o;36489:322::-;36562:5;;36551:8;;36541:7;;:18;;;;:::i;:::-;:26;;;;:::i;:::-;36529:9;:38;36632:3;36604:24;27350:4;36626:2;36604:24;:::i;:::-;36603:32;;;;:::i;:::-;36590:9;;:45;;36574:102;;;;-1:-1:-1;;;36574:102:0;;14864:2:1;36574:102:0;;;14846:21:1;14903:2;14883:18;;;14876:30;14942:25;14922:18;;;14915:53;14985:18;;36574:102:0;14662:347:1;36574:102:0;36755:3;36727:24;27350:4;36749:2;36727:24;:::i;:::-;36726:32;;;;:::i;:::-;36711:2;36699:9;;:14;;;;:::i;:::-;:59;;36683:122;;;;-1:-1:-1;;;36683:122:0;;15216:2:1;36683:122:0;;;15198:21:1;15255:2;15235:18;;;15228:30;15294:31;15274:18;;;15267:59;15343:18;;36683:122:0;15014:353:1;19099:191:0;19192:6;;;-1:-1:-1;;;;;19209:17:0;;;-1:-1:-1;;;;;;19209:17:0;;;;;;;19242:40;;19192:6;;;19209:17;19192:6;;19242:40;;19173:16;;19242:40;19162:128;19099:191;:::o;33907:349::-;34011:15;;33979:62;;33996:4;;-1:-1:-1;;;;;34011:15:0;34029:11;33979:8;:62::i;:::-;34048:15;;34170:11;;-1:-1:-1;;;;;34048:15:0;;;;:31;;34088:9;;34116:4;;34130:11;;34048:15;;;;34170:11;:25;:49;;34208:11;;-1:-1:-1;;;;;34208:11:0;34170:49;;;17902:6;;-1:-1:-1;;;;;17902:6:0;34198:7;34048:202;;;;;;-1:-1:-1;;;;;;34048:202:0;;;-1:-1:-1;;;;;15731:15:1;;;34048:202:0;;;15713:34:1;15763:18;;;15756:34;;;;15806:18;;;15799:34;;;;15849:18;;;15842:34;15913:15;;;15892:19;;;15885:44;34228:15:0;15945:19:1;;;15938:35;15647:19;;34048:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33907:349;;:::o;34262:443::-;34389:1;34379:7;:11;:63;;;;-1:-1:-1;34416:13:0;;-1:-1:-1;;;;;34416:13:0;7985:7;8012:18;;;;;;;;;;;34439:3;;34406:29;;34433:2;34406:29;:::i;:::-;34405:37;;;;:::i;:::-;34394:7;:48;;34379:63;34375:325;;;34457:14;;-1:-1:-1;;;;;34457:14:0;27400:6;34457:22;34453:160;;;34498:13;;34492:29;;-1:-1:-1;;;;;34498:13:0;34513:7;34492:5;:29::i;:::-;34453:160;;;34564:13;;34579:14;;34548:55;;-1:-1:-1;;;;;34564:13:0;;;;34579:14;34595:7;34548:15;:55::i;:::-;34658:13;;34681:11;;;-1:-1:-1;;;;;;34681:11:0;;;;-1:-1:-1;;;;;34658:13:0;;;;;;34681:9;;:11;;;;;34621:19;;34681:11;;;;;;;34621:19;34658:13;34681:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34444:256;34262:443;:::o;32718:967::-;28673:9;:16;;-1:-1:-1;;28673:16:0;;;;;32878:9:::1;::::0;32867:7:::1;::::0;32801:21:::1;::::0;28673:16;;32851:23:::1;::::0;:13;:23:::1;:::i;:::-;32850:37;;;;:::i;:::-;32829:58;;32894:23;32958:1;32946:9;;32937:5;;32921:13;:21;;;;:::i;:::-;32920:35;;;;:::i;:::-;:39;;;;:::i;:::-;32894:65:::0;-1:-1:-1;32966:20:0::1;32894:65:::0;32989:26:::1;33005:10:::0;32989:13;:26:::1;:::i;:::-;:44;;;;:::i;:::-;32966:67:::0;-1:-1:-1;33046:14:0;;33042:69:::1;;33071:32;33085:4;33092:10;33071:5;:32::i;:::-;33199:16;::::0;;33213:1:::1;33199:16:::0;;;;;::::1;::::0;;33175:21:::1;::::0;33199:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33199:16:0::1;33175:40;;33240:4;33222;33227:1;33222:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33222:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;33262:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;33262:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;33222:7;;33262:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33252:4;33257:1;33252:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33252:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;33325:15:::1;::::0;33293:63:::1;::::0;33310:4:::1;::::0;33325:15:::1;33343:12:::0;33293:8:::1;:63::i;:::-;33363:15;::::0;:163:::1;::::0;-1:-1:-1;;;33363:163:0;;-1:-1:-1;;;;;33363:15:0;;::::1;::::0;:66:::1;::::0;:163:::1;::::0;33438:12;;33363:15:::1;::::0;33469:4;;33490::::1;::::0;33504:15:::1;::::0;33363:163:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33535:20;33582:9;33558:21;:33;;;;:::i;:::-;33535:56:::0;-1:-1:-1;33602:16:0;;33598:82:::1;;33629:43;33642:12;33656:15;33629:12;:43::i;:::-;-1:-1:-1::0;;28704:9:0;:17;;-1:-1:-1;;28704:17:0;;;-1:-1:-1;;;;;32718:967:0:o;32447:265::-;32535:7;32554:11;27350:4;32578:9;;32569:6;:18;;;;:::i;:::-;32568:42;;;;:::i;:::-;32554:56;-1:-1:-1;32621:7:0;;32617:73;;32639:43;32655:6;32671:4;32678:3;32639:15;:43::i;:::-;32703:3;32447:265;-1:-1:-1;;;32447:265:0:o;12116:671::-;-1:-1:-1;;;;;12247:18:0;;12239:68;;;;-1:-1:-1;;;12239:68:0;;18002:2:1;12239:68:0;;;17984:21:1;18041:2;18021:18;;;18014:30;18080:34;18060:18;;;18053:62;-1:-1:-1;;;18131:18:1;;;18124:35;18176:19;;12239:68:0;17800:401:1;12239:68:0;-1:-1:-1;;;;;12326:16:0;;12318:64;;;;-1:-1:-1;;;12318:64:0;;18408:2:1;12318:64:0;;;18390:21:1;18447:2;18427:18;;;18420:30;18486:34;18466:18;;;18459:62;-1:-1:-1;;;18537:18:1;;;18530:33;18580:19;;12318:64:0;18206:399:1;12318:64:0;-1:-1:-1;;;;;12468:15:0;;12446:19;12468:15;;;;;;;;;;;12502:21;;;;12494:72;;;;-1:-1:-1;;;12494:72:0;;18812:2:1;12494:72:0;;;18794:21:1;18851:2;18831:18;;;18824:30;18890:34;18870:18;;;18863:62;-1:-1:-1;;;18941:18:1;;;18934:36;18987:19;;12494:72:0;18610:402:1;12494:72:0;-1:-1:-1;;;;;12602:15:0;;;:9;:15;;;;;;;;;;;12620:20;;;12602:38;;12662:13;;;;;;;;:23;;12634:6;;12602:9;12662:23;;12634:6;;12662:23;:::i;:::-;;;;;;;;12718:2;-1:-1:-1;;;;;12703:26:0;12712:4;-1:-1:-1;;;;;12703:26:0;;12722:6;12703:26;;;;160:25:1;;148:2;133:18;;14:177;12703:26:0;;;;;;;;12742:37;37136:192;13806:591;-1:-1:-1;;;;;13890:21:0;;13882:67;;;;-1:-1:-1;;;13882:67:0;;19219:2:1;13882:67:0;;;19201:21:1;19258:2;19238:18;;;19231:30;19297:34;19277:18;;;19270:62;-1:-1:-1;;;19348:18:1;;;19341:31;19389:19;;13882:67:0;19017:397:1;13882:67:0;-1:-1:-1;;;;;14049:18:0;;14024:22;14049:18;;;;;;;;;;;14086:24;;;;14078:71;;;;-1:-1:-1;;;14078:71:0;;19621:2:1;14078:71:0;;;19603:21:1;19660:2;19640:18;;;19633:30;19699:34;19679:18;;;19672:62;-1:-1:-1;;;19750:18:1;;;19743:32;19792:19;;14078:71:0;19419:398:1;14078:71:0;-1:-1:-1;;;;;14185:18:0;;:9;:18;;;;;;;;;;14206:23;;;14185:44;;14251:12;:22;;14223:6;;14185:9;14251:22;;14223:6;;14251:22;:::i;:::-;;;;-1:-1:-1;;14291:37:0;;160:25:1;;;14317:1:0;;-1:-1:-1;;;;;14291:37:0;;;;;148:2:1;133:18;14291:37:0;;;;;;;37136:192;;;:::o;33691:210::-;33772:13;33810:9;;33801:5;;33789:9;:17;;;;:::i;:::-;33788:31;;;;:::i;:::-;33772:47;-1:-1:-1;33830:18:0;;33826:70;;33859:29;33866:14;33882:5;33859:6;:29::i;196:160:1:-;261:20;;317:13;;310:21;300:32;;290:60;;346:1;343;336:12;290:60;196:160;;;:::o;361:180::-;417:6;470:2;458:9;449:7;445:23;441:32;438:52;;;486:1;483;476:12;438:52;509:26;525:9;509:26;:::i;546:131::-;-1:-1:-1;;;;;621:31:1;;611:42;;601:70;;667:1;664;657:12;682:247;741:6;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;849:9;836:23;868:31;893:5;868:31;:::i;1126:597::-;1238:4;1267:2;1296;1285:9;1278:21;1328:6;1322:13;1371:6;1366:2;1355:9;1351:18;1344:34;1396:1;1406:140;1420:6;1417:1;1414:13;1406:140;;;1515:14;;;1511:23;;1505:30;1481:17;;;1500:2;1477:26;1470:66;1435:10;;1406:140;;;1564:6;1561:1;1558:13;1555:91;;;1634:1;1629:2;1620:6;1609:9;1605:22;1601:31;1594:42;1555:91;-1:-1:-1;1707:2:1;1686:15;-1:-1:-1;;1682:29:1;1667:45;;;;1714:2;1663:54;;1126:597;-1:-1:-1;;;1126:597:1:o;1728:315::-;1796:6;1804;1857:2;1845:9;1836:7;1832:23;1828:32;1825:52;;;1873:1;1870;1863:12;1825:52;1912:9;1899:23;1931:31;1956:5;1931:31;:::i;:::-;1981:5;2033:2;2018:18;;;;2005:32;;-1:-1:-1;;;1728:315:1:o;2283:180::-;2342:6;2395:2;2383:9;2374:7;2370:23;2366:32;2363:52;;;2411:1;2408;2401:12;2363:52;-1:-1:-1;2434:23:1;;2283:180;-1:-1:-1;2283:180:1:o;2468:456::-;2545:6;2553;2561;2614:2;2602:9;2593:7;2589:23;2585:32;2582:52;;;2630:1;2627;2620:12;2582:52;2669:9;2656:23;2688:31;2713:5;2688:31;:::i;:::-;2738:5;-1:-1:-1;2795:2:1;2780:18;;2767:32;2808:33;2767:32;2808:33;:::i;:::-;2468:456;;2860:7;;-1:-1:-1;;;2914:2:1;2899:18;;;;2886:32;;2468:456::o;3326:315::-;3391:6;3399;3452:2;3440:9;3431:7;3427:23;3423:32;3420:52;;;3468:1;3465;3458:12;3420:52;3507:9;3494:23;3526:31;3551:5;3526:31;:::i;:::-;3576:5;-1:-1:-1;3600:35:1;3631:2;3616:18;;3600:35;:::i;:::-;3590:45;;3326:315;;;;;:::o;3646:272::-;3704:6;3757:2;3745:9;3736:7;3732:23;3728:32;3725:52;;;3773:1;3770;3763:12;3725:52;3812:9;3799:23;3862:6;3855:5;3851:18;3844:5;3841:29;3831:57;;3884:1;3881;3874:12;3923:388;3991:6;3999;4052:2;4040:9;4031:7;4027:23;4023:32;4020:52;;;4068:1;4065;4058:12;4020:52;4107:9;4094:23;4126:31;4151:5;4126:31;:::i;:::-;4176:5;-1:-1:-1;4233:2:1;4218:18;;4205:32;4246:33;4205:32;4246:33;:::i;:::-;4298:7;4288:17;;;3923:388;;;;;:::o;4316:316::-;4393:6;4401;4409;4462:2;4450:9;4441:7;4437:23;4433:32;4430:52;;;4478:1;4475;4468:12;4430:52;-1:-1:-1;;4501:23:1;;;4571:2;4556:18;;4543:32;;-1:-1:-1;4622:2:1;4607:18;;;4594:32;;4316:316;-1:-1:-1;4316:316:1:o;4637:356::-;4839:2;4821:21;;;4858:18;;;4851:30;4917:34;4912:2;4897:18;;4890:62;4984:2;4969:18;;4637:356::o;4998:380::-;5077:1;5073:12;;;;5120;;;5141:61;;5195:4;5187:6;5183:17;5173:27;;5141:61;5248:2;5240:6;5237:14;5217:18;5214:38;5211:161;;;5294:10;5289:3;5285:20;5282:1;5275:31;5329:4;5326:1;5319:15;5357:4;5354:1;5347:15;5211:161;;4998:380;;;:::o;6793:127::-;6854:10;6849:3;6845:20;6842:1;6835:31;6885:4;6882:1;6875:15;6909:4;6906:1;6899:15;6925:168;6965:7;7031:1;7027;7023:6;7019:14;7016:1;7013:21;7008:1;7001:9;6994:17;6990:45;6987:71;;;7038:18;;:::i;:::-;-1:-1:-1;7078:9:1;;6925:168::o;7098:217::-;7138:1;7164;7154:132;;7208:10;7203:3;7199:20;7196:1;7189:31;7243:4;7240:1;7233:15;7271:4;7268:1;7261:15;7154:132;-1:-1:-1;7300:9:1;;7098:217::o;8087:128::-;8127:3;8158:1;8154:6;8151:1;8148:13;8145:39;;;8164:18;;:::i;:::-;-1:-1:-1;8200:9:1;;8087:128::o;9268:125::-;9308:4;9336:1;9333;9330:8;9327:34;;;9341:18;;:::i;:::-;-1:-1:-1;9378:9:1;;9268:125::o;14320:337::-;14522:2;14504:21;;;14561:2;14541:18;;;14534:30;-1:-1:-1;;;14595:2:1;14580:18;;14573:43;14648:2;14633:18;;14320:337::o;15984:306::-;16072:6;16080;16088;16141:2;16129:9;16120:7;16116:23;16112:32;16109:52;;;16157:1;16154;16147:12;16109:52;16186:9;16180:16;16170:26;;16236:2;16225:9;16221:18;16215:25;16205:35;;16280:2;16269:9;16265:18;16259:25;16249:35;;15984:306;;;;;:::o;16427:127::-;16488:10;16483:3;16479:20;16476:1;16469:31;16519:4;16516:1;16509:15;16543:4;16540:1;16533:15;16559:251;16629:6;16682:2;16670:9;16661:7;16657:23;16653:32;16650:52;;;16698:1;16695;16688:12;16650:52;16730:9;16724:16;16749:31;16774:5;16749:31;:::i;16815:980::-;17077:4;17125:3;17114:9;17110:19;17156:6;17145:9;17138:25;17182:2;17220:6;17215:2;17204:9;17200:18;17193:34;17263:3;17258:2;17247:9;17243:18;17236:31;17287:6;17322;17316:13;17353:6;17345;17338:22;17391:3;17380:9;17376:19;17369:26;;17430:2;17422:6;17418:15;17404:29;;17451:1;17461:195;17475:6;17472:1;17469:13;17461:195;;;17540:13;;-1:-1:-1;;;;;17536:39:1;17524:52;;17631:15;;;;17596:12;;;;17572:1;17490:9;17461:195;;;-1:-1:-1;;;;;;;17712:32:1;;;;17707:2;17692:18;;17685:60;-1:-1:-1;;;17776:3:1;17761:19;17754:35;17673:3;16815:980;-1:-1:-1;;;16815:980:1:o
Swarm Source
ipfs://8342647ae0658198e48814f089a604d88cb017b5c3e83ab541f4a8e580b9dcee
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.