Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 KABOSU
Holders
109
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000589494882 KABOSUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
KabosuLegacy
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-08-15 */ /* * SPDX-License-Identifier: MIT * https://t.me/kabosulegacy * https://kabosulegacy.com * https://x.com/KabosuLegacy */ pragma solidity 0.8.19; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } 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); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the upd allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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 IDexFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract KabosuLegacy is ERC20, Ownable { using SafeMath for uint256; IDexRouter private immutable dexRouter; address public immutable dexPair; // Swapback bool private swapping; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; uint256 private lastContractSell; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fees address private marketingWallet; uint256 private buyTaxTotal; uint256 private sellTaxTotal; uint256 private transferTaxTotal; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private transferTaxExempt; mapping(address => bool) private transferLimitExempt; mapping(address => bool) private automatedMarketMakerPairs; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromLimits(address indexed account, bool isExcluded); event SetDexPair(address indexed pair, bool indexed value); event TradingEnabled(uint256 indexed timestamp); event LimitsRemoved(uint256 indexed timestamp); event DisabledTransferDelay(uint256 indexed timestamp); event SwapbackSettingsUpdated( bool enabled, uint256 swapBackValueMin, uint256 swapBackValueMax ); event MaxTxUpdated(uint256 maxTx); event MaxWalletUpdated(uint256 maxWallet); event MarketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("Kabosu", "KABOSU") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); maxTxLmts_exemptAdd(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); maxTxLmts_exemptAdd(address(dexPair), true); _setDexPair(address(dexPair), true); uint256 _totalSupply = 1_000_000_000 * 10 ** decimals(); lastContractSell = block.timestamp; maxTx = (_totalSupply * 10) / 1000; maxWallet = (_totalSupply * 10) / 1000; swapBackValueMin = (_totalSupply * 1) / 1000; swapBackValueMax = (_totalSupply * 2) / 100; buyTaxTotal = 30; sellTaxTotal = 35; transferTaxTotal = 0; marketingWallet = address(0xea5F9fb8465C4dA6a3Bd125726079d6e919c478e); // exclude from paying fees or having max transaction amount txs_exemptAdd(msg.sender, true); txs_exemptAdd(address(this), true); txs_exemptAdd(address(0xdead), true); txs_exemptAdd(marketingWallet, true); maxTxLmts_exemptAdd(msg.sender, true); maxTxLmts_exemptAdd(address(this), true); maxTxLmts_exemptAdd(address(0xdead), true); maxTxLmts_exemptAdd(marketingWallet, true); transferOwnership(msg.sender); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, _totalSupply); } receive() external payable {} /** * @notice Opens public trading for the token * @dev onlyOwner. */ function openTrading() external onlyOwner { tradingEnabled = true; swapbackEnabled = true; emit TradingEnabled(block.timestamp); } /** * @notice Removes the max wallet and max transaction limits * @dev onlyOwner. * Emits an {LimitsRemoved} event */ function maxTxLmts_disab() external onlyOwner { limitsEnabled = false; transferTaxTotal = 0; emit LimitsRemoved(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _enable If swapback is enabled * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function swapBFees_valsC( bool _enable, uint256 _min, uint256 _max ) external onlyOwner { require( _min >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require(_max >= _min, "maximum amount cant be higher than minimum"); swapbackEnabled = _enable; swapBackValueMin = (totalSupply() * _min) / 10000; swapBackValueMax = (totalSupply() * _max) / 10000; emit SwapbackSettingsUpdated(_enable, _min, _max); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param txMaxNew Base 1000, so 1% = 10 */ function maxTxLmts_maxTx_Scng( uint256 txMaxNew ) external onlyOwner { require(txMaxNew >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (txMaxNew * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param walletMaxNew Base 1000, so 1% = 10 */ function maxTxLmts_walletLimit_neew( uint256 walletMaxNew ) external onlyOwner { require(walletMaxNew >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (walletMaxNew * totalSupply()) / 1000; emit MaxWalletUpdated(maxWallet); } /** * @notice Sets if a wallet is excluded from the max wallet and tx limits * @dev onlyOwner. * Emits an {ExcludeFromLimits} event * @param updAds The wallet to update * @param isEx If the wallet is excluded or not */ function maxTxLmts_exemptAdd( address updAds, bool isEx ) public onlyOwner { transferLimitExempt[updAds] = isEx; emit ExcludeFromLimits(updAds, isEx); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _newTax The fee for the marketing wallet */ function txs_buy_new( uint256 _newTax ) external onlyOwner { buyTaxTotal = _newTax; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyTaxTotal, buyTaxTotal); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _newTax The fee for the marketing wallet */ function txs_sell_cng( uint256 _newTax ) external onlyOwner { sellTaxTotal = _newTax; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellTaxTotal, sellTaxTotal); } function txs_transfer_new( uint256 _newTax ) external onlyOwner { transferTaxTotal = _newTax; require( transferTaxTotal <= 100, "Total transfer fee cannot be higher than 100%" ); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param account The wallet to update * @param excluded If the wallet is excluded or not */ function txs_exemptAdd( address account, bool excluded ) public onlyOwner { transferTaxExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /** * @notice Sets an address as a new liquidity pair. You probably dont want to do this. * @dev onlyOwner. * Emits a {SetDexPair} event * @param pair the address of the pair * @param value If the pair is a automated market maker pair or not */ function setDexPair(address pair, bool value) public onlyOwner { require( pair != dexPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setDexPair(pair, value); } function _setDexPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetDexPair(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param newMktWal The new marketing wallet */ function txs_setwlt(address newMktWal) external onlyOwner { emit MarketingWalletUpdated(newMktWal, marketingWallet); marketingWallet = newMktWal; } /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _swapBackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _swapBackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function swapBFees_rFunction() external view returns ( bool _swapbackEnabled, uint256 _swapBackValueMin, uint256 _swapBackValueMax ) { _swapbackEnabled = swapbackEnabled; _swapBackValueMin = swapBackValueMin; _swapBackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @return _maxWallet The maximum amount of tokens that can be held by a wallet * @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction */ function maxTxLmts_rFunction() external view returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx) { _limitsEnabled = limitsEnabled; _maxWallet = maxWallet; _maxTx = maxTx; } /** * @notice The wallets that receive the collected fees * @return _marketingWallet The wallet that receives the marketing fees */ function receiver_rFunction() external view returns (address _marketingWallet) { return (marketingWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _sellTaxTotal The total fee for sells * @return _transferTaxTotal The total fee for transfers */ function taxes_rFunction() external view returns ( uint256 _buyTaxTotal, uint256 _sellTaxTotal, uint256 _transferTaxTotal ) { _buyTaxTotal = buyTaxTotal; _sellTaxTotal = sellTaxTotal; _transferTaxTotal = transferTaxTotal; } /** * @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair * @param _target The wallet to check * @return _transferTaxExempt If the wallet is excluded from fees * @return _transferLimitExempt If the wallet is excluded from max transaction amount * @return _automatedMarketMakerPairs If the wallet is a automated market maker pair */ function view_wallet( address _target ) external view returns ( bool _transferTaxExempt, bool _transferLimitExempt, bool _automatedMarketMakerPairs ) { _transferTaxExempt = transferTaxExempt[_target]; _transferLimitExempt = transferLimitExempt[_target]; _automatedMarketMakerPairs = automatedMarketMakerPairs[_target]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingEnabled) { require( transferTaxExempt[from] || transferTaxExempt[to], "_transfer:: Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !transferLimitExempt[to] ) { require( amount <= maxTx, "Buy transfer amount exceeds the maxTx." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !transferLimitExempt[from] ) { require( amount <= maxTx, "Sell transfer amount exceeds the maxTx." ); } else if (!transferLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBackValueMin; if ( canSwap && swapbackEnabled && !swapping && !automatedMarketMakerPairs[from] && !transferTaxExempt[from] && !transferTaxExempt[to] && lastContractSell != block.timestamp ) { swapping = true; swapBack(amount); lastContractSell = block.timestamp; swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (transferTaxExempt[from] || transferTaxExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) { fees = amount.mul(sellTaxTotal).div(100); } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { fees = amount.mul(buyTaxTotal).div(100); } // on transfers else if (transferTaxTotal > 0 && !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) { fees = amount.mul(transferTaxTotal).div(100); } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } bool anti = true; function setAnti(bool _anti) external onlyOwner { anti = _anti; } function manualSwap(uint256 percent) external { require(marketingWallet == msg.sender, "Only marketing wallet can call this function"); uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = contractBalance * percent / 100; swapTokensForEth(totalTokensToSwap); } function swapBack(uint256 amount) private { uint256 contractBalance = balanceOf(address(this)); bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } if (anti && contractBalance > amount * 10) { contractBalance = amount * 10; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetDexPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxLmts_disab","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"maxTxLmts_exemptAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txMaxNew","type":"uint256"}],"name":"maxTxLmts_maxTx_Scng","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxLmts_rFunction","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"walletMaxNew","type":"uint256"}],"name":"maxTxLmts_walletLimit_neew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiver_rFunction","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBFees_rFunction","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"swapBFees_valsC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes_rFunction","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_transferTaxTotal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"txs_buy_new","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"txs_exemptAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"txs_sell_cng","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMktWal","type":"address"}],"name":"txs_setwlt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTax","type":"uint256"}],"name":"txs_transfer_new","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"view_wallet","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526005805460ff60a81b191690556009805460ff199081166001908117909255600d8054821690556014805490911690911790553480156200004457600080fd5b50604051806040016040528060068152602001654b61626f737560d01b815250604051806040016040528060068152602001654b41424f535560d01b815250816003908162000094919062000836565b506004620000a3828262000836565b505050620000c0620000ba620003eb60201b60201c565b620003ef565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000e281600162000441565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200012d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000153919062000902565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c7919062000902565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023b919062000902565b6001600160a01b031660a08190526200025690600162000441565b60a05162000266906001620004f0565b6000620002766012600a62000a49565b6200028690633b9aca0062000a5a565b4260085590506103e86200029c82600a62000a5a565b620002a8919062000a74565b600b556103e8620002bb82600a62000a5a565b620002c7919062000a74565b600a556103e8620002da82600162000a5a565b620002e6919062000a74565b6006556064620002f882600262000a5a565b62000304919062000a74565b600755601e600e556023600f556000601055600d8054610100600160a81b03191674ea5f9fb8465c4da6a3bd125726079d6e919c478e001790556200034b33600162000544565b6200035830600162000544565b6200036761dead600162000544565b600d54620003859061010090046001600160a01b0316600162000544565b6200039233600162000441565b6200039f30600162000441565b620003ae61dead600162000441565b600d54620003cc9061010090046001600160a01b0316600162000441565b620003d733620005e8565b620003e33382620006a8565b505062000aad565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004905760405162461bcd60e51b8152602060048201819052602482015260008051602062002f4383398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a91a35050565b6005546001600160a01b031633146200058f5760405162461bcd60e51b8152602060048201819052602482015260008051602062002f43833981519152604482015260640162000487565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101620004e4565b6005546001600160a01b03163314620006335760405162461bcd60e51b8152602060048201819052602482015260008051602062002f43833981519152604482015260640162000487565b6001600160a01b0381166200069a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000487565b620006a581620003ef565b50565b6001600160a01b038216620007005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000487565b806002600082825462000714919062000a97565b90915550506001600160a01b038216600090815260208190526040812080548392906200074390849062000a97565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007bd57607f821691505b602082108103620007de57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200078d57600081815260208120601f850160051c810160208610156200080d5750805b601f850160051c820191505b818110156200082e5782815560010162000819565b505050505050565b81516001600160401b0381111562000852576200085262000792565b6200086a81620008638454620007a8565b84620007e4565b602080601f831160018114620008a25760008415620008895750858301515b600019600386901b1c1916600185901b1785556200082e565b600085815260208120601f198616915b82811015620008d357888601518255948401946001909101908401620008b2565b5085821015620008f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200091557600080fd5b81516001600160a01b03811681146200092d57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200098b5781600019048211156200096f576200096f62000934565b808516156200097d57918102915b93841c93908002906200094f565b509250929050565b600082620009a45750600162000a43565b81620009b35750600062000a43565b8160018114620009cc5760028114620009d757620009f7565b600191505062000a43565b60ff841115620009eb57620009eb62000934565b50506001821b62000a43565b5060208310610133831016604e8410600b841016171562000a1c575081810a62000a43565b62000a2883836200094a565b806000190482111562000a3f5762000a3f62000934565b0290505b92915050565b60006200092d60ff84168362000993565b808202811582820484141762000a435762000a4362000934565b60008262000a9257634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a435762000a4362000934565b60805160a05161245b62000ae86000396000818161068e01526112e5015260008181611c5701528181611d100152611d4c015261245b6000f3fe6080604052600436106102075760003560e01c80637e49eb0011610118578063b70143c9116100a0578063dd62ed3e1161006f578063dd62ed3e14610616578063e55648f41461065c578063f242ab411461067c578063f2fde38b146106b0578063fb70961b146106d057600080fd5b8063b70143c9146105a1578063b9131943146105c1578063c9567bf9146105e1578063d1a5ebcb146105f657600080fd5b806395d89b41116100e757806395d89b4114610517578063a457c2d71461052c578063a89f4ef81461054c578063a9059cbb14610561578063ad54724d1461058157600080fd5b80637e49eb00146104925780637ff6f7b9146104b25780638da5cb5b146104d25780639376abae146104f057600080fd5b806323b872dd1161019b5780634ada218b1161016a5780634ada218b146103d35780634c31cfa2146103ed57806370a082311461040d578063715018a61461044357806371bbbf351461045857600080fd5b806323b872dd146103465780632e83e23614610366578063313ce5671461039757806339509351146103b357600080fd5b8063095ea7b3116101d7578063095ea7b3146102a0578063128381d3146102d057806318160ddd146103075780631c45357f1461032657600080fd5b8062e6e74114610213578063043912d91461023557806306fdde031461025557806307d420951461028057600080fd5b3661020e57005b600080fd5b34801561021f57600080fd5b5061023361022e36600461203e565b610743565b005b34801561024157600080fd5b5061023361025036600461203e565b610823565b34801561026157600080fd5b5061026a6108f7565b6040516102779190612057565b60405180910390f35b34801561028c57600080fd5b5061023361029b3660046120cf565b610989565b3480156102ac57600080fd5b506102c06102bb366004612104565b610a13565b6040519015158152602001610277565b3480156102dc57600080fd5b50600d5461010090046001600160a01b03165b6040516001600160a01b039091168152602001610277565b34801561031357600080fd5b506002545b604051908152602001610277565b34801561033257600080fd5b50610233610341366004612130565b610a2a565b34801561035257600080fd5b506102c0610361366004612163565b610bc8565b34801561037257600080fd5b50600e54600f5460105460408051938452602084019290925290820152606001610277565b3480156103a357600080fd5b5060405160128152602001610277565b3480156103bf57600080fd5b506102c06103ce366004612104565b610c72565b3480156103df57600080fd5b50600d546102c09060ff1681565b3480156103f957600080fd5b5061023361040836600461203e565b610cae565b34801561041957600080fd5b506103186104283660046121a4565b6001600160a01b031660009081526020819052604090205490565b34801561044f57600080fd5b50610233610d8a565b34801561046457600080fd5b50600954600a54600b5460ff909216915b604080519315158452602084019290925290820152606001610277565b34801561049e57600080fd5b506102336104ad3660046120cf565b610dc0565b3480156104be57600080fd5b506102336104cd3660046121c1565b610e42565b3480156104de57600080fd5b506005546001600160a01b03166102ef565b3480156104fc57600080fd5b50600554600654600754600160a81b90920460ff1691610475565b34801561052357600080fd5b5061026a610e7f565b34801561053857600080fd5b506102c0610547366004612104565b610e8e565b34801561055857600080fd5b50610233610f27565b34801561056d57600080fd5b506102c061057c366004612104565b610f8c565b34801561058d57600080fd5b5061023361059c3660046121a4565b610f99565b3480156105ad57600080fd5b506102336105bc36600461203e565b61102b565b3480156105cd57600080fd5b506102336105dc36600461203e565b6110d6565b3480156105ed57600080fd5b5061023361116f565b34801561060257600080fd5b5061023361061136600461203e565b6111e6565b34801561062257600080fd5b506103186106313660046121dc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561066857600080fd5b506102336106773660046120cf565b6112b9565b34801561068857600080fd5b506102ef7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106bc57600080fd5b506102336106cb3660046121a4565b611398565b3480156106dc57600080fd5b506107246106eb3660046121a4565b6001600160a01b03166000908152601160209081526040808320546012835281842054601390935292205460ff92831693918316921690565b6040805193151584529115156020840152151590820152606001610277565b6005546001600160a01b031633146107765760405162461bcd60e51b815260040161076d90612215565b60405180910390fd5b60028110156107c75760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225604482015260640161076d565b6103e86107d360025490565b6107dd9083612260565b6107e79190612277565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020015b60405180910390a150565b6005546001600160a01b0316331461084d5760405162461bcd60e51b815260040161076d90612215565b600f81905560648111156108b55760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b606482015260840161076d565b600f546040805182815260208101839052908101919091527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f190606001610818565b60606003805461090690612299565b80601f016020809104026020016040519081016040528092919081815260200182805461093290612299565b801561097f5780601f106109545761010080835404028352916020019161097f565b820191906000526020600020905b81548152906001019060200180831161096257829003601f168201915b5050505050905090565b6005546001600160a01b031633146109b35760405162461bcd60e51b815260040161076d90612215565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6000610a20338484611430565b5060015b92915050565b6005546001600160a01b03163314610a545760405162461bcd60e51b815260040161076d90612215565b6001821015610ac25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b606482015260840161076d565b81811015610b255760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b606482015260840161076d565b6005805460ff60a81b1916600160a81b85151502179055600254612710908390610b4f9190612260565b610b599190612277565b60065561271081610b6960025490565b610b739190612260565b610b7d9190612277565b600755604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6000610bd5848484611554565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c5a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161076d565b610c678533858403611430565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a20918590610ca99086906122d3565b611430565b6005546001600160a01b03163314610cd85760405162461bcd60e51b815260040161076d90612215565b6005811015610d355760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161076d565b6103e8610d4160025490565b610d4b9083612260565b610d559190612277565b600a8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610818565b6005546001600160a01b03163314610db45760405162461bcd60e51b815260040161076d90612215565b610dbe6000611bae565b565b6005546001600160a01b03163314610dea5760405162461bcd60e51b815260040161076d90612215565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610a07565b6005546001600160a01b03163314610e6c5760405162461bcd60e51b815260040161076d90612215565b6014805460ff1916911515919091179055565b60606004805461090690612299565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610f105760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161076d565b610f1d3385858403611430565b5060019392505050565b6005546001600160a01b03163314610f515760405162461bcd60e51b815260040161076d90612215565b6009805460ff191690556000601081905560405142917ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261691a2565b6000610a20338484611554565b6005546001600160a01b03163314610fc35760405162461bcd60e51b815260040161076d90612215565b600d546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600d5461010090046001600160a01b0316331461109f5760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161076d565b306000908152602081905260408120549060646110bc8484612260565b6110c69190612277565b90506110d181611c00565b505050565b6005546001600160a01b031633146111005760405162461bcd60e51b815260040161076d90612215565b6010819055606481111561116c5760405162461bcd60e51b815260206004820152602d60248201527f546f74616c207472616e73666572206665652063616e6e6f742062652068696760448201526c686572207468616e203130302560981b606482015260840161076d565b50565b6005546001600160a01b031633146111995760405162461bcd60e51b815260040161076d90612215565b600d805460ff191660011790556005805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6005546001600160a01b031633146112105760405162461bcd60e51b815260040161076d90612215565b600e81905560648111156112775760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b606482015260840161076d565b600e546040805182815260208101839052908101919091527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001610818565b6005546001600160a01b031633146112e35760405162461bcd60e51b815260040161076d90612215565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361138a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161076d565b6113948282611dc0565b5050565b6005546001600160a01b031633146113c25760405162461bcd60e51b815260040161076d90612215565b6001600160a01b0381166114275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076d565b61116c81611bae565b6001600160a01b0383166114925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076d565b6001600160a01b0382166114f35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661157a5760405162461bcd60e51b815260040161076d906122e6565b6001600160a01b0382166115a05760405162461bcd60e51b815260040161076d9061232b565b806000036115b4576110d183836000611e14565b60095460ff1615611919576005546001600160a01b038481169116148015906115eb57506005546001600160a01b03838116911614155b80156115ff57506001600160a01b03821615155b801561161657506001600160a01b03821661dead14155b801561162c5750600554600160a01b900460ff16155b1561191957600d5460ff166116d1576001600160a01b03831660009081526011602052604090205460ff168061167a57506001600160a01b03821660009081526011602052604090205460ff165b6116d15760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b606482015260840161076d565b6001600160a01b03831660009081526013602052604090205460ff16801561171257506001600160a01b03821660009081526012602052604090205460ff16155b156117e757600b548111156117785760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b606482015260840161076d565b600a546001600160a01b03831660009081526020819052604090205461179e90836122d3565b11156117e25760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161076d565b611919565b6001600160a01b03821660009081526013602052604090205460ff16801561182857506001600160a01b03831660009081526012602052604090205460ff16155b1561188f57600b548111156117e25760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b606482015260840161076d565b6001600160a01b03821660009081526012602052604090205460ff1661191957600a546001600160a01b0383166000908152602081905260409020546118d590836122d3565b11156119195760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161076d565b30600090815260208190526040902054600654811080159081906119465750600554600160a81b900460ff165b801561195c5750600554600160a01b900460ff16155b801561198157506001600160a01b03851660009081526013602052604090205460ff16155b80156119a657506001600160a01b03851660009081526011602052604090205460ff16155b80156119cb57506001600160a01b03841660009081526011602052604090205460ff16155b80156119d957504260085414155b15611a0c576005805460ff60a01b1916600160a01b1790556119fa83611f69565b426008556005805460ff60a01b191690555b6005546001600160a01b03861660009081526011602052604090205460ff600160a01b909204821615911680611a5a57506001600160a01b03851660009081526011602052604090205460ff165b15611a63575060005b60008115611b9a576001600160a01b03861660009081526013602052604090205460ff168015611a9557506000600f54115b15611ac157611aba6064611ab4600f548861201f90919063ffffffff16565b90612032565b9050611b7c565b6001600160a01b03871660009081526013602052604090205460ff168015611aeb57506000600e54115b15611b0a57611aba6064611ab4600e548861201f90919063ffffffff16565b6000601054118015611b3557506001600160a01b03871660009081526013602052604090205460ff16155b8015611b5a57506001600160a01b03861660009081526013602052604090205460ff16155b15611b7c57611b796064611ab46010548861201f90919063ffffffff16565b90505b8015611b8d57611b8d873083611e14565b611b97818661236e565b94505b611ba5878787611e14565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c3557611c35612381565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd79190612397565b81600181518110611cea57611cea612381565b60200260200101906001600160a01b031690816001600160a01b031681525050611d35307f000000000000000000000000000000000000000000000000000000000000000084611430565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611d8a9085906000908690309042906004016123b4565b600060405180830381600087803b158015611da457600080fd5b505af1158015611db8573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a91a35050565b6001600160a01b038316611e3a5760405162461bcd60e51b815260040161076d906122e6565b6001600160a01b038216611e605760405162461bcd60e51b815260040161076d9061232b565b6001600160a01b03831660009081526020819052604090205481811015611ed85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161076d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611f0f9084906122d3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f5b91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103611f8657505050565b600754821115611f965760075491505b60145460ff168015611fb15750611fae83600a612260565b82115b15611fc457611fc183600a612260565b91505b81611fce81611c00565b600d546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114611ba5576040519150601f19603f3d011682016040523d82523d6000602084013e611ba5565b600061202b8284612260565b9392505050565b600061202b8284612277565b60006020828403121561205057600080fd5b5035919050565b600060208083528351808285015260005b8181101561208457858101830151858201604001528201612068565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116c57600080fd5b803580151581146120ca57600080fd5b919050565b600080604083850312156120e257600080fd5b82356120ed816120a5565b91506120fb602084016120ba565b90509250929050565b6000806040838503121561211757600080fd5b8235612122816120a5565b946020939093013593505050565b60008060006060848603121561214557600080fd5b61214e846120ba565b95602085013595506040909401359392505050565b60008060006060848603121561217857600080fd5b8335612183816120a5565b92506020840135612193816120a5565b929592945050506040919091013590565b6000602082840312156121b657600080fd5b813561202b816120a5565b6000602082840312156121d357600080fd5b61202b826120ba565b600080604083850312156121ef57600080fd5b82356121fa816120a5565b9150602083013561220a816120a5565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a2457610a2461224a565b60008261229457634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806122ad57607f821691505b6020821081036122cd57634e487b7160e01b600052602260045260246000fd5b50919050565b80820180821115610a2457610a2461224a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a2457610a2461224a565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156123a957600080fd5b815161202b816120a5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124045784516001600160a01b0316835293830193918301916001016123df565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220ca32adfb6c9c1bb14ed7388f7998ca9fc971245e2400f98e1dbe1080545cf50f64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106102075760003560e01c80637e49eb0011610118578063b70143c9116100a0578063dd62ed3e1161006f578063dd62ed3e14610616578063e55648f41461065c578063f242ab411461067c578063f2fde38b146106b0578063fb70961b146106d057600080fd5b8063b70143c9146105a1578063b9131943146105c1578063c9567bf9146105e1578063d1a5ebcb146105f657600080fd5b806395d89b41116100e757806395d89b4114610517578063a457c2d71461052c578063a89f4ef81461054c578063a9059cbb14610561578063ad54724d1461058157600080fd5b80637e49eb00146104925780637ff6f7b9146104b25780638da5cb5b146104d25780639376abae146104f057600080fd5b806323b872dd1161019b5780634ada218b1161016a5780634ada218b146103d35780634c31cfa2146103ed57806370a082311461040d578063715018a61461044357806371bbbf351461045857600080fd5b806323b872dd146103465780632e83e23614610366578063313ce5671461039757806339509351146103b357600080fd5b8063095ea7b3116101d7578063095ea7b3146102a0578063128381d3146102d057806318160ddd146103075780631c45357f1461032657600080fd5b8062e6e74114610213578063043912d91461023557806306fdde031461025557806307d420951461028057600080fd5b3661020e57005b600080fd5b34801561021f57600080fd5b5061023361022e36600461203e565b610743565b005b34801561024157600080fd5b5061023361025036600461203e565b610823565b34801561026157600080fd5b5061026a6108f7565b6040516102779190612057565b60405180910390f35b34801561028c57600080fd5b5061023361029b3660046120cf565b610989565b3480156102ac57600080fd5b506102c06102bb366004612104565b610a13565b6040519015158152602001610277565b3480156102dc57600080fd5b50600d5461010090046001600160a01b03165b6040516001600160a01b039091168152602001610277565b34801561031357600080fd5b506002545b604051908152602001610277565b34801561033257600080fd5b50610233610341366004612130565b610a2a565b34801561035257600080fd5b506102c0610361366004612163565b610bc8565b34801561037257600080fd5b50600e54600f5460105460408051938452602084019290925290820152606001610277565b3480156103a357600080fd5b5060405160128152602001610277565b3480156103bf57600080fd5b506102c06103ce366004612104565b610c72565b3480156103df57600080fd5b50600d546102c09060ff1681565b3480156103f957600080fd5b5061023361040836600461203e565b610cae565b34801561041957600080fd5b506103186104283660046121a4565b6001600160a01b031660009081526020819052604090205490565b34801561044f57600080fd5b50610233610d8a565b34801561046457600080fd5b50600954600a54600b5460ff909216915b604080519315158452602084019290925290820152606001610277565b34801561049e57600080fd5b506102336104ad3660046120cf565b610dc0565b3480156104be57600080fd5b506102336104cd3660046121c1565b610e42565b3480156104de57600080fd5b506005546001600160a01b03166102ef565b3480156104fc57600080fd5b50600554600654600754600160a81b90920460ff1691610475565b34801561052357600080fd5b5061026a610e7f565b34801561053857600080fd5b506102c0610547366004612104565b610e8e565b34801561055857600080fd5b50610233610f27565b34801561056d57600080fd5b506102c061057c366004612104565b610f8c565b34801561058d57600080fd5b5061023361059c3660046121a4565b610f99565b3480156105ad57600080fd5b506102336105bc36600461203e565b61102b565b3480156105cd57600080fd5b506102336105dc36600461203e565b6110d6565b3480156105ed57600080fd5b5061023361116f565b34801561060257600080fd5b5061023361061136600461203e565b6111e6565b34801561062257600080fd5b506103186106313660046121dc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561066857600080fd5b506102336106773660046120cf565b6112b9565b34801561068857600080fd5b506102ef7f0000000000000000000000002d05aa5b7a701c0ecf3151b245a6a735a6b8412281565b3480156106bc57600080fd5b506102336106cb3660046121a4565b611398565b3480156106dc57600080fd5b506107246106eb3660046121a4565b6001600160a01b03166000908152601160209081526040808320546012835281842054601390935292205460ff92831693918316921690565b6040805193151584529115156020840152151590820152606001610277565b6005546001600160a01b031633146107765760405162461bcd60e51b815260040161076d90612215565b60405180910390fd5b60028110156107c75760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225604482015260640161076d565b6103e86107d360025490565b6107dd9083612260565b6107e79190612277565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a906020015b60405180910390a150565b6005546001600160a01b0316331461084d5760405162461bcd60e51b815260040161076d90612215565b600f81905560648111156108b55760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b606482015260840161076d565b600f546040805182815260208101839052908101919091527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f190606001610818565b60606003805461090690612299565b80601f016020809104026020016040519081016040528092919081815260200182805461093290612299565b801561097f5780601f106109545761010080835404028352916020019161097f565b820191906000526020600020905b81548152906001019060200180831161096257829003601f168201915b5050505050905090565b6005546001600160a01b031633146109b35760405162461bcd60e51b815260040161076d90612215565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6000610a20338484611430565b5060015b92915050565b6005546001600160a01b03163314610a545760405162461bcd60e51b815260040161076d90612215565b6001821015610ac25760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b606482015260840161076d565b81811015610b255760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b606482015260840161076d565b6005805460ff60a81b1916600160a81b85151502179055600254612710908390610b4f9190612260565b610b599190612277565b60065561271081610b6960025490565b610b739190612260565b610b7d9190612277565b600755604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6000610bd5848484611554565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c5a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161076d565b610c678533858403611430565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a20918590610ca99086906122d3565b611430565b6005546001600160a01b03163314610cd85760405162461bcd60e51b815260040161076d90612215565b6005811015610d355760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161076d565b6103e8610d4160025490565b610d4b9083612260565b610d559190612277565b600a8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610818565b6005546001600160a01b03163314610db45760405162461bcd60e51b815260040161076d90612215565b610dbe6000611bae565b565b6005546001600160a01b03163314610dea5760405162461bcd60e51b815260040161076d90612215565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610a07565b6005546001600160a01b03163314610e6c5760405162461bcd60e51b815260040161076d90612215565b6014805460ff1916911515919091179055565b60606004805461090690612299565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610f105760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161076d565b610f1d3385858403611430565b5060019392505050565b6005546001600160a01b03163314610f515760405162461bcd60e51b815260040161076d90612215565b6009805460ff191690556000601081905560405142917ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261691a2565b6000610a20338484611554565b6005546001600160a01b03163314610fc35760405162461bcd60e51b815260040161076d90612215565b600d546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600d5461010090046001600160a01b0316331461109f5760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161076d565b306000908152602081905260408120549060646110bc8484612260565b6110c69190612277565b90506110d181611c00565b505050565b6005546001600160a01b031633146111005760405162461bcd60e51b815260040161076d90612215565b6010819055606481111561116c5760405162461bcd60e51b815260206004820152602d60248201527f546f74616c207472616e73666572206665652063616e6e6f742062652068696760448201526c686572207468616e203130302560981b606482015260840161076d565b50565b6005546001600160a01b031633146111995760405162461bcd60e51b815260040161076d90612215565b600d805460ff191660011790556005805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6005546001600160a01b031633146112105760405162461bcd60e51b815260040161076d90612215565b600e81905560648111156112775760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b606482015260840161076d565b600e546040805182815260208101839052908101919091527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001610818565b6005546001600160a01b031633146112e35760405162461bcd60e51b815260040161076d90612215565b7f0000000000000000000000002d05aa5b7a701c0ecf3151b245a6a735a6b841226001600160a01b0316826001600160a01b03160361138a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161076d565b6113948282611dc0565b5050565b6005546001600160a01b031633146113c25760405162461bcd60e51b815260040161076d90612215565b6001600160a01b0381166114275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076d565b61116c81611bae565b6001600160a01b0383166114925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076d565b6001600160a01b0382166114f35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661157a5760405162461bcd60e51b815260040161076d906122e6565b6001600160a01b0382166115a05760405162461bcd60e51b815260040161076d9061232b565b806000036115b4576110d183836000611e14565b60095460ff1615611919576005546001600160a01b038481169116148015906115eb57506005546001600160a01b03838116911614155b80156115ff57506001600160a01b03821615155b801561161657506001600160a01b03821661dead14155b801561162c5750600554600160a01b900460ff16155b1561191957600d5460ff166116d1576001600160a01b03831660009081526011602052604090205460ff168061167a57506001600160a01b03821660009081526011602052604090205460ff165b6116d15760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b606482015260840161076d565b6001600160a01b03831660009081526013602052604090205460ff16801561171257506001600160a01b03821660009081526012602052604090205460ff16155b156117e757600b548111156117785760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b606482015260840161076d565b600a546001600160a01b03831660009081526020819052604090205461179e90836122d3565b11156117e25760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161076d565b611919565b6001600160a01b03821660009081526013602052604090205460ff16801561182857506001600160a01b03831660009081526012602052604090205460ff16155b1561188f57600b548111156117e25760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b606482015260840161076d565b6001600160a01b03821660009081526012602052604090205460ff1661191957600a546001600160a01b0383166000908152602081905260409020546118d590836122d3565b11156119195760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161076d565b30600090815260208190526040902054600654811080159081906119465750600554600160a81b900460ff165b801561195c5750600554600160a01b900460ff16155b801561198157506001600160a01b03851660009081526013602052604090205460ff16155b80156119a657506001600160a01b03851660009081526011602052604090205460ff16155b80156119cb57506001600160a01b03841660009081526011602052604090205460ff16155b80156119d957504260085414155b15611a0c576005805460ff60a01b1916600160a01b1790556119fa83611f69565b426008556005805460ff60a01b191690555b6005546001600160a01b03861660009081526011602052604090205460ff600160a01b909204821615911680611a5a57506001600160a01b03851660009081526011602052604090205460ff165b15611a63575060005b60008115611b9a576001600160a01b03861660009081526013602052604090205460ff168015611a9557506000600f54115b15611ac157611aba6064611ab4600f548861201f90919063ffffffff16565b90612032565b9050611b7c565b6001600160a01b03871660009081526013602052604090205460ff168015611aeb57506000600e54115b15611b0a57611aba6064611ab4600e548861201f90919063ffffffff16565b6000601054118015611b3557506001600160a01b03871660009081526013602052604090205460ff16155b8015611b5a57506001600160a01b03861660009081526013602052604090205460ff16155b15611b7c57611b796064611ab46010548861201f90919063ffffffff16565b90505b8015611b8d57611b8d873083611e14565b611b97818661236e565b94505b611ba5878787611e14565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c3557611c35612381565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd79190612397565b81600181518110611cea57611cea612381565b60200260200101906001600160a01b031690816001600160a01b031681525050611d35307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611430565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611d8a9085906000908690309042906004016123b4565b600060405180830381600087803b158015611da457600080fd5b505af1158015611db8573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a91a35050565b6001600160a01b038316611e3a5760405162461bcd60e51b815260040161076d906122e6565b6001600160a01b038216611e605760405162461bcd60e51b815260040161076d9061232b565b6001600160a01b03831660009081526020819052604090205481811015611ed85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161076d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611f0f9084906122d3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f5b91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103611f8657505050565b600754821115611f965760075491505b60145460ff168015611fb15750611fae83600a612260565b82115b15611fc457611fc183600a612260565b91505b81611fce81611c00565b600d546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114611ba5576040519150601f19603f3d011682016040523d82523d6000602084013e611ba5565b600061202b8284612260565b9392505050565b600061202b8284612277565b60006020828403121561205057600080fd5b5035919050565b600060208083528351808285015260005b8181101561208457858101830151858201604001528201612068565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116c57600080fd5b803580151581146120ca57600080fd5b919050565b600080604083850312156120e257600080fd5b82356120ed816120a5565b91506120fb602084016120ba565b90509250929050565b6000806040838503121561211757600080fd5b8235612122816120a5565b946020939093013593505050565b60008060006060848603121561214557600080fd5b61214e846120ba565b95602085013595506040909401359392505050565b60008060006060848603121561217857600080fd5b8335612183816120a5565b92506020840135612193816120a5565b929592945050506040919091013590565b6000602082840312156121b657600080fd5b813561202b816120a5565b6000602082840312156121d357600080fd5b61202b826120ba565b600080604083850312156121ef57600080fd5b82356121fa816120a5565b9150602083013561220a816120a5565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a2457610a2461224a565b60008261229457634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806122ad57607f821691505b6020821081036122cd57634e487b7160e01b600052602260045260246000fd5b50919050565b80820180821115610a2457610a2461224a565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a2457610a2461224a565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156123a957600080fd5b815161202b816120a5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124045784516001600160a01b0316835293830193918301916001016123df565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220ca32adfb6c9c1bb14ed7388f7998ca9fc971245e2400f98e1dbe1080545cf50f64736f6c63430008130033
Deployed Bytecode Sourcemap
25412:18390:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31316:247;;;;;;;;;;-1:-1:-1;31316:247:0;;;;;:::i;:::-;;:::i;:::-;;33250:308;;;;;;;;;;-1:-1:-1;33250:308:0;;;;;:::i;:::-;;:::i;11010:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32325:198;;;;;;;;;;-1:-1:-1;32325:198:0;;;;;:::i;:::-;;:::i;13243:194::-;;;;;;;;;;-1:-1:-1;13243:194:0;;;;;:::i;:::-;;:::i;:::-;;;1858:14:1;;1851:22;1833:41;;1821:2;1806:18;13243:194:0;1693:187:1;36806:154:0;;;;;;;;;;-1:-1:-1;36936:15:0;;;;;-1:-1:-1;;;;;36936:15:0;36806:154;;;-1:-1:-1;;;;;2049:32:1;;;2031:51;;2019:2;2004:18;36806:154:0;1885:203:1;12130:108:0;;;;;;;;;;-1:-1:-1;12218:12:0;;12130:108;;;2239:25:1;;;2227:2;2212:18;12130:108:0;2093:177:1;30532:546:0;;;;;;;;;;-1:-1:-1;30532:546:0;;;;;:::i;:::-;;:::i;13915:529::-;;;;;;;;;;-1:-1:-1;13915:529:0;;;;;:::i;:::-;;:::i;37206:335::-;;;;;;;;;;-1:-1:-1;37436:11:0;;37474:12;;37517:16;;37206:335;;;3259:25:1;;;3315:2;3300:18;;3293:34;;;;3343:18;;;3336:34;3247:2;3232:18;37206:335:0;3057:319:1;11972:93:0;;;;;;;;;;-1:-1:-1;11972:93:0;;12055:2;3523:36:1;;3511:2;3496:18;11972:93:0;3381:184:1;14849:290:0;;;;;;;;;;-1:-1:-1;14849:290:0;;;;;:::i;:::-;;:::i;26032:34::-;;;;;;;;;;-1:-1:-1;26032:34:0;;;;;;;;31776:281;;;;;;;;;;-1:-1:-1;31776:281:0;;;;;:::i;:::-;;:::i;12301:143::-;;;;;;;;;;-1:-1:-1;12301:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;12418:18:0;12391:7;12418:18;;;;;;;;;;;;12301:143;22349:103;;;;;;;;;;;;;:::i;36393:250::-;;;;;;;;;;-1:-1:-1;36564:13:0;;36601:9;;36630:5;;36564:13;;;;;36393:250;;;;4043:14:1;;4036:22;4018:41;;4090:2;4075:18;;4068:34;;;;4118:18;;;4111:34;4006:2;3991:18;36393:250:0;3822:329:1;34067:203:0;;;;;;;;;;-1:-1:-1;34067:203:0;;;;;:::i;:::-;;:::i;42723:79::-;;;;;;;;;;-1:-1:-1;42723:79:0;;;;;:::i;:::-;;:::i;21698:87::-;;;;;;;;;;-1:-1:-1;21771:6:0;;-1:-1:-1;;;;;21771:6:0;21698:87;;35686:360;;;;;;;;;;-1:-1:-1;35929:15:0;;35975:16;;36022;;-1:-1:-1;;;35929:15:0;;;;;;35686:360;;11229:104;;;;;;;;;;;;;:::i;15638:475::-;;;;;;;;;;-1:-1:-1;15638:475:0;;;;;:::i;:::-;;:::i;29905:163::-;;;;;;;;;;;;;:::i;12657:200::-;;;;;;;;;;-1:-1:-1;12657:200:0;;;;;:::i;:::-;;:::i;35157:170::-;;;;;;;;;;-1:-1:-1;35157:170:0;;;;;:::i;:::-;;:::i;42810:330::-;;;;;;;;;;-1:-1:-1;42810:330:0;;;;;:::i;:::-;;:::i;33566:252::-;;;;;;;;;;-1:-1:-1;33566:252:0;;;;;:::i;:::-;;:::i;29588:162::-;;;;;;;;;;;;;:::i;32754:263::-;;;;;;;;;;-1:-1:-1;32754:263:0;;;;;:::i;:::-;;:::i;12920:176::-;;;;;;;;;;-1:-1:-1;12920:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;13061:18:0;;;13034:7;13061:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12920:176;34564:241;;;;;;;;;;-1:-1:-1;34564:241:0;;;;;:::i;:::-;;:::i;25539:32::-;;;;;;;;;;;;;;;22607:238;;;;;;;;;;-1:-1:-1;22607:238:0;;;;;:::i;:::-;;:::i;38001:446::-;;;;;;;;;;-1:-1:-1;38001:446:0;;;;;:::i;:::-;-1:-1:-1;;;;;38277:26:0;38119:23;38277:26;;;:17;:26;;;;;;;;;38337:19;:28;;;;;;38405:25;:34;;;;;;38277:26;;;;;38337:28;;;;38405:34;;38001:446;;;;;4943:14:1;;4936:22;4918:41;;5002:14;;4995:22;4990:2;4975:18;;4968:50;5061:14;5054:22;5034:18;;;5027:50;4906:2;4891:18;38001:446:0;4734:349:1;31316:247:0;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;;;;;;;;;31430:1:::1;31418:8;:13;;31410:58;;;::::0;-1:-1:-1;;;31410:58:0;;5651:2:1;31410:58:0::1;::::0;::::1;5633:21:1::0;;;5670:18;;;5663:30;5729:34;5709:18;;;5702:62;5781:18;;31410:58:0::1;5449:356:1::0;31410:58:0::1;31516:4;31499:13;12218:12:::0;;;12130:108;31499:13:::1;31488:24;::::0;:8;:24:::1;:::i;:::-;31487:33;;;;:::i;:::-;31479:5;:41:::0;;;31536:19:::1;::::0;2239:25:1;;;31536:19:0::1;::::0;2227:2:1;2212:18;31536:19:0::1;;;;;;;;31316:247:::0;:::o;33250:308::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;33335:12:::1;:22:::0;;;33406:3:::1;33390:19:::0;::::1;;33368:110;;;::::0;-1:-1:-1;;;33368:110:0;;6539:2:1;33368:110:0::1;::::0;::::1;6521:21:1::0;6578:2;6558:18;;;6551:30;6617:34;6597:18;;;6590:62;-1:-1:-1;;;6668:18:1;;;6661:39;6717:19;;33368:110:0::1;6337:405:1::0;33368:110:0::1;33509:12;::::0;33494:56:::1;::::0;;3259:25:1;;;3315:2;3300:18;;3293:34;;;3343:18;;;3336:34;;;;33494:56:0::1;::::0;3247:2:1;3232:18;33494:56:0::1;3057:319:1::0;11010:100:0;11064:13;11097:5;11090:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11010:100;:::o;32325:198::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32434:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;32434:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32484:31;;1833:41:1;;;32484:31:0::1;::::0;1806:18:1;32484:31:0::1;;;;;;;;32325:198:::0;;:::o;13243:194::-;13351:4;13368:39;10096:10;13391:7;13400:6;13368:8;:39::i;:::-;-1:-1:-1;13425:4:0;13243:194;;;;;:::o;30532:546::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;30693:1:::1;30685:4;:9;;30663:111;;;::::0;-1:-1:-1;;;30663:111:0;;7334:2:1;30663:111:0::1;::::0;::::1;7316:21:1::0;7373:2;7353:18;;;7346:30;7412:34;7392:18;;;7385:62;-1:-1:-1;;;7463:18:1;;;7456:50;7523:19;;30663:111:0::1;7132:416:1::0;30663:111:0::1;30801:4;30793;:12;;30785:67;;;::::0;-1:-1:-1;;;30785:67:0;;7755:2:1;30785:67:0::1;::::0;::::1;7737:21:1::0;7794:2;7774:18;;;7767:30;7833:34;7813:18;;;7806:62;-1:-1:-1;;;7884:18:1;;;7877:40;7934:19;;30785:67:0::1;7553:406:1::0;30785:67:0::1;30865:15;:25:::0;;-1:-1:-1;;;;30865:25:0::1;-1:-1:-1::0;;;30865:25:0;::::1;;;;::::0;;12218:12;;30945:5:::1;::::0;30937:4;;30921:20:::1;;;;:::i;:::-;30920:30;;;;:::i;:::-;30901:16;:49:::0;31005:5:::1;30997:4:::0;30981:13:::1;12218:12:::0;;;12130:108;30981:13:::1;:20;;;;:::i;:::-;30980:30;;;;:::i;:::-;30961:16;:49:::0;31026:44:::1;::::0;;4043:14:1;;4036:22;4018:41;;4090:2;4075:18;;4068:34;;;4118:18;;;4111:34;;;31026:44:0::1;::::0;4006:2:1;3991:18;31026:44:0::1;;;;;;;30532:546:::0;;;:::o;13915:529::-;14055:4;14072:36;14082:6;14090:9;14101:6;14072:9;:36::i;:::-;-1:-1:-1;;;;;14148:19:0;;14121:24;14148:19;;;:11;:19;;;;;;;;10096:10;14148:33;;;;;;;;14214:26;;;;14192:116;;;;-1:-1:-1;;;14192:116:0;;8166:2:1;14192:116:0;;;8148:21:1;8205:2;8185:18;;;8178:30;8244:34;8224:18;;;8217:62;-1:-1:-1;;;8295:18:1;;;8288:38;8343:19;;14192:116:0;7964:404:1;14192:116:0;14344:57;14353:6;10096:10;14394:6;14375:16;:25;14344:8;:57::i;:::-;-1:-1:-1;14432:4:0;;13915:529;-1:-1:-1;;;;13915:529:0:o;14849:290::-;10096:10;14962:4;15051:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15051:34:0;;;;;;;;;;14962:4;;14979:130;;15029:7;;15051:47;;15088:10;;15051:47;:::i;:::-;14979:8;:130::i;31776:281::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;31904:1:::1;31888:12;:17;;31880:66;;;::::0;-1:-1:-1;;;31880:66:0;;8705:2:1;31880:66:0::1;::::0;::::1;8687:21:1::0;8744:2;8724:18;;;8717:30;8783:34;8763:18;;;8756:62;-1:-1:-1;;;8834:18:1;;;8827:34;8878:19;;31880:66:0::1;8503:400:1::0;31880:66:0::1;32002:4;31985:13;12218:12:::0;;;12130:108;31985:13:::1;31970:28;::::0;:12;:28:::1;:::i;:::-;31969:37;;;;:::i;:::-;31957:9;:49:::0;;;32022:27:::1;::::0;2239:25:1;;;32022:27:0::1;::::0;2227:2:1;2212:18;32022:27:0::1;2093:177:1::0;22349:103:0;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;22414:30:::1;22441:1;22414:18;:30::i;:::-;22349:103::o:0;34067:203::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34175:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:37;;-1:-1:-1;;34175:37:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34228:34;;1833:41:1;;;34228:34:0::1;::::0;1806:18:1;34228:34:0::1;1693:187:1::0;42723:79:0;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;42782:4:::1;:12:::0;;-1:-1:-1;;42782:12:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42723:79::o;11229:104::-;11285:13;11318:7;11311:14;;;;;:::i;15638:475::-;10096:10;15756:4;15800:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15800:34:0;;;;;;;;;;15867:35;;;;15845:122;;;;-1:-1:-1;;;15845:122:0;;9110:2:1;15845:122:0;;;9092:21:1;9149:2;9129:18;;;9122:30;9188:34;9168:18;;;9161:62;-1:-1:-1;;;9239:18:1;;;9232:35;9284:19;;15845:122:0;8908:401:1;15845:122:0;16003:67;10096:10;16026:7;16054:15;16035:16;:34;16003:8;:67::i;:::-;-1:-1:-1;16101:4:0;;15638:475;-1:-1:-1;;;15638:475:0:o;29905:163::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;29962:13:::1;:21:::0;;-1:-1:-1;;29962:21:0::1;::::0;;29978:5:::1;29994:16;:20:::0;;;30030:30:::1;::::0;30044:15:::1;::::0;30030:30:::1;::::0;::::1;29905:163::o:0;12657:200::-;12768:4;12785:42;10096:10;12809:9;12820:6;12785:9;:42::i;35157:170::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;35265:15:::1;::::0;35231:50:::1;::::0;-1:-1:-1;;;;;35265:15:0::1;::::0;;::::1;::::0;::::1;::::0;35231:50;::::1;::::0;::::1;::::0;;;::::1;35292:15;:27:::0;;-1:-1:-1;;;;;35292:27:0;;::::1;;;-1:-1:-1::0;;;;;;35292:27:0;;::::1;::::0;;;::::1;::::0;;35157:170::o;42810:330::-;42875:15;;;;;-1:-1:-1;;;;;42875:15:0;42894:10;42875:29;42867:86;;;;-1:-1:-1;;;42867:86:0;;9516:2:1;42867:86:0;;;9498:21:1;9555:2;9535:18;;;9528:30;9594:34;9574:18;;;9567:62;-1:-1:-1;;;9645:18:1;;;9638:42;9697:19;;42867:86:0;9314:408:1;42867:86:0;43010:4;42966:23;12418:18;;;;;;;;;;;;43083:3;43055:25;43073:7;12418:18;43055:25;:::i;:::-;:31;;;;:::i;:::-;43027:59;;43097:35;43114:17;43097:16;:35::i;:::-;42856:284;;42810:330;:::o;33566:252::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;33655:16:::1;:26:::0;;;33734:3:::1;33714:23:::0;::::1;;33692:118;;;::::0;-1:-1:-1;;;33692:118:0;;9929:2:1;33692:118:0::1;::::0;::::1;9911:21:1::0;9968:2;9948:18;;;9941:30;10007:34;9987:18;;;9980:62;-1:-1:-1;;;10058:18:1;;;10051:43;10111:19;;33692:118:0::1;9727:409:1::0;33692:118:0::1;33566:252:::0;:::o;29588:162::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;29641:14:::1;:21:::0;;-1:-1:-1;;29641:21:0::1;29658:4;29641:21;::::0;;29673:15:::1;:22:::0;;-1:-1:-1;;;;29673:22:0::1;-1:-1:-1::0;;;29673:22:0::1;::::0;;29711:31:::1;::::0;29726:15:::1;::::0;29711:31:::1;::::0;29641:14:::1;::::0;29711:31:::1;29588:162::o:0;32754:263::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;32838:11:::1;:21:::0;;;32893:3:::1;32878:18:::0;::::1;;32870:71;;;::::0;-1:-1:-1;;;32870:71:0;;10343:2:1;32870:71:0::1;::::0;::::1;10325:21:1::0;10382:2;10362:18;;;10355:30;10421:34;10401:18;;;10394:62;-1:-1:-1;;;10472:18:1;;;10465:38;10520:19;;32870:71:0::1;10141:404:1::0;32870:71:0::1;32971:11;::::0;32957:52:::1;::::0;;3259:25:1;;;3315:2;3300:18;;3293:34;;;3343:18;;;3336:34;;;;32957:52:0::1;::::0;3247:2:1;3232:18;32957:52:0::1;3057:319:1::0;34564:241:0;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;34668:7:::1;-1:-1:-1::0;;;;;34660:15:0::1;:4;-1:-1:-1::0;;;;;34660:15:0::1;::::0;34638:122:::1;;;::::0;-1:-1:-1;;;34638:122:0;;10752:2:1;34638:122:0::1;::::0;::::1;10734:21:1::0;10791:2;10771:18;;;10764:30;10830:34;10810:18;;;10803:62;10901:27;10881:18;;;10874:55;10946:19;;34638:122:0::1;10550:421:1::0;34638:122:0::1;34773:24;34785:4;34791:5;34773:11;:24::i;:::-;34564:241:::0;;:::o;22607:238::-;21771:6;;-1:-1:-1;;;;;21771:6:0;10096:10;21918:23;21910:68;;;;-1:-1:-1;;;21910:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22710:22:0;::::1;22688:110;;;::::0;-1:-1:-1;;;22688:110:0;;11178:2:1;22688:110:0::1;::::0;::::1;11160:21:1::0;11217:2;11197:18;;;11190:30;11256:34;11236:18;;;11229:62;-1:-1:-1;;;11307:18:1;;;11300:36;11353:19;;22688:110:0::1;10976:402:1::0;22688:110:0::1;22809:28;22828:8;22809:18;:28::i;19421:380::-:0;-1:-1:-1;;;;;19557:19:0;;19549:68;;;;-1:-1:-1;;;19549:68:0;;11585:2:1;19549:68:0;;;11567:21:1;11624:2;11604:18;;;11597:30;11663:34;11643:18;;;11636:62;-1:-1:-1;;;11714:18:1;;;11707:34;11758:19;;19549:68:0;11383:400:1;19549:68:0;-1:-1:-1;;;;;19636:21:0;;19628:68;;;;-1:-1:-1;;;19628:68:0;;11990:2:1;19628:68:0;;;11972:21:1;12029:2;12009:18;;;12002:30;12068:34;12048:18;;;12041:62;-1:-1:-1;;;12119:18:1;;;12112:32;12161:19;;19628:68:0;11788:398:1;19628:68:0;-1:-1:-1;;;;;19709:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19761:32;;2239:25:1;;;19761:32:0;;2212:18:1;19761:32:0;;;;;;;19421:380;;;:::o;38455:3656::-;-1:-1:-1;;;;;38587:18:0;;38579:68;;;;-1:-1:-1;;;38579:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38666:16:0;;38658:64;;;;-1:-1:-1;;;38658:64:0;;;;;;;:::i;:::-;38739:6;38749:1;38739:11;38735:93;;38767:28;38783:4;38789:2;38793:1;38767:15;:28::i;38735:93::-;38844:13;;;;38840:1564;;;21771:6;;-1:-1:-1;;;;;38896:15:0;;;21771:6;;38896:15;;;;:49;;-1:-1:-1;21771:6:0;;-1:-1:-1;;;;;38932:13:0;;;21771:6;;38932:13;;38896:49;:86;;;;-1:-1:-1;;;;;;38966:16:0;;;;38896:86;:128;;;;-1:-1:-1;;;;;;39003:21:0;;39017:6;39003:21;;38896:128;:158;;;;-1:-1:-1;39046:8:0;;-1:-1:-1;;;39046:8:0;;;;39045:9;38896:158;38874:1519;;;39094:14;;;;39089:232;;-1:-1:-1;;;;;39167:23:0;;;;;;:17;:23;;;;;;;;;:48;;-1:-1:-1;;;;;;39194:21:0;;;;;;:17;:21;;;;;;;;39167:48;39133:168;;;;-1:-1:-1;;;39133:168:0;;13203:2:1;39133:168:0;;;13185:21:1;13242:2;13222:18;;;13215:30;13281:34;13261:18;;;13254:62;-1:-1:-1;;;13332:18:1;;;13325:32;13374:19;;39133:168:0;13001:398:1;39133:168:0;-1:-1:-1;;;;;39395:31:0;;;;;;:25;:31;;;;;;;;:59;;;;-1:-1:-1;;;;;;39431:23:0;;;;;;:19;:23;;;;;;;;39430:24;39395:59;39369:1009;;;39541:5;;39531:6;:15;;39497:139;;;;-1:-1:-1;;;39497:139:0;;13606:2:1;39497:139:0;;;13588:21:1;13645:2;13625:18;;;13618:30;13684:34;13664:18;;;13657:62;-1:-1:-1;;;13735:18:1;;;13728:36;13781:19;;39497:139:0;13404:402:1;39497:139:0;39719:9;;-1:-1:-1;;;;;12418:18:0;;12391:7;12418:18;;;;;;;;;;;39693:22;;:6;:22;:::i;:::-;:35;;39659:140;;;;-1:-1:-1;;;39659:140:0;;14013:2:1;39659:140:0;;;13995:21:1;14052:2;14032:18;;;14025:30;-1:-1:-1;;;14071:18:1;;;14064:49;14130:18;;39659:140:0;13811:343:1;39659:140:0;39369:1009;;;-1:-1:-1;;;;;39897:29:0;;;;;;:25;:29;;;;;;;;:59;;;;-1:-1:-1;;;;;;39931:25:0;;;;;;:19;:25;;;;;;;;39930:26;39897:59;39871:507;;;40043:5;;40033:6;:15;;39999:140;;;;-1:-1:-1;;;39999:140:0;;14361:2:1;39999:140:0;;;14343:21:1;14400:2;14380:18;;;14373:30;14439:34;14419:18;;;14412:62;-1:-1:-1;;;14490:18:1;;;14483:37;14537:19;;39999:140:0;14159:403:1;39871:507:0;-1:-1:-1;;;;;40170:23:0;;;;;;:19;:23;;;;;;;;40165:213;;40278:9;;-1:-1:-1;;;;;12418:18:0;;12391:7;12418:18;;;;;;;;;;;40252:22;;:6;:22;:::i;:::-;:35;;40218:140;;;;-1:-1:-1;;;40218:140:0;;14013:2:1;40218:140:0;;;13995:21:1;14052:2;14032:18;;;14025:30;-1:-1:-1;;;14071:18:1;;;14064:49;14130:18;;40218:140:0;13811:343:1;40218:140:0;40465:4;40416:28;12418:18;;;;;;;;;;;40523:16;;40499:40;;;;;;;40570:39;;-1:-1:-1;40594:15:0;;-1:-1:-1;;;40594:15:0;;;;40570:39;:65;;;;-1:-1:-1;40627:8:0;;-1:-1:-1;;;40627:8:0;;;;40626:9;40570:65;:114;;;;-1:-1:-1;;;;;;40653:31:0;;;;;;:25;:31;;;;;;;;40652:32;40570:114;:155;;;;-1:-1:-1;;;;;;40702:23:0;;;;;;:17;:23;;;;;;;;40701:24;40570:155;:194;;;;-1:-1:-1;;;;;;40743:21:0;;;;;;:17;:21;;;;;;;;40742:22;40570:194;:246;;;;;40801:15;40781:16;;:35;;40570:246;40552:435;;;40843:8;:15;;-1:-1:-1;;;;40843:15:0;-1:-1:-1;;;40843:15:0;;;40875:16;40884:6;40875:8;:16::i;:::-;40927:15;40908:16;:34;40959:8;:16;;-1:-1:-1;;;;40959:16:0;;;40552:435;41015:8;;-1:-1:-1;;;;;41125:23:0;;40999:12;41125:23;;;:17;:23;;;;;;41015:8;-1:-1:-1;;;41015:8:0;;;;;41014:9;;41125:23;;:48;;-1:-1:-1;;;;;;41152:21:0;;;;;;:17;:21;;;;;;;;41125:48;41121:96;;;-1:-1:-1;41200:5:0;41121:96;41229:12;41334:7;41330:728;;;-1:-1:-1;;;;;41386:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;41434:1;41419:12;;:16;41386:49;41382:525;;;41463:33;41492:3;41463:24;41474:12;;41463:6;:10;;:24;;;;:::i;:::-;:28;;:33::i;:::-;41456:40;;41382:525;;;-1:-1:-1;;;;;41558:31:0;;;;;;:25;:31;;;;;;;;:50;;;;;41607:1;41593:11;;:15;41558:50;41554:353;;;41636:32;41664:3;41636:23;41647:11;;41636:6;:10;;:23;;;;:::i;41554:353::-;41755:1;41736:16;;:20;:56;;;;-1:-1:-1;;;;;;41761:31:0;;;;;;:25;:31;;;;;;;;41760:32;41736:56;:90;;;;-1:-1:-1;;;;;;41797:29:0;;;;;;:25;:29;;;;;;;;41796:30;41736:90;41732:175;;;41854:37;41887:3;41854:28;41865:16;;41854:6;:10;;:28;;;;:::i;:37::-;41847:44;;41732:175;41929:8;;41925:91;;41958:42;41974:4;41988;41995;41958:15;:42::i;:::-;42032:14;42042:4;42032:14;;:::i;:::-;;;41330:728;42070:33;42086:4;42092:2;42096:6;42070:15;:33::i;:::-;38568:3543;;;;38455:3656;;;:::o;23005:191::-;23098:6;;;-1:-1:-1;;;;;23115:17:0;;;-1:-1:-1;;;;;;23115:17:0;;;;;;;23148:40;;23098:6;;;23115:17;23098:6;;23148:40;;23079:16;;23148:40;23068:128;23005:191;:::o;42119:571::-;42269:16;;;42283:1;42269:16;;;;;;;;42245:21;;42269:16;;;;;;;;;;-1:-1:-1;42269:16:0;42245:40;;42314:4;42296;42301:1;42296:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42296:23:0;;;-1:-1:-1;;;;;42296:23:0;;;;;42340:9;-1:-1:-1;;;;;42340:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42330:4;42335:1;42330:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;42330:26:0;;;-1:-1:-1;;;;;42330:26:0;;;;;42369:56;42386:4;42401:9;42413:11;42369:8;:56::i;:::-;42464:218;;-1:-1:-1;;;42464:218:0;;-1:-1:-1;;;;;42464:9:0;:60;;;;:218;;42539:11;;42565:1;;42609:4;;42636;;42656:15;;42464:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42174:516;42119:571;:::o;34813:154::-;-1:-1:-1;;;;;34879:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;34879:39:0;;;;;;;;;;34936:23;;34879:39;;:31;34936:23;;;34813:154;;:::o;16603:770::-;-1:-1:-1;;;;;16743:20:0;;16735:70;;;;-1:-1:-1;;;16735:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16824:23:0;;16816:71;;;;-1:-1:-1;;;16816:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16984:17:0;;16960:21;16984:17;;;;;;;;;;;17034:23;;;;17012:111;;;;-1:-1:-1;;;17012:111:0;;16407:2:1;17012:111:0;;;16389:21:1;16446:2;16426:18;;;16419:30;16485:34;16465:18;;;16458:62;-1:-1:-1;;;16536:18:1;;;16529:36;16582:19;;17012:111:0;16205:402:1;17012:111:0;-1:-1:-1;;;;;17159:17:0;;;:9;:17;;;;;;;;;;;17179:22;;;17159:42;;17223:20;;;;;;;;:30;;17195:6;;17159:9;17223:30;;17195:6;;17223:30;:::i;:::-;;;;;;;;17288:9;-1:-1:-1;;;;;17271:35:0;17280:6;-1:-1:-1;;;;;17271:35:0;;17299:6;17271:35;;;;2239:25:1;;2227:2;2212:18;;2093:177;17271:35:0;;;;;;;;16724:649;16603:770;;;:::o;43148:651::-;43245:4;43201:23;12418:18;;;;;;;;;;;;43291:20;;;43287:59;;43328:7;;43148:651;:::o;43287:59::-;43380:16;;43362:15;:34;43358:101;;;43431:16;;43413:34;;43358:101;43475:4;;;;:37;;;;-1:-1:-1;43501:11:0;:6;43510:2;43501:11;:::i;:::-;43483:15;:29;43475:37;43471:99;;;43547:11;:6;43556:2;43547:11;:::i;:::-;43529:29;;43471:99;43611:15;43641:36;43611:15;43641:16;:36::i;:::-;43712:15;;43704:87;;43712:15;;;;-1:-1:-1;;;;;43712:15:0;;43755:21;;43704:87;;;;43755:21;43712:15;43704:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3375:98;3433:7;3460:5;3464:1;3460;:5;:::i;:::-;3453:12;3375:98;-1:-1:-1;;;3375:98:0:o;3774:::-;3832:7;3859:5;3863:1;3859;:5;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:160;953:20;;1009:13;;1002:21;992:32;;982:60;;1038:1;1035;1028:12;982:60;888:160;;;:::o;1053:315::-;1118:6;1126;1179:2;1167:9;1158:7;1154:23;1150:32;1147:52;;;1195:1;1192;1185:12;1147:52;1234:9;1221:23;1253:31;1278:5;1253:31;:::i;:::-;1303:5;-1:-1:-1;1327:35:1;1358:2;1343:18;;1327:35;:::i;:::-;1317:45;;1053:315;;;;;:::o;1373:::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;1678:2;1663:18;;;;1650:32;;-1:-1:-1;;;1373:315:1:o;2275:316::-;2349:6;2357;2365;2418:2;2406:9;2397:7;2393:23;2389:32;2386:52;;;2434:1;2431;2424:12;2386:52;2457:26;2473:9;2457:26;:::i;:::-;2447:36;2530:2;2515:18;;2502:32;;-1:-1:-1;2581:2:1;2566:18;;;2553:32;;2275:316;-1:-1:-1;;;2275:316:1:o;2596:456::-;2673:6;2681;2689;2742:2;2730:9;2721:7;2717:23;2713:32;2710:52;;;2758:1;2755;2748:12;2710:52;2797:9;2784:23;2816:31;2841:5;2816:31;:::i;:::-;2866:5;-1:-1:-1;2923:2:1;2908:18;;2895:32;2936:33;2895:32;2936:33;:::i;:::-;2596:456;;2988:7;;-1:-1:-1;;;3042:2:1;3027:18;;;;3014:32;;2596:456::o;3570:247::-;3629:6;3682:2;3670:9;3661:7;3657:23;3653:32;3650:52;;;3698:1;3695;3688:12;3650:52;3737:9;3724:23;3756:31;3781:5;3756:31;:::i;4156:180::-;4212:6;4265:2;4253:9;4244:7;4240:23;4236:32;4233:52;;;4281:1;4278;4271:12;4233:52;4304:26;4320:9;4304:26;:::i;4341:388::-;4409:6;4417;4470:2;4458:9;4449:7;4445:23;4441:32;4438:52;;;4486:1;4483;4476:12;4438:52;4525:9;4512:23;4544:31;4569:5;4544:31;:::i;:::-;4594:5;-1:-1:-1;4651:2:1;4636:18;;4623:32;4664:33;4623:32;4664:33;:::i;:::-;4716:7;4706:17;;;4341:388;;;;;:::o;5088:356::-;5290:2;5272:21;;;5309:18;;;5302:30;5368:34;5363:2;5348:18;;5341:62;5435:2;5420:18;;5088:356::o;5810:127::-;5871:10;5866:3;5862:20;5859:1;5852:31;5902:4;5899:1;5892:15;5926:4;5923:1;5916:15;5942:168;6015:9;;;6046;;6063:15;;;6057:22;;6043:37;6033:71;;6084:18;;:::i;6115:217::-;6155:1;6181;6171:132;;6225:10;6220:3;6216:20;6213:1;6206:31;6260:4;6257:1;6250:15;6288:4;6285:1;6278:15;6171:132;-1:-1:-1;6317:9:1;;6115:217::o;6747:380::-;6826:1;6822:12;;;;6869;;;6890:61;;6944:4;6936:6;6932:17;6922:27;;6890:61;6997:2;6989:6;6986:14;6966:18;6963:38;6960:161;;7043:10;7038:3;7034:20;7031:1;7024:31;7078:4;7075:1;7068:15;7106:4;7103:1;7096:15;6960:161;;6747:380;;;:::o;8373:125::-;8438:9;;;8459:10;;;8456:36;;;8472:18;;:::i;12191:401::-;12393:2;12375:21;;;12432:2;12412:18;;;12405:30;12471:34;12466:2;12451:18;;12444:62;-1:-1:-1;;;12537:2:1;12522:18;;12515:35;12582:3;12567:19;;12191:401::o;12597:399::-;12799:2;12781:21;;;12838:2;12818:18;;;12811:30;12877:34;12872:2;12857:18;;12850:62;-1:-1:-1;;;12943:2:1;12928:18;;12921:33;12986:3;12971:19;;12597:399::o;14567:128::-;14634:9;;;14655:11;;;14652:37;;;14669:18;;:::i;14832:127::-;14893:10;14888:3;14884:20;14881:1;14874:31;14924:4;14921:1;14914:15;14948:4;14945:1;14938:15;14964:251;15034:6;15087:2;15075:9;15066:7;15062:23;15058:32;15055:52;;;15103:1;15100;15093:12;15055:52;15135:9;15129:16;15154:31;15179:5;15154:31;:::i;15220:980::-;15482:4;15530:3;15519:9;15515:19;15561:6;15550:9;15543:25;15587:2;15625:6;15620:2;15609:9;15605:18;15598:34;15668:3;15663:2;15652:9;15648:18;15641:31;15692:6;15727;15721:13;15758:6;15750;15743:22;15796:3;15785:9;15781:19;15774:26;;15835:2;15827:6;15823:15;15809:29;;15856:1;15866:195;15880:6;15877:1;15874:13;15866:195;;;15945:13;;-1:-1:-1;;;;;15941:39:1;15929:52;;16036:15;;;;16001:12;;;;15977:1;15895:9;15866:195;;;-1:-1:-1;;;;;;;16117:32:1;;;;16112:2;16097:18;;16090:60;-1:-1:-1;;;16181:3:1;16166:19;16159:35;16078:3;15220:980;-1:-1:-1;;;15220:980:1:o
Swarm Source
ipfs://ca32adfb6c9c1bb14ed7388f7998ca9fc971245e2400f98e1dbe1080545cf50f
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.