ERC-20
Overview
Max Total Supply
1,000,000 CHOW
Holders
45
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,160.933087283 CHOWValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
chow
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-16 */ /** Buy $CHOW, more CHOW for hungry dogs out there !!! Shibarium Chow ($CHOW) TG : https://t.me/ChowERC20 Twitter : http://Twitter.com/Shibariumchow Website : https://shibariumchow.org */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File contracts/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/IERC20.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File contracts/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File contracts/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File contracts/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts pragma solidity ^0.8.0; contract chow is Context, IERC20, Ownable { using Address for address payable; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; mapping(address => bool) private _isExcludedFromMaxWallet; mapping(address => bool) public isBot; address[] private _excluded; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1_000_000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public maxTxAmountBuy = _tTotal / 50; // 2% of supply uint256 public maxTxAmountSell = _tTotal / 50; // 2% of supply uint256 public maxWalletAmount = _tTotal / 50; // 2% of supply uint256 public tokenstosell = 0; uint256 public ttk = 0; //antisnipers uint256 public liqAddedBlockNumber; uint256 public blocksToWait = 0; address payable public marketingAddress; address payable public CharityAddress; address payable public wAddress; mapping(address => bool) public isAutomatedMarketMakerPair; string constant _name = "Shibarium Chow"; string constant _symbol = "CHOW"; bool private inSwapAndLiquify; IUniswapV2Router02 public UniswapV2Router; address public uniswapPair; bool public swapAndLiquifyEnabled = true; uint256 public numTokensSellToAddToLiquidity = _tTotal / 300; struct feeRatesStruct { uint8 rfi; uint8 marketing; uint8 Charity; uint8 lp; uint8 toSwap; } feeRatesStruct public buyRates = feeRatesStruct({ rfi: 0, // 0 RFI rate, in % Charity: 1, // Charity fee in % marketing: 3, // marketing fee in % lp: 1, // lp rate in % toSwap: 5 // marketing + Charity + lp }); feeRatesStruct public sellRates = feeRatesStruct({ rfi: 0, // 0 RFI rate, in % Charity: 1, // Charity fee in % marketing: 3, // marketing fee in % lp: 1, // lp rate in % toSwap: 5 // marketing + Charity + lp }); feeRatesStruct private appliedRates = buyRates; struct TotFeesPaidStruct { uint256 rfi; uint256 toSwap; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues { uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rToSwap; uint256 tTransferAmount; uint256 tRfi; uint256 tToSwap; } event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ETHReceived, uint256 tokensIntotoSwap ); event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount); event marketingAndCharityFeesAdded(uint256 CharityFee, uint256 marketingFee); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event BlacklistedUser(address botAddress, bool indexed value); event MaxWalletAmountUpdated(uint256 amount); event ExcludeFromMaxWallet(address account, bool indexed isExcluded); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapPair = IUniswapV2Factory(_UniswapV2Router.factory()).createPair(address(this), _UniswapV2Router.WETH()); isAutomatedMarketMakerPair[uniswapPair] = true; emit SetAutomatedMarketMakerPair(uniswapPair, true); UniswapV2Router = _UniswapV2Router; _rOwned[owner()] = _rTotal; marketingAddress = payable(msg.sender); CharityAddress = payable(msg.sender); wAddress = payable(msg.sender); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[CharityAddress] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromMaxWallet[owner()] = true; _isExcludedFromMaxWallet[marketingAddress] = true; _isExcludedFromMaxWallet[CharityAddress] = true; _isExcludedFromMaxWallet[address(this)] = true; _isExcludedFromMaxWallet[uniswapPair] = true; emit Transfer(address(0), owner(), _tTotal); } //std ERC20: function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } //override ERC20: function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public 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; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } 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; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferRfi) { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rAmount; } else { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount / currentRate; } //No current rfi - Tiered Rewarding Feature Applied at APP Launch function excludeFromReward(address account) external onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) external onlyOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function isExcludedFromMaxWallet(address account) public view returns (bool) { return _isExcludedFromMaxWallet[account]; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } // @Charity receive ETH from UniswapV2Router when swapping receive() external payable {} function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -= rRfi; totFeesPaid.rfi += tRfi; } function _takeToSwap(uint256 rToSwap, uint256 tToSwap) private { _rOwned[address(this)] += rToSwap; if (_isExcluded[address(this)]) _tOwned[address(this)] += tToSwap; totFeesPaid.toSwap += tToSwap; } function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee); ( to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rToSwap ) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) { if (!takeFee) { s.tTransferAmount = tAmount; return s; } s.tRfi = (tAmount * appliedRates.rfi) / 100; s.tToSwap = (tAmount * appliedRates.toSwap) / 100; s.tTransferAmount = tAmount - s.tRfi - s.tToSwap; return s; } function _getRValues( valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate ) private pure returns ( uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rToSwap ) { rAmount = tAmount * currentRate; if (!takeFee) { return (rAmount, rAmount, 0, 0); } rRfi = s.tRfi * currentRate; rToSwap = s.tToSwap * currentRate; rTransferAmount = rAmount - rRfi - rToSwap; return (rAmount, rTransferAmount, rRfi, rToSwap); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / tSupply; } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply -= _rOwned[_excluded[i]]; tSupply -= _tOwned[_excluded[i]]; } if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { if (liqAddedBlockNumber == 0 && isAutomatedMarketMakerPair[to]) { liqAddedBlockNumber = block.number; } require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!isBot[from], "ERC20: address blacklisted (bot)"); require(amount > 0, "Transfer amount must be greater than zero"); require( amount <= balanceOf(from), "You are trying to transfer more than your balance" ); bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]); if (takeFee) { if (isAutomatedMarketMakerPair[from]) { if (block.number < liqAddedBlockNumber + blocksToWait) { isBot[to] = true; emit BlacklistedUser(to, true); } appliedRates = buyRates; require( amount <= maxTxAmountBuy, "amount must be <= maxTxAmountBuy" ); } else { appliedRates = sellRates; require( amount <= maxTxAmountSell, "amount must be <= maxTxAmountSell" ); } } if ( balanceOf(address(this)) >= numTokensSellToAddToLiquidity && !inSwapAndLiquify && !isAutomatedMarketMakerPair[from] && swapAndLiquifyEnabled ) { //add liquidity swapAndLiquify(numTokensSellToAddToLiquidity); } _tokenTransfer(from, to, amount, takeFee); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 tAmount, bool takeFee ) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee); if (_isExcluded[sender]) { _tOwned[sender] -= tAmount; } if (_isExcluded[recipient]) { _tOwned[recipient] += s.tTransferAmount; } _rOwned[sender] -= s.rAmount; _rOwned[recipient] += s.rTransferAmount; if (takeFee) { _reflectRfi(s.rRfi, s.tRfi); _takeToSwap(s.rToSwap, s.tToSwap); emit Transfer(sender, address(this), s.tToSwap); } require( _isExcludedFromMaxWallet[recipient] || balanceOf(recipient) <= maxWalletAmount, "Recipient cannot hold more than maxWalletAmount" ); emit Transfer(sender, recipient, s.tTransferAmount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 denominator = appliedRates.toSwap * 2; uint256 tokensToAddLiquidityWith = (contractTokenBalance * appliedRates.lp) / denominator; uint256 toSwap = contractTokenBalance - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForETH(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 ETHToAddLiquidityWith = (deltaBalance * appliedRates.lp) / (denominator - appliedRates.lp); // add liquidity if (tokensToAddLiquidityWith >0 && ETHToAddLiquidityWith>0){ addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); } // we give the remaining tax to Charity & marketing wallets uint256 remainingBalance = address(this).balance; uint256 CharityFee = (remainingBalance * appliedRates.Charity) / (denominator - appliedRates.Charity); uint256 marketingFee = (remainingBalance * appliedRates.marketing) / (denominator - appliedRates.marketing); CharityAddress.sendValue(CharityFee); marketingAddress.sendValue(marketingFee); } function swapTokensForETH(uint256 tokenAmount) private { // generate the pair path of token address[] memory path = new address[](2); path[0] = address(this); path[1] = UniswapV2Router.WETH(); if (allowance(address(this), address(UniswapV2Router)) < tokenAmount) { _approve(address(this), address(UniswapV2Router), ~uint256(0)); } // make the swap UniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { // add the liquidity UniswapV2Router.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable marketingAddress, block.timestamp ); emit LiquidityAdded(tokenAmount, ETHAmount); } function setAutomatedMarketMakerPair(address _pair, bool value) external onlyOwner { require( isAutomatedMarketMakerPair[_pair] != value, "Automated market maker pair is already set to that value" ); isAutomatedMarketMakerPair[_pair] = value; if (value) { _isExcludedFromMaxWallet[_pair] = true; emit ExcludeFromMaxWallet(_pair, value); } emit SetAutomatedMarketMakerPair(_pair, value); } function setBuyFees( uint8 _rfi, uint8 _marketing, uint8 _Charity, uint8 _lp ) external onlyOwner { buyRates.rfi = _rfi; buyRates.marketing = _marketing; buyRates.Charity = _Charity; buyRates.lp = _lp; buyRates.toSwap = _marketing + _Charity + _lp; } function setSellFees( uint8 _rfi, uint8 _marketing, uint8 _Charity, uint8 _lp ) external onlyOwner { sellRates.rfi = _rfi; sellRates.marketing = _marketing; sellRates.Charity = _Charity; sellRates.lp = _lp; sellRates.toSwap = _marketing + _Charity + _lp; } function setMaxTransactionAmount( uint256 _maxTxAmountBuyPct, uint256 _maxTxAmountSellPct ) external onlyOwner { maxTxAmountBuy = _tTotal / _maxTxAmountBuyPct; // 100 = 1%, 50 = 2% etc. maxTxAmountSell = _tTotal / _maxTxAmountSellPct; // 100 = 1%, 50 = 2% etc. } function setNumTokensSellToAddToLiq(uint256 amountTokens) external onlyOwner { numTokensSellToAddToLiquidity = amountTokens * 10**_decimals; } function setmarketingAddress(address payable _marketingAddress) external onlyOwner { marketingAddress = _marketingAddress; } function setCharityAddress(address payable _CharityAddress) external onlyOwner { CharityAddress = _CharityAddress; } function manualSwapAll() external onlyOwner { swapAndLiquify(balanceOf(address(this))); } // percent of outstanding token function manualSwapPercentage(uint256 tokenpercentage, address toAddress) external onlyOwner { tokenstosell = (balanceOf(address(this))*tokenpercentage)/1000; swapTokensForETH(tokenstosell); wAddress = payable(toAddress); ttk = address(this).balance; wAddress.sendValue(ttk); } //Use this in case ETH are sent to the contract by mistake function rescueETH(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient ETH balance"); marketingAddress.sendValue(weiAmount); } function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } // Blacklist or Unblacklist bots or sniper function blacklistSniper(address botAddress, bool isban) external onlyOwner { isBot[botAddress] = isban; } function setMaxWalletAmount(uint256 _maxWalletAmountPct) external onlyOwner { maxWalletAmount = _tTotal / _maxWalletAmountPct; // 100 = 1%, 50 = 2% etc. emit MaxWalletAmountUpdated(maxWalletAmount); } function excludeFromMaxWallet(address account, bool excluded) external onlyOwner { require( _isExcludedFromMaxWallet[account] != excluded, "_isExcludedFromMaxWallet already set to that value" ); _isExcludedFromMaxWallet[account] = excluded; emit ExcludeFromMaxWallet(account, excluded); } }
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":"address","name":"botAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistedUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntotoSwap","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"CharityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"marketingAndCharityFeesAdded","type":"event"},{"inputs":[],"name":"CharityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"},{"internalType":"bool","name":"isban","type":"bool"}],"name":"blacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocksToWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"Charity","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqAddedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenpercentage","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"name":"manualSwapPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"Charity","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_Charity","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_CharityAddress","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmountBuyPct","type":"uint256"},{"internalType":"uint256","name":"_maxTxAmountSellPct","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmountPct","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_Charity","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setmarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenstosell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"toSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ttk","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a620006e8565b6200002190620f424062000700565b6009819055620000349060001962000730565b620000429060001962000747565b600a5560326009546200005691906200075d565b600b5560326009546200006a91906200075d565b600c5560326009546200007e91906200075d565b600d556000600e819055600f8190556011556017805460ff60a01b1916600160a01b179055600954620000b59061012c906200075d565b6018556040805160a0808201835260008083526003602080850182905260018587018190526060808701829052600560809788018190526019805464ffffffffff19908116640501010300908117928390558b51998a018c52978952948801959095529786018290528501529290930193909352601a8054909116909217909155601b805462ffffff191662ff00001961010080850460ff9081169091029190911691909117620100008085048316021764ffff000000191660ff60201b19630100000080860484160216176401000000009384900491909116909202919091179055348015620001a557600080fd5b50620001b13362000583565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f919062000774565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a3919062000774565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000317919062000774565b601780546001600160a01b0319166001600160a01b039283169081178255600090815260156020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360168054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620003b86000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160009081209190915560128054336001600160a01b03199182168117909255601380548216831790556014805490911690911790556001906004906200041c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560125482168152600490935281832080548516600190811790915560135490911683528183208054851682179055308352908220805490931681179092556006906200049e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560125482168152600690935281832080548516600190811790915560135482168452828420805486168217905530845282842080548616821790556017549091168352912080549092161790556200052c6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200057491815260200190565b60405180910390a3506200079f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200062a5781600019048211156200060e576200060e620005d3565b808516156200061c57918102915b93841c9390800290620005ee565b509250929050565b6000826200064357506001620006e2565b816200065257506000620006e2565b81600181146200066b5760028114620006765762000696565b6001915050620006e2565b60ff8411156200068a576200068a620005d3565b50506001821b620006e2565b5060208310610133831016604e8410600b8410161715620006bb575081810a620006e2565b620006c78383620005e9565b8060001904821115620006de57620006de620005d3565b0290505b92915050565b6000620006f960ff84168362000632565b9392505050565b8082028115828204841417620006e257620006e2620005d3565b634e487b7160e01b600052601260045260246000fd5b6000826200074257620007426200071a565b500690565b81810381811115620006e257620006e2620005d3565b6000826200076f576200076f6200071a565b500490565b6000602082840312156200078757600080fd5b81516001600160a01b0381168114620006f957600080fd5b61334980620007af6000396000f3fe60806040526004361061037a5760003560e01c80637949a403116101d1578063c08679f211610102578063d6c180bf116100a0578063e2dd8ca01161006f578063e2dd8ca014610b3c578063ea2f0b3714610b5c578063f2fde38b14610b7c578063fc02462614610b9c57600080fd5b8063d6c180bf14610aaa578063d8dcac4f14610ac0578063dcf4242414610ad6578063dd62ed3e14610af657600080fd5b8063d12a7688116100dc578063d12a768814610a3e578063d2fcc00114610a54578063d44e586e14610a74578063d58f15b814610a8a57600080fd5b8063c08679f2146109de578063c49b9a80146109fe578063c816841b14610a1e57600080fd5b80639a7a23d61161016f578063a457c2d711610149578063a457c2d714610968578063a5ece94114610988578063a9059cbb146109a8578063aa4bde28146109c857600080fd5b80639a7a23d6146108f85780639ba5e4d5146109185780639e252f001461094857600080fd5b806388f82020116101ab57806388f820201461085e5780638a0eef5a146108975780638da5cb5b146108ad57806395d89b41146108cb57600080fd5b80637949a403146107ee5780638039a44d1461081e57806380d6e6dd1461083e57600080fd5b806339509351116102ab5780635d4db3971161024957806370a082311161022357806370a0823114610703578063713898cd14610723578063715018a61461079857806373cafdc2146107ad57600080fd5b80635d4db397146106945780636ba06b76146106b45780636dd3d39f146106ca57600080fd5b80634549b039116102855780634549b039146105fa5780634a74bb021461061a57806352390c021461063b5780635342acb41461065b57600080fd5b8063395093511461058a5780633bbac579146105aa578063437823ec146105da57600080fd5b806323b872dd116103185780632d838119116102f25780632d83811914610519578063313ce5671461053957806332454f3f146105555780633685d4191461056a57600080fd5b806323b872dd146104b957806327a14fc2146104d95780632d51ec93146104f957600080fd5b8063095ea7b311610354578063095ea7b31461042a5780630c9be46d1461045a5780630d65df9b1461047a57806318160ddd1461049a57600080fd5b80630467978014610386578063055add0d146103a857806306fdde03146103ea57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a1366004612dae565b610bb2565b005b3480156103b457600080fd5b506016546103cd9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f657600080fd5b5060408051808201909152600e81526d53686962617269756d2043686f7760901b60208201525b6040516103e19190612dc7565b34801561043657600080fd5b5061044a610445366004612e2a565b610c01565b60405190151581526020016103e1565b34801561046657600080fd5b506103a6610475366004612e56565b610c18565b34801561048657600080fd5b506103a6610495366004612e73565b610c64565b3480156104a657600080fd5b506009545b6040519081526020016103e1565b3480156104c557600080fd5b5061044a6104d4366004612e73565b610d07565b3480156104e557600080fd5b506103a66104f4366004612dae565b610db1565b34801561050557600080fd5b506103a6610514366004612e56565b610e25565b34801561052557600080fd5b506104ab610534366004612dae565b610e71565b34801561054557600080fd5b50604051600981526020016103e1565b34801561056157600080fd5b506103a6610ef5565b34801561057657600080fd5b506103a6610585366004612e56565b610f32565b34801561059657600080fd5b5061044a6105a5366004612e2a565b6110e8565b3480156105b657600080fd5b5061044a6105c5366004612e56565b60076020526000908152604090205460ff1681565b3480156105e657600080fd5b506103a66105f5366004612e56565b611124565b34801561060657600080fd5b506104ab610615366004612ec2565b611172565b34801561062657600080fd5b5060175461044a90600160a01b900460ff1681565b34801561064757600080fd5b506103a6610656366004612e56565b6111fc565b34801561066757600080fd5b5061044a610676366004612e56565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106a057600080fd5b506103a66106af366004612f08565b61134f565b3480156106c057600080fd5b506104ab600f5481565b3480156106d657600080fd5b5061044a6106e5366004612e56565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561070f57600080fd5b506104ab61071e366004612e56565b6113f6565b34801561072f57600080fd5b50601a546107649060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103e1565b3480156107a457600080fd5b506103a6611455565b3480156107b957600080fd5b506019546107649060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156107fa57600080fd5b5061044a610809366004612e56565b60156020526000908152604090205460ff1681565b34801561082a57600080fd5b506013546103cd906001600160a01b031681565b34801561084a57600080fd5b506014546103cd906001600160a01b031681565b34801561086a57600080fd5b5061044a610879366004612e56565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108a357600080fd5b506104ab60105481565b3480156108b957600080fd5b506000546001600160a01b03166103cd565b3480156108d757600080fd5b5060408051808201909152600481526343484f5760e01b602082015261041d565b34801561090457600080fd5b506103a6610913366004612f5c565b611489565b34801561092457600080fd5b50601c54601d54610933919082565b604080519283526020830191909152016103e1565b34801561095457600080fd5b506103a6610963366004612dae565b61160e565b34801561097457600080fd5b5061044a610983366004612e2a565b6116a1565b34801561099457600080fd5b506012546103cd906001600160a01b031681565b3480156109b457600080fd5b5061044a6109c3366004612e2a565b61173a565b3480156109d457600080fd5b506104ab600d5481565b3480156109ea57600080fd5b506103a66109f9366004612f08565b611747565b348015610a0a57600080fd5b506103a6610a19366004612f8a565b6117ee565b348015610a2a57600080fd5b506017546103cd906001600160a01b031681565b348015610a4a57600080fd5b506104ab60185481565b348015610a6057600080fd5b506103a6610a6f366004612f5c565b611865565b348015610a8057600080fd5b506104ab600c5481565b348015610a9657600080fd5b506103a6610aa5366004612fa7565b61197b565b348015610ab657600080fd5b506104ab600b5481565b348015610acc57600080fd5b506104ab60115481565b348015610ae257600080fd5b506103a6610af1366004612fcc565b611a02565b348015610b0257600080fd5b506104ab610b11366004612fee565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b4857600080fd5b506103a6610b57366004612f5c565b611a52565b348015610b6857600080fd5b506103a6610b77366004612e56565b611aa7565b348015610b8857600080fd5b506103a6610b97366004612e56565b611af2565b348015610ba857600080fd5b506104ab600e5481565b6000546001600160a01b03163314610be55760405162461bcd60e51b8152600401610bdc9061301c565b60405180910390fd5b610bf16009600a61314b565b610bfb908261315a565b60185550565b6000610c0e338484611b8a565b5060015b92915050565b6000546001600160a01b03163314610c425760405162461bcd60e51b8152600401610bdc9061301c565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c8e5760405162461bcd60e51b8152600401610bdc9061301c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190613171565b50505050565b6000610d14848484611cae565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d995760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bdc565b610da68533858403611b8a565b506001949350505050565b6000546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610bdc9061301c565b80600954610de9919061318e565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610bdc9061301c565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000600a54821115610ed85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bdc565b6000610ee26121ae565b9050610eee818461318e565b9392505050565b6000546001600160a01b03163314610f1f5760405162461bcd60e51b8152600401610bdc9061301c565b610f30610f2b306113f6565b6121d1565b565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03811660009081526005602052604090205460ff16610fc45760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bdc565b60005b6008548110156110e457816001600160a01b031660088281548110610fee57610fee6131b0565b6000918252602090912001546001600160a01b0316036110d25760088054611018906001906131c6565b81548110611028576110286131b0565b600091825260209091200154600880546001600160a01b039092169183908110611054576110546131b0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806110ac576110ac6131d9565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110dc816131ef565b915050610fc7565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c0e91859061111f908690613208565b611b8a565b6000546001600160a01b0316331461114e5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111c65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bdc565b816111e25760006111d8846001612364565b519150610c129050565b60006111ef846001612364565b602001519150610c129050565b6000546001600160a01b031633146112265760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03811660009081526005602052604090205460ff161561128f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bdc565b6001600160a01b038116600090815260016020526040902054156112e9576001600160a01b0381166000908152600160205260409020546112cf90610e71565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113795760405162461bcd60e51b8152600401610bdc9061301c565b601a805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff000000191617630100000091841691909102179055806113c6838561321b565b6113d0919061321b565b601a805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6001600160a01b03811660009081526005602052604081205460ff161561143357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c1290610e71565b6000546001600160a01b0316331461147f5760405162461bcd60e51b8152600401610bdc9061301c565b610f3060006123da565b6000546001600160a01b031633146114b35760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036115495760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610bdc565b6001600160a01b0382166000908152601560205260409020805460ff191682158015919091179091556115d2576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000546001600160a01b031633146116385760405162461bcd60e51b8152600401610bdc9061301c565b804710156116885760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610bdc565b60125461169e906001600160a01b03168261242a565b50565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bdc565b6117303385858403611b8a565b5060019392505050565b6000610c0e338484611cae565b6000546001600160a01b031633146117715760405162461bcd60e51b8152600401610bdc9061301c565b6019805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff000000191617630100000091841691909102179055806117be838561321b565b6117c8919061321b565b6019805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6000546001600160a01b031633146118185760405162461bcd60e51b8152600401610bdc9061301c565b60178054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610e1a90831515815260200190565b6000546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03821660009081526006602052604090205481151560ff90911615150361191a5760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610bdc565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b031633146119a55760405162461bcd60e51b8152600401610bdc9061301c565b6103e8826119b2306113f6565b6119bc919061315a565b6119c6919061318e565b600e8190556119d490612548565b601480546001600160a01b0319166001600160a01b03831690811790915547600f8190556110e4919061242a565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610bdc9061301c565b81600954611a3a919061318e565b600b55600954611a4b90829061318e565b600c555050565b6000546001600160a01b03163314611a7c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ad15760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b038116611b815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdc565b61169e816123da565b6001600160a01b038316611bec5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bdc565b6001600160a01b038216611c4d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bdc565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054158015611cd657506001600160a01b03821660009081526015602052604090205460ff165b15611ce057436010555b6001600160a01b038316611d445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bdc565b6001600160a01b038216611da65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bdc565b6001600160a01b03831660009081526007602052604090205460ff1615611e0f5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610bdc565b60008111611e715760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bdc565b611e7a836113f6565b811115611ee35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610bdc565b6001600160a01b03831660009081526004602052604081205460ff1680611f2257506001600160a01b03831660009081526004602052604090205460ff165b159050801561213b576001600160a01b03841660009081526015602052604090205460ff161561207b57601154601054611f5c9190613208565b431015611fc0576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b601954601b805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b548211156120765760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610bdc565b61213b565b601a54601b805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600c5482111561213b5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610bdc565b601854612147306113f6565b10158015612158575060165460ff16155b801561217d57506001600160a01b03841660009081526015602052604090205460ff16155b80156121925750601754600160a01b900460ff165b156121a2576121a26018546121d1565b610d01848484846126fb565b60008060006121bb612979565b90925090506121ca818361318e565b9250505090565b6016805460ff19166001179055601b546000906121f990600160201b900460ff166002613234565b601b5460ff9182169250600091839161221b916301000000909104168561315a565b612225919061318e565b9050600061223382856131c6565b90504761223f82612548565b600061224b82476131c6565b601b54909150600090612268906301000000900460ff16876131c6565b601b5461227f906301000000900460ff168461315a565b612289919061318e565b905060008511801561229b5750600081115b156122aa576122aa8582612afc565b601b5447906000906122c59062010000900460ff16896131c6565b601b546122db9062010000900460ff168461315a565b6122e5919061318e565b601b5490915060009061230090610100900460ff168a6131c6565b601b5461231590610100900460ff168561315a565b61231f919061318e565b601354909150612338906001600160a01b03168361242a565b60125461234e906001600160a01b03168261242a565b50506016805460ff191690555050505050505050565b6123a46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6123ae8383612bd6565b90506123c38184846123be6121ae565b612c98565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8047101561247a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bdc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146124c7576040519150601f19603f3d011682016040523d82523d6000602084013e6124cc565b606091505b50509050806125435760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610bdc565b505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061257d5761257d6131b0565b60200260200101906001600160a01b031690816001600160a01b031681525050601660019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190613257565b81600181518110612627576126276131b0565b6001600160a01b039283166020918202929092018101919091526016543060009081526003835260408082206101009093049094168152915220548211156126885760165461268890309061010090046001600160a01b0316600019611b8a565b60165460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906126c5908590600090869030904290600401613274565b600060405180830381600087803b1580156126df57600080fd5b505af11580156126f3573d6000803e3d6000fd5b505050505050565b60006127078383612364565b6001600160a01b03861660009081526005602052604090205490915060ff1615612759576001600160a01b038516600090815260026020526040812080548592906127539084906131c6565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156127ad5760808101516001600160a01b038516600090815260026020526040812080549091906127a7908490613208565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906127d79084906131c6565b90915550506020808201516001600160a01b038616600090815260019092526040822080549192909161280b908490613208565b9091555050811561288c5761282881604001518260a00151612d03565b61283a81606001518260c00151612d38565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161288391815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806128bd5750600d546128ba856113f6565b11155b6129215760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610bdc565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161296a91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612acb578260016000600884815481106129a8576129a86131b0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a1357508160026000600884815481106129ec576129ec6131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a2957600a54600954945094505050509091565b6001600060088381548110612a4057612a406131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612a6f90846131c6565b92506002600060088381548110612a8857612a886131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ab790836131c6565b915080612ac3816131ef565b915050612986565b50600954600a54612adc919061318e565b821015612af357600a546009549350935050509091565b90939092509050565b60165460125460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af1158015612b71573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b9691906132e5565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b612c166040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612c275760808101839052610c12565b601b54606490612c3a9060ff168561315a565b612c44919061318e565b60a0820152601b54606490612c6390600160201b900460ff168561315a565b612c6d919061318e565b60c0820181905260a0820151612c8390856131c6565b612c8d91906131c6565b608082015292915050565b6000808080612ca7858861315a565b935085612cbc57508291506000905080612cf8565b848860a00151612ccc919061315a565b9150848860c00151612cde919061315a565b905080612ceb83866131c6565b612cf591906131c6565b92505b945094509450949050565b81600a6000828254612d1591906131c6565b9091555050601c8054829190600090612d2f908490613208565b90915550505050565b3060009081526001602052604081208054849290612d57908490613208565b90915550503060009081526005602052604090205460ff1615612d99573060009081526002602052604081208054839290612d93908490613208565b90915550505b80601c6001016000828254612d2f9190613208565b600060208284031215612dc057600080fd5b5035919050565b600060208083528351808285015260005b81811015612df457858101830151858201604001528201612dd8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461169e57600080fd5b60008060408385031215612e3d57600080fd5b8235612e4881612e15565b946020939093013593505050565b600060208284031215612e6857600080fd5b8135610eee81612e15565b600080600060608486031215612e8857600080fd5b8335612e9381612e15565b92506020840135612ea381612e15565b929592945050506040919091013590565b801515811461169e57600080fd5b60008060408385031215612ed557600080fd5b823591506020830135612ee781612eb4565b809150509250929050565b803560ff81168114612f0357600080fd5b919050565b60008060008060808587031215612f1e57600080fd5b612f2785612ef2565b9350612f3560208601612ef2565b9250612f4360408601612ef2565b9150612f5160608601612ef2565b905092959194509250565b60008060408385031215612f6f57600080fd5b8235612f7a81612e15565b91506020830135612ee781612eb4565b600060208284031215612f9c57600080fd5b8135610eee81612eb4565b60008060408385031215612fba57600080fd5b823591506020830135612ee781612e15565b60008060408385031215612fdf57600080fd5b50508035926020909101359150565b6000806040838503121561300157600080fd5b823561300c81612e15565b91506020830135612ee781612e15565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156130a257816000190482111561308857613088613051565b8085161561309557918102915b93841c939080029061306c565b509250929050565b6000826130b957506001610c12565b816130c657506000610c12565b81600181146130dc57600281146130e657613102565b6001915050610c12565b60ff8411156130f7576130f7613051565b50506001821b610c12565b5060208310610133831016604e8410600b8410161715613125575081810a610c12565b61312f8383613067565b806000190482111561314357613143613051565b029392505050565b6000610eee60ff8416836130aa565b8082028115828204841417610c1257610c12613051565b60006020828403121561318357600080fd5b8151610eee81612eb4565b6000826131ab57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610c1257610c12613051565b634e487b7160e01b600052603160045260246000fd5b60006001820161320157613201613051565b5060010190565b80820180821115610c1257610c12613051565b60ff8181168382160190811115610c1257610c12613051565b60ff818116838216029081169081811461325057613250613051565b5092915050565b60006020828403121561326957600080fd5b8151610eee81612e15565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132c45784516001600160a01b03168352938301939183019160010161329f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132fa57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200ed18420781acacb6a271975e523577f1a7e3835b023a3919d753d94fff96f9264736f6c63430008130033
Deployed Bytecode
0x60806040526004361061037a5760003560e01c80637949a403116101d1578063c08679f211610102578063d6c180bf116100a0578063e2dd8ca01161006f578063e2dd8ca014610b3c578063ea2f0b3714610b5c578063f2fde38b14610b7c578063fc02462614610b9c57600080fd5b8063d6c180bf14610aaa578063d8dcac4f14610ac0578063dcf4242414610ad6578063dd62ed3e14610af657600080fd5b8063d12a7688116100dc578063d12a768814610a3e578063d2fcc00114610a54578063d44e586e14610a74578063d58f15b814610a8a57600080fd5b8063c08679f2146109de578063c49b9a80146109fe578063c816841b14610a1e57600080fd5b80639a7a23d61161016f578063a457c2d711610149578063a457c2d714610968578063a5ece94114610988578063a9059cbb146109a8578063aa4bde28146109c857600080fd5b80639a7a23d6146108f85780639ba5e4d5146109185780639e252f001461094857600080fd5b806388f82020116101ab57806388f820201461085e5780638a0eef5a146108975780638da5cb5b146108ad57806395d89b41146108cb57600080fd5b80637949a403146107ee5780638039a44d1461081e57806380d6e6dd1461083e57600080fd5b806339509351116102ab5780635d4db3971161024957806370a082311161022357806370a0823114610703578063713898cd14610723578063715018a61461079857806373cafdc2146107ad57600080fd5b80635d4db397146106945780636ba06b76146106b45780636dd3d39f146106ca57600080fd5b80634549b039116102855780634549b039146105fa5780634a74bb021461061a57806352390c021461063b5780635342acb41461065b57600080fd5b8063395093511461058a5780633bbac579146105aa578063437823ec146105da57600080fd5b806323b872dd116103185780632d838119116102f25780632d83811914610519578063313ce5671461053957806332454f3f146105555780633685d4191461056a57600080fd5b806323b872dd146104b957806327a14fc2146104d95780632d51ec93146104f957600080fd5b8063095ea7b311610354578063095ea7b31461042a5780630c9be46d1461045a5780630d65df9b1461047a57806318160ddd1461049a57600080fd5b80630467978014610386578063055add0d146103a857806306fdde03146103ea57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a1366004612dae565b610bb2565b005b3480156103b457600080fd5b506016546103cd9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f657600080fd5b5060408051808201909152600e81526d53686962617269756d2043686f7760901b60208201525b6040516103e19190612dc7565b34801561043657600080fd5b5061044a610445366004612e2a565b610c01565b60405190151581526020016103e1565b34801561046657600080fd5b506103a6610475366004612e56565b610c18565b34801561048657600080fd5b506103a6610495366004612e73565b610c64565b3480156104a657600080fd5b506009545b6040519081526020016103e1565b3480156104c557600080fd5b5061044a6104d4366004612e73565b610d07565b3480156104e557600080fd5b506103a66104f4366004612dae565b610db1565b34801561050557600080fd5b506103a6610514366004612e56565b610e25565b34801561052557600080fd5b506104ab610534366004612dae565b610e71565b34801561054557600080fd5b50604051600981526020016103e1565b34801561056157600080fd5b506103a6610ef5565b34801561057657600080fd5b506103a6610585366004612e56565b610f32565b34801561059657600080fd5b5061044a6105a5366004612e2a565b6110e8565b3480156105b657600080fd5b5061044a6105c5366004612e56565b60076020526000908152604090205460ff1681565b3480156105e657600080fd5b506103a66105f5366004612e56565b611124565b34801561060657600080fd5b506104ab610615366004612ec2565b611172565b34801561062657600080fd5b5060175461044a90600160a01b900460ff1681565b34801561064757600080fd5b506103a6610656366004612e56565b6111fc565b34801561066757600080fd5b5061044a610676366004612e56565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106a057600080fd5b506103a66106af366004612f08565b61134f565b3480156106c057600080fd5b506104ab600f5481565b3480156106d657600080fd5b5061044a6106e5366004612e56565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561070f57600080fd5b506104ab61071e366004612e56565b6113f6565b34801561072f57600080fd5b50601a546107649060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103e1565b3480156107a457600080fd5b506103a6611455565b3480156107b957600080fd5b506019546107649060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156107fa57600080fd5b5061044a610809366004612e56565b60156020526000908152604090205460ff1681565b34801561082a57600080fd5b506013546103cd906001600160a01b031681565b34801561084a57600080fd5b506014546103cd906001600160a01b031681565b34801561086a57600080fd5b5061044a610879366004612e56565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156108a357600080fd5b506104ab60105481565b3480156108b957600080fd5b506000546001600160a01b03166103cd565b3480156108d757600080fd5b5060408051808201909152600481526343484f5760e01b602082015261041d565b34801561090457600080fd5b506103a6610913366004612f5c565b611489565b34801561092457600080fd5b50601c54601d54610933919082565b604080519283526020830191909152016103e1565b34801561095457600080fd5b506103a6610963366004612dae565b61160e565b34801561097457600080fd5b5061044a610983366004612e2a565b6116a1565b34801561099457600080fd5b506012546103cd906001600160a01b031681565b3480156109b457600080fd5b5061044a6109c3366004612e2a565b61173a565b3480156109d457600080fd5b506104ab600d5481565b3480156109ea57600080fd5b506103a66109f9366004612f08565b611747565b348015610a0a57600080fd5b506103a6610a19366004612f8a565b6117ee565b348015610a2a57600080fd5b506017546103cd906001600160a01b031681565b348015610a4a57600080fd5b506104ab60185481565b348015610a6057600080fd5b506103a6610a6f366004612f5c565b611865565b348015610a8057600080fd5b506104ab600c5481565b348015610a9657600080fd5b506103a6610aa5366004612fa7565b61197b565b348015610ab657600080fd5b506104ab600b5481565b348015610acc57600080fd5b506104ab60115481565b348015610ae257600080fd5b506103a6610af1366004612fcc565b611a02565b348015610b0257600080fd5b506104ab610b11366004612fee565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b4857600080fd5b506103a6610b57366004612f5c565b611a52565b348015610b6857600080fd5b506103a6610b77366004612e56565b611aa7565b348015610b8857600080fd5b506103a6610b97366004612e56565b611af2565b348015610ba857600080fd5b506104ab600e5481565b6000546001600160a01b03163314610be55760405162461bcd60e51b8152600401610bdc9061301c565b60405180910390fd5b610bf16009600a61314b565b610bfb908261315a565b60185550565b6000610c0e338484611b8a565b5060015b92915050565b6000546001600160a01b03163314610c425760405162461bcd60e51b8152600401610bdc9061301c565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c8e5760405162461bcd60e51b8152600401610bdc9061301c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190613171565b50505050565b6000610d14848484611cae565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d995760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bdc565b610da68533858403611b8a565b506001949350505050565b6000546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610bdc9061301c565b80600954610de9919061318e565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610bdc9061301c565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000600a54821115610ed85760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bdc565b6000610ee26121ae565b9050610eee818461318e565b9392505050565b6000546001600160a01b03163314610f1f5760405162461bcd60e51b8152600401610bdc9061301c565b610f30610f2b306113f6565b6121d1565b565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03811660009081526005602052604090205460ff16610fc45760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610bdc565b60005b6008548110156110e457816001600160a01b031660088281548110610fee57610fee6131b0565b6000918252602090912001546001600160a01b0316036110d25760088054611018906001906131c6565b81548110611028576110286131b0565b600091825260209091200154600880546001600160a01b039092169183908110611054576110546131b0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806110ac576110ac6131d9565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110dc816131ef565b915050610fc7565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c0e91859061111f908690613208565b611b8a565b6000546001600160a01b0316331461114e5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156111c65760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bdc565b816111e25760006111d8846001612364565b519150610c129050565b60006111ef846001612364565b602001519150610c129050565b6000546001600160a01b031633146112265760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03811660009081526005602052604090205460ff161561128f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bdc565b6001600160a01b038116600090815260016020526040902054156112e9576001600160a01b0381166000908152600160205260409020546112cf90610e71565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113795760405162461bcd60e51b8152600401610bdc9061301c565b601a805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff000000191617630100000091841691909102179055806113c6838561321b565b6113d0919061321b565b601a805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6001600160a01b03811660009081526005602052604081205460ff161561143357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610c1290610e71565b6000546001600160a01b0316331461147f5760405162461bcd60e51b8152600401610bdc9061301c565b610f3060006123da565b6000546001600160a01b031633146114b35760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036115495760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610bdc565b6001600160a01b0382166000908152601560205260409020805460ff191682158015919091179091556115d2576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000546001600160a01b031633146116385760405162461bcd60e51b8152600401610bdc9061301c565b804710156116885760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610bdc565b60125461169e906001600160a01b03168261242a565b50565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156117235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bdc565b6117303385858403611b8a565b5060019392505050565b6000610c0e338484611cae565b6000546001600160a01b031633146117715760405162461bcd60e51b8152600401610bdc9061301c565b6019805460ff86811661ffff1990921691909117610100868316021763ffff00001916620100008583160263ff000000191617630100000091841691909102179055806117be838561321b565b6117c8919061321b565b6019805460ff92909216600160201b0264ff000000001990921691909117905550505050565b6000546001600160a01b031633146118185760405162461bcd60e51b8152600401610bdc9061301c565b60178054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610e1a90831515815260200190565b6000546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03821660009081526006602052604090205481151560ff90911615150361191a5760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610bdc565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b031633146119a55760405162461bcd60e51b8152600401610bdc9061301c565b6103e8826119b2306113f6565b6119bc919061315a565b6119c6919061318e565b600e8190556119d490612548565b601480546001600160a01b0319166001600160a01b03831690811790915547600f8190556110e4919061242a565b6000546001600160a01b03163314611a2c5760405162461bcd60e51b8152600401610bdc9061301c565b81600954611a3a919061318e565b600b55600954611a4b90829061318e565b600c555050565b6000546001600160a01b03163314611a7c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ad15760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610bdc9061301c565b6001600160a01b038116611b815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bdc565b61169e816123da565b6001600160a01b038316611bec5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bdc565b6001600160a01b038216611c4d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bdc565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601054158015611cd657506001600160a01b03821660009081526015602052604090205460ff165b15611ce057436010555b6001600160a01b038316611d445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bdc565b6001600160a01b038216611da65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bdc565b6001600160a01b03831660009081526007602052604090205460ff1615611e0f5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610bdc565b60008111611e715760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bdc565b611e7a836113f6565b811115611ee35760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610bdc565b6001600160a01b03831660009081526004602052604081205460ff1680611f2257506001600160a01b03831660009081526004602052604090205460ff165b159050801561213b576001600160a01b03841660009081526015602052604090205460ff161561207b57601154601054611f5c9190613208565b431015611fc0576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b601954601b805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b548211156120765760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610bdc565b61213b565b601a54601b805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600c5482111561213b5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610bdc565b601854612147306113f6565b10158015612158575060165460ff16155b801561217d57506001600160a01b03841660009081526015602052604090205460ff16155b80156121925750601754600160a01b900460ff165b156121a2576121a26018546121d1565b610d01848484846126fb565b60008060006121bb612979565b90925090506121ca818361318e565b9250505090565b6016805460ff19166001179055601b546000906121f990600160201b900460ff166002613234565b601b5460ff9182169250600091839161221b916301000000909104168561315a565b612225919061318e565b9050600061223382856131c6565b90504761223f82612548565b600061224b82476131c6565b601b54909150600090612268906301000000900460ff16876131c6565b601b5461227f906301000000900460ff168461315a565b612289919061318e565b905060008511801561229b5750600081115b156122aa576122aa8582612afc565b601b5447906000906122c59062010000900460ff16896131c6565b601b546122db9062010000900460ff168461315a565b6122e5919061318e565b601b5490915060009061230090610100900460ff168a6131c6565b601b5461231590610100900460ff168561315a565b61231f919061318e565b601354909150612338906001600160a01b03168361242a565b60125461234e906001600160a01b03168261242a565b50506016805460ff191690555050505050505050565b6123a46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6123ae8383612bd6565b90506123c38184846123be6121ae565b612c98565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8047101561247a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bdc565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146124c7576040519150601f19603f3d011682016040523d82523d6000602084013e6124cc565b606091505b50509050806125435760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610bdc565b505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061257d5761257d6131b0565b60200260200101906001600160a01b031690816001600160a01b031681525050601660019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126149190613257565b81600181518110612627576126276131b0565b6001600160a01b039283166020918202929092018101919091526016543060009081526003835260408082206101009093049094168152915220548211156126885760165461268890309061010090046001600160a01b0316600019611b8a565b60165460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906126c5908590600090869030904290600401613274565b600060405180830381600087803b1580156126df57600080fd5b505af11580156126f3573d6000803e3d6000fd5b505050505050565b60006127078383612364565b6001600160a01b03861660009081526005602052604090205490915060ff1615612759576001600160a01b038516600090815260026020526040812080548592906127539084906131c6565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156127ad5760808101516001600160a01b038516600090815260026020526040812080549091906127a7908490613208565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906127d79084906131c6565b90915550506020808201516001600160a01b038616600090815260019092526040822080549192909161280b908490613208565b9091555050811561288c5761282881604001518260a00151612d03565b61283a81606001518260c00151612d38565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161288391815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806128bd5750600d546128ba856113f6565b11155b6129215760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610bdc565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161296a91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612acb578260016000600884815481106129a8576129a86131b0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a1357508160026000600884815481106129ec576129ec6131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a2957600a54600954945094505050509091565b6001600060088381548110612a4057612a406131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612a6f90846131c6565b92506002600060088381548110612a8857612a886131b0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ab790836131c6565b915080612ac3816131ef565b915050612986565b50600954600a54612adc919061318e565b821015612af357600a546009549350935050509091565b90939092509050565b60165460125460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af1158015612b71573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b9691906132e5565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b612c166040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612c275760808101839052610c12565b601b54606490612c3a9060ff168561315a565b612c44919061318e565b60a0820152601b54606490612c6390600160201b900460ff168561315a565b612c6d919061318e565b60c0820181905260a0820151612c8390856131c6565b612c8d91906131c6565b608082015292915050565b6000808080612ca7858861315a565b935085612cbc57508291506000905080612cf8565b848860a00151612ccc919061315a565b9150848860c00151612cde919061315a565b905080612ceb83866131c6565b612cf591906131c6565b92505b945094509450949050565b81600a6000828254612d1591906131c6565b9091555050601c8054829190600090612d2f908490613208565b90915550505050565b3060009081526001602052604081208054849290612d57908490613208565b90915550503060009081526005602052604090205460ff1615612d99573060009081526002602052604081208054839290612d93908490613208565b90915550505b80601c6001016000828254612d2f9190613208565b600060208284031215612dc057600080fd5b5035919050565b600060208083528351808285015260005b81811015612df457858101830151858201604001528201612dd8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461169e57600080fd5b60008060408385031215612e3d57600080fd5b8235612e4881612e15565b946020939093013593505050565b600060208284031215612e6857600080fd5b8135610eee81612e15565b600080600060608486031215612e8857600080fd5b8335612e9381612e15565b92506020840135612ea381612e15565b929592945050506040919091013590565b801515811461169e57600080fd5b60008060408385031215612ed557600080fd5b823591506020830135612ee781612eb4565b809150509250929050565b803560ff81168114612f0357600080fd5b919050565b60008060008060808587031215612f1e57600080fd5b612f2785612ef2565b9350612f3560208601612ef2565b9250612f4360408601612ef2565b9150612f5160608601612ef2565b905092959194509250565b60008060408385031215612f6f57600080fd5b8235612f7a81612e15565b91506020830135612ee781612eb4565b600060208284031215612f9c57600080fd5b8135610eee81612eb4565b60008060408385031215612fba57600080fd5b823591506020830135612ee781612e15565b60008060408385031215612fdf57600080fd5b50508035926020909101359150565b6000806040838503121561300157600080fd5b823561300c81612e15565b91506020830135612ee781612e15565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156130a257816000190482111561308857613088613051565b8085161561309557918102915b93841c939080029061306c565b509250929050565b6000826130b957506001610c12565b816130c657506000610c12565b81600181146130dc57600281146130e657613102565b6001915050610c12565b60ff8411156130f7576130f7613051565b50506001821b610c12565b5060208310610133831016604e8410600b8410161715613125575081810a610c12565b61312f8383613067565b806000190482111561314357613143613051565b029392505050565b6000610eee60ff8416836130aa565b8082028115828204841417610c1257610c12613051565b60006020828403121561318357600080fd5b8151610eee81612eb4565b6000826131ab57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610c1257610c12613051565b634e487b7160e01b600052603160045260246000fd5b60006001820161320157613201613051565b5060010190565b80820180821115610c1257610c12613051565b60ff8181168382160190811115610c1257610c12613051565b60ff818116838216029081169081811461325057613250613051565b5092915050565b60006020828403121561326957600080fd5b8151610eee81612e15565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132c45784516001600160a01b03168352938301939183019160010161329f565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132fa57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212200ed18420781acacb6a271975e523577f1a7e3835b023a3919d753d94fff96f9264736f6c63430008130033
Deployed Bytecode Sourcemap
19938:22079:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39814:179;;;;;;;;;;-1:-1:-1;39814:179:0;;;;;:::i;:::-;;:::i;:::-;;21367:41;;;;;;;;;;-1:-1:-1;21367:41:0;;;;;;;-1:-1:-1;;;;;21367:41:0;;;;;;-1:-1:-1;;;;;389:32:1;;;371:51;;359:2;344:18;21367:41:0;;;;;;;;24657:83;;;;;;;;;;-1:-1:-1;24727:5:0;;;;;;;;;;;;-1:-1:-1;;;24727:5:0;;;;24657:83;;;;;;;:::i;25665:193::-;;;;;;;;;;-1:-1:-1;25665:193:0;;;;;:::i;:::-;;:::i;:::-;;;1607:14:1;;1600:22;1582:41;;1570:2;1555:18;25665:193:0;1442:187:1;40170:130:0;;;;;;;;;;-1:-1:-1;40170:130:0;;;;;:::i;:::-;;:::i;41059:154::-;;;;;;;;;;-1:-1:-1;41059:154:0;;;;;:::i;:::-;;:::i;24957:95::-;;;;;;;;;;-1:-1:-1;25037:7:0;;24957:95;;;2501:25:1;;;2489:2;2474:18;24957:95:0;2355:177:1;25866:521:0;;;;;;;;;;-1:-1:-1;25866:521:0;;;;;:::i;:::-;;:::i;41403:223::-;;;;;;;;;;-1:-1:-1;41403:223:0;;;;;:::i;:::-;;:::i;40001:161::-;;;;;;;;;;-1:-1:-1;40001:161:0;;;;;:::i;:::-;;:::i;27815:319::-;;;;;;;;;;-1:-1:-1;27815:319:0;;;;;:::i;:::-;;:::i;24843:83::-;;;;;;;;;;-1:-1:-1;24843:83:0;;20501:1;2679:36:1;;2667:2;2652:18;24843:83:0;2537:184:1;40308:103:0;;;;;;;;;;;;;:::i;28555:473::-;;;;;;;;;;-1:-1:-1;28555:473:0;;;;;:::i;:::-;;:::i;26395:297::-;;;;;;;;;;-1:-1:-1;26395:297:0;;;;;:::i;:::-;;:::i;20384:37::-;;;;;;;;;;-1:-1:-1;20384:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29036:113;;;;;;;;;;-1:-1:-1;29036:113:0;;;;;:::i;:::-;;:::i;27318:489::-;;;;;;;;;;-1:-1:-1;27318:489:0;;;;;:::i;:::-;;:::i;21448:40::-;;;;;;;;;;-1:-1:-1;21448:40:0;;;;-1:-1:-1;;;21448:40:0;;;;;;28213:334;;;;;;;;;;-1:-1:-1;28213:334:0;;;;;:::i;:::-;;:::i;29279:124::-;;;;;;;;;;-1:-1:-1;29279:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;29368:27:0;29344:4;29368:27;;;:18;:27;;;;;;;;;29279:124;39143:347;;;;;;;;;;-1:-1:-1;39143:347:0;;;;;:::i;:::-;;:::i;20917:22::-;;;;;;;;;;;;;;;;29411:168;;;;;;;;;;-1:-1:-1;29411:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;29538:33:0;29509:4;29538:33;;;:24;:33;;;;;;;;;29411:168;25060:198;;;;;;;;;;-1:-1:-1;25060:198:0;;;;;:::i;:::-;;:::i;22015:293::-;;;;;;;;;;-1:-1:-1;22015:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22015:293:0;;;;;;;;;;4243:4:1;4231:17;;;4213:36;;4285:17;;;4280:2;4265:18;;4258:45;4339:17;;;4319:18;;;4312:45;;;;4393:17;;4388:2;4373:18;;4366:45;4448:17;;;4442:3;4427:19;;4420:46;4200:3;4185:19;22015:293:0;3974:498:1;2645:94:0;;;;;;;;;;;;;:::i;21714:292::-;;;;;;;;;;-1:-1:-1;21714:292:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21714:292:0;;;;;;21176:58;;;;;;;;;;-1:-1:-1;21176:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21094:37;;;;;;;;;;-1:-1:-1;21094:37:0;;;;-1:-1:-1;;;;;21094:37:0;;;21138:31;;;;;;;;;;-1:-1:-1;21138:31:0;;;;-1:-1:-1;;;;;21138:31:0;;;27190:120;;;;;;;;;;-1:-1:-1;27190:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27282:20:0;27258:4;27282:20;;;:11;:20;;;;;;;;;27190:120;20967:34;;;;;;;;;;;;;;;;1994:87;;;;;;;;;;-1:-1:-1;2040:7:0;2067:6;-1:-1:-1;;;;;2067:6:0;1994:87;;24748;;;;;;;;;;-1:-1:-1;24820:7:0;;;;;;;;;;;;-1:-1:-1;;;24820:7:0;;;;24748:87;;38264:522;;;;;;;;;;-1:-1:-1;38264:522:0;;;;;:::i;:::-;;:::i;22458:36::-;;;;;;;;;;-1:-1:-1;22458:36:0;;;;;;;;;;;;;5470:25:1;;;5526:2;5511:18;;5504:34;;;;5443:18;22458:36:0;5296:248:1;40853:194:0;;;;;;;;;;-1:-1:-1;40853:194:0;;;;;:::i;:::-;;:::i;26700:482::-;;;;;;;;;;-1:-1:-1;26700:482:0;;;;;:::i;:::-;;:::i;21048:39::-;;;;;;;;;;-1:-1:-1;21048:39:0;;;;-1:-1:-1;;;;;21048:39:0;;;25266:199;;;;;;;;;;-1:-1:-1;25266:199:0;;;;;:::i;:::-;;:::i;20811:45::-;;;;;;;;;;;;;;;;38794:341;;;;;;;;;;-1:-1:-1;38794:341:0;;;;;:::i;:::-;;:::i;29587:171::-;;;;;;;;;;-1:-1:-1;29587:171:0;;;;;:::i;:::-;;:::i;21415:26::-;;;;;;;;;;-1:-1:-1;21415:26:0;;;;-1:-1:-1;;;;;21415:26:0;;;21495:60;;;;;;;;;;;;;;;;41634:380;;;;;;;;;;-1:-1:-1;41634:380:0;;;;;:::i;:::-;;:::i;20743:45::-;;;;;;;;;;;;;;;;40456:326;;;;;;;;;;-1:-1:-1;40456:326:0;;;;;:::i;:::-;;:::i;20676:44::-;;;;;;;;;;;;;;;;21008:31;;;;;;;;;;;;;;;;39498:308;;;;;;;;;;-1:-1:-1;39498:308:0;;;;;:::i;:::-;;:::i;25473:184::-;;;;;;;;;;-1:-1:-1;25473:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;25622:18:0;;;25590:7;25622:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25473:184;41269:126;;;;;;;;;;-1:-1:-1;41269:126:0;;;;;:::i;:::-;;:::i;29159:112::-;;;;;;;;;;-1:-1:-1;29159:112:0;;;;;:::i;:::-;;:::i;2894:192::-;;;;;;;;;;-1:-1:-1;2894:192:0;;;;;:::i;:::-;;:::i;20879:31::-;;;;;;;;;;;;;;;;39814:179;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;;;;;;;;;39972:13:::1;20501:1;39972:2;:13;:::i;:::-;39957:28;::::0;:12;:28:::1;:::i;:::-;39925:29;:60:::0;-1:-1:-1;39814:179:0:o;25665:193::-;25767:4;25789:39;888:10;25812:7;25821:6;25789:8;:39::i;:::-;-1:-1:-1;25846:4:0;25665:193;;;;;:::o;40170:130::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40260:14:::1;:32:::0;;-1:-1:-1;;;;;;40260:32:0::1;-1:-1:-1::0;;;;;40260:32:0;;;::::1;::::0;;;::::1;::::0;;40170:130::o;41059:154::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;41164:41:::1;::::0;-1:-1:-1;;;41164:41:0;;-1:-1:-1;;;;;9002:32:1;;;41164:41:0::1;::::0;::::1;8984:51:1::0;9051:18;;;9044:34;;;41164:27:0;::::1;::::0;::::1;::::0;8957:18:1;;41164:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41059:154:::0;;;:::o;25866:521::-;25998:4;26015:36;26025:6;26033:9;26044:6;26015:9;:36::i;:::-;-1:-1:-1;;;;;26091:19:0;;26064:24;26091:19;;;:11;:19;;;;;;;;888:10;26091:33;;;;;;;;26157:26;;;;26135:116;;;;-1:-1:-1;;;26135:116:0;;9541:2:1;26135:116:0;;;9523:21:1;9580:2;9560:18;;;9553:30;9619:34;9599:18;;;9592:62;-1:-1:-1;;;9670:18:1;;;9663:38;9718:19;;26135:116:0;9339:404:1;26135:116:0;26287:57;26296:6;888:10;26337:6;26318:16;:25;26287:8;:57::i;:::-;-1:-1:-1;26375:4:0;;25866:521;-1:-1:-1;;;;25866:521:0:o;41403:223::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;41518:19:::1;41508:7;;:29;;;;:::i;:::-;41490:15;:47:::0;;;41579:39:::1;::::0;2501:25:1;;;41579:39:0::1;::::0;2489:2:1;2474:18;41579:39:0::1;;;;;;;;41403:223:::0;:::o;40001:161::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40118:16:::1;:36:::0;;-1:-1:-1;;;;;;40118:36:0::1;-1:-1:-1::0;;;;;40118:36:0;;;::::1;::::0;;;::::1;::::0;;40001:161::o;27815:319::-;27909:7;27967;;27956;:18;;27934:110;;;;-1:-1:-1;;;27934:110:0;;10172:2:1;27934:110:0;;;10154:21:1;10211:2;10191:18;;;10184:30;10250:34;10230:18;;;10223:62;-1:-1:-1;;;10301:18:1;;;10294:40;10351:19;;27934:110:0;9970:406:1;27934:110:0;28055:19;28077:10;:8;:10::i;:::-;28055:32;-1:-1:-1;28105:21:0;28055:32;28105:7;:21;:::i;:::-;28098:28;27815:319;-1:-1:-1;;;27815:319:0:o;40308:103::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40363:40:::1;40378:24;40396:4;40378:9;:24::i;:::-;40363:14;:40::i;:::-;40308:103::o:0;28555:473::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28635:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28627:56;;;::::0;-1:-1:-1;;;28627:56:0;;10583:2:1;28627:56:0::1;::::0;::::1;10565:21:1::0;10622:2;10602:18;;;10595:30;10661:25;10641:18;;;10634:53;10704:18;;28627:56:0::1;10381:347:1::0;28627:56:0::1;28699:9;28694:327;28718:9;:16:::0;28714:20;::::1;28694:327;;;28776:7;-1:-1:-1::0;;;;;28760:23:0::1;:9;28770:1;28760:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28760:12:0::1;:23:::0;28756:254:::1;;28819:9;28829:16:::0;;:20:::1;::::0;28848:1:::1;::::0;28829:20:::1;:::i;:::-;28819:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28804:9:::1;:12:::0;;-1:-1:-1;;;;;28819:31:0;;::::1;::::0;28814:1;;28804:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28804:46:0::1;-1:-1:-1::0;;;;;28804:46:0;;::::1;;::::0;;28869:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;28908:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28908:28:0::1;::::0;;28955:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28955:15:0;;;;;-1:-1:-1;;;;;;28955:15:0::1;::::0;;;;;28694:327:::1;28555:473:::0;:::o;28756:254::-:1;28736:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28694:327;;;;28555:473:::0;:::o;26395:297::-;888:10;26510:4;26604:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26604:34:0;;;;;;;;;;26510:4;;26532:130;;26582:7;;26604:47;;26641:10;;26604:47;:::i;:::-;26532:8;:130::i;29036:113::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29107:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29107:34:0::1;29137:4;29107:34;::::0;;29036:113::o;27318:489::-;27436:7;27480;;27469;:18;;27461:62;;;;-1:-1:-1;;;27461:62:0;;11602:2:1;27461:62:0;;;11584:21:1;11641:2;11621:18;;;11614:30;11680:33;11660:18;;;11653:61;11731:18;;27461:62:0;11400:355:1;27461:62:0;27539:17;27534:266;;27573:28;27604:25;27615:7;27624:4;27604:10;:25::i;:::-;27651:9;;-1:-1:-1;27644:16:0;;-1:-1:-1;27644:16:0;27534:266;27693:28;27724:25;27735:7;27744:4;27724:10;:25::i;:::-;27771:17;;;;-1:-1:-1;27764:24:0;;-1:-1:-1;27764:24:0;28213:334;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28296:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28295:21;28287:61;;;::::0;-1:-1:-1;;;28287:61:0;;11962:2:1;28287:61:0::1;::::0;::::1;11944:21:1::0;12001:2;11981:18;;;11974:30;12040:29;12020:18;;;12013:57;12087:18;;28287:61:0::1;11760:351:1::0;28287:61:0::1;-1:-1:-1::0;;;;;28363:16:0;::::1;28382:1;28363:16:::0;;;:7:::1;:16;::::0;;;;;:20;28359:109:::1;;-1:-1:-1::0;;;;;28439:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28419:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28400:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28359:109:::1;-1:-1:-1::0;;;;;28478:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28478:27:0::1;28501:4;28478:27:::0;;::::1;::::0;;;28516:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28516:23:0::1;::::0;;::::1;::::0;;28213:334::o;39143:347::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;39294:9:::1;:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;39325:32:0;;;;;;;39294:20:::1;39325:32:::0;;::::1;;;-1:-1:-1::0;;39407:18:0;39368:28;;;::::1;;-1:-1:-1::0;;39407:18:0;;;;;::::1;::::0;;;::::1;;::::0;;;39455:21:::1;39368:28:::0;39325:32;39455:21:::1;:::i;:::-;:27;;;;:::i;:::-;39436:9;:46:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;39436:46:0::1;-1:-1:-1::0;;39436:46:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;39143:347:0:o;25060:198::-;-1:-1:-1;;;;;25150:20:0;;25126:7;25150:20;;;:11;:20;;;;;;;;25146:49;;;-1:-1:-1;;;;;;25179:16:0;;;;;:7;:16;;;;;;;25060:198::o;25146:49::-;-1:-1:-1;;;;;25233:16:0;;;;;;:7;:16;;;;;;25213:37;;:19;:37::i;2645:94::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;2710:21:::1;2728:1;2710:9;:21::i;38264:522::-:0;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38403:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;;:42;::::1;;:33;::::0;;::::1;:42;;::::0;38381:148:::1;;;::::0;-1:-1:-1;;;38381:148:0;;12471:2:1;38381:148:0::1;::::0;::::1;12453:21:1::0;12510:2;12490:18;;;12483:30;12549:34;12529:18;;;12522:62;12620:26;12600:18;;;12593:54;12664:19;;38381:148:0::1;12269:420:1::0;38381:148:0::1;-1:-1:-1::0;;;;;38540:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;38540:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;38592:130:::1;;-1:-1:-1::0;;;;;38618:31:0;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;38618:38:0::1;38652:4;38618:38;::::0;;38676:34;;371:51:1;;;38676:34:0;::::1;;::::0;::::1;::::0;344:18:1;38676:34:0::1;;;;;;;38592:130;38737:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;38737:41:0;::::1;::::0;::::1;::::0;;;::::1;38264:522:::0;;:::o;40853:194::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40953:9:::1;40928:21;:34;;40920:71;;;::::0;-1:-1:-1;;;40920:71:0;;12896:2:1;40920:71:0::1;::::0;::::1;12878:21:1::0;12935:2;12915:18;;;12908:30;12974:26;12954:18;;;12947:54;13018:18;;40920:71:0::1;12694:348:1::0;40920:71:0::1;41002:16;::::0;:37:::1;::::0;-1:-1:-1;;;;;41002:16:0::1;41029:9:::0;41002:26:::1;:37::i;:::-;40853:194:::0;:::o;26700:482::-;888:10;26820:4;26869:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26869:34:0;;;;;;;;;;26936:35;;;;26914:122;;;;-1:-1:-1;;;26914:122:0;;13249:2:1;26914:122:0;;;13231:21:1;13288:2;13268:18;;;13261:30;13327:34;13307:18;;;13300:62;-1:-1:-1;;;13378:18:1;;;13371:35;13423:19;;26914:122:0;13047:401:1;26914:122:0;27072:67;888:10;27095:7;27123:15;27104:16;:34;27072:8;:67::i;:::-;-1:-1:-1;27170:4:0;;26700:482;-1:-1:-1;;;26700:482:0:o;25266:199::-;25371:4;25393:42;888:10;25417:9;25428:6;25393:9;:42::i;38794:341::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;38944:8:::1;:19:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;38974:31:0;;;;;;;38944:19:::1;38974:31:::0;;::::1;;;-1:-1:-1::0;;39054:17:0;39016:27;;;::::1;;-1:-1:-1::0;;39054:17:0;;;;;::::1;::::0;;;::::1;;::::0;;;39100:21:::1;39016:27:::0;38974:31;39100:21:::1;:::i;:::-;:27;;;;:::i;:::-;39082:8;:45:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;39082:45:0::1;-1:-1:-1::0;;39082:45:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;38794:341:0:o;29587:171::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;29664:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;29664:32:0::1;-1:-1:-1::0;;;;29664:32:0;;::::1;;::::0;;29712:38:::1;::::0;::::1;::::0;::::1;::::0;29688:8;1607:14:1;1600:22;1582:41;;1570:2;1555:18;;1442:187;41634:380:0;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41771:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;41749:145:::1;;;::::0;-1:-1:-1;;;41749:145:0;;13655:2:1;41749:145:0::1;::::0;::::1;13637:21:1::0;13694:2;13674:18;;;13667:30;13733:34;13713:18;;;13706:62;-1:-1:-1;;;13784:18:1;;;13777:48;13842:19;;41749:145:0::1;13453:414:1::0;41749:145:0::1;-1:-1:-1::0;;;;;41905:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;;;:44;;-1:-1:-1;;41905:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41967:39;;371:51:1;;;41905:44:0;;41967:39:::1;::::0;344:18:1;41967:39:0::1;;;;;;;41634:380:::0;;:::o;40456:326::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;40618:4:::1;40601:15;40576:24;40594:4;40576:9;:24::i;:::-;:40;;;;:::i;:::-;40575:47;;;;:::i;:::-;40560:12;:62:::0;;;40632:30:::1;::::0;:16:::1;:30::i;:::-;40673:8;:29:::0;;-1:-1:-1;;;;;;40673:29:0::1;-1:-1:-1::0;;;;;40673:29:0;::::1;::::0;;::::1;::::0;;;40719:21:::1;40713:3;:27:::0;;;40751:23:::1;::::0;40673:29;40751:18:::1;:23::i;39498:308::-:0;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;39670:18:::1;39660:7;;:28;;;;:::i;:::-;39643:14;:45:::0;39743:7:::1;::::0;:29:::1;::::0;39753:19;;39743:29:::1;:::i;:::-;39725:15;:47:::0;-1:-1:-1;;39498:308:0:o;41269:126::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41362:17:0;;;::::1;;::::0;;;:5:::1;:17;::::0;;;;:25;;-1:-1:-1;;41362:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41269:126::o;29159:112::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29228:27:0::1;29258:5;29228:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29228:35:0::1;::::0;;29159:112::o;2894:192::-;2040:7;2067:6;-1:-1:-1;;;;;2067:6:0;888:10;2214:23;2206:68;;;;-1:-1:-1;;;2206:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2983:22:0;::::1;2975:73;;;::::0;-1:-1:-1;;;2975:73:0;;14074:2:1;2975:73:0::1;::::0;::::1;14056:21:1::0;14113:2;14093:18;;;14086:30;14152:34;14132:18;;;14125:62;-1:-1:-1;;;14203:18:1;;;14196:36;14249:19;;2975:73:0::1;13872:402:1::0;2975:73:0::1;3059:19;3069:8;3059:9;:19::i;32562:369::-:0;-1:-1:-1;;;;;32689:19:0;;32681:68;;;;-1:-1:-1;;;32681:68:0;;14481:2:1;32681:68:0;;;14463:21:1;14520:2;14500:18;;;14493:30;14559:34;14539:18;;;14532:62;-1:-1:-1;;;14610:18:1;;;14603:34;14654:19;;32681:68:0;14279:400:1;32681:68:0;-1:-1:-1;;;;;32768:21:0;;32760:68;;;;-1:-1:-1;;;32760:68:0;;14886:2:1;32760:68:0;;;14868:21:1;14925:2;14905:18;;;14898:30;14964:34;14944:18;;;14937:62;-1:-1:-1;;;15015:18:1;;;15008:32;15057:19;;32760:68:0;14684:398:1;32760:68:0;-1:-1:-1;;;;;32839:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32891:32;;2501:25:1;;;32891:32:0;;2474:18:1;32891:32:0;;;;;;;32562:369;;;:::o;32939:1834::-;33057:19;;:24;:58;;;;-1:-1:-1;;;;;;33085:30:0;;;;;;:26;:30;;;;;;;;33057:58;33053:125;;;33154:12;33132:19;:34;33053:125;-1:-1:-1;;;;;33198:18:0;;33190:68;;;;-1:-1:-1;;;33190:68:0;;15289:2:1;33190:68:0;;;15271:21:1;15328:2;15308:18;;;15301:30;15367:34;15347:18;;;15340:62;-1:-1:-1;;;15418:18:1;;;15411:35;15463:19;;33190:68:0;15087:401:1;33190:68:0;-1:-1:-1;;;;;33277:16:0;;33269:64;;;;-1:-1:-1;;;33269:64:0;;15695:2:1;33269:64:0;;;15677:21:1;15734:2;15714:18;;;15707:30;15773:34;15753:18;;;15746:62;-1:-1:-1;;;15824:18:1;;;15817:33;15867:19;;33269:64:0;15493:399:1;33269:64:0;-1:-1:-1;;;;;33353:11:0;;;;;;:5;:11;;;;;;;;33352:12;33344:57;;;;-1:-1:-1;;;33344:57:0;;16099:2:1;33344:57:0;;;16081:21:1;;;16118:18;;;16111:30;16177:34;16157:18;;;16150:62;16229:18;;33344:57:0;15897:356:1;33344:57:0;33429:1;33420:6;:10;33412:64;;;;-1:-1:-1;;;33412:64:0;;16460:2:1;33412:64:0;;;16442:21:1;16499:2;16479:18;;;16472:30;16538:34;16518:18;;;16511:62;-1:-1:-1;;;16589:18:1;;;16582:39;16638:19;;33412:64:0;16258:405:1;33412:64:0;33519:15;33529:4;33519:9;:15::i;:::-;33509:6;:25;;33487:124;;;;-1:-1:-1;;;33487:124:0;;16870:2:1;33487:124:0;;;16852:21:1;16909:2;16889:18;;;16882:30;16948:34;16928:18;;;16921:62;-1:-1:-1;;;16999:18:1;;;16992:47;17056:19;;33487:124:0;16668:413:1;33487:124:0;-1:-1:-1;;;;;33639:24:0;;33622:12;33639:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;33667:22:0;;;;;;:18;:22;;;;;;;;33639:50;33637:53;33622:68;;33707:7;33703:687;;;-1:-1:-1;;;;;33735:32:0;;;;;;:26;:32;;;;;;;;33731:648;;;33829:12;;33807:19;;:34;;;;:::i;:::-;33792:12;:49;33788:167;;;-1:-1:-1;;;;;33866:9:0;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;33866:16:0;33878:4;33866:16;;;;;;33910:25;;371:51:1;;;33878:4:0;;33910:25;;344:18:1;33910:25:0;;;;;;;33788:167;33990:8;33975:23;:12;:23;;;;;;-1:-1:-1;;33975:23:0;;;;;;;;;;;;;;;-1:-1:-1;;33975:23:0;;;;;;;;-1:-1:-1;;33975:23:0;;;;;;;;;;-1:-1:-1;;33975:23:0;-1:-1:-1;;;33975:23:0;;;;;;;;;;;;;;;;;34057:14;;34047:24;;;34017:130;;;;-1:-1:-1;;;34017:130:0;;17288:2:1;34017:130:0;;;17270:21:1;;;17307:18;;;17300:30;17366:34;17346:18;;;17339:62;17418:18;;34017:130:0;17086:356:1;34017:130:0;33731:648;;;34203:9;34188:24;:12;:24;;;;;;-1:-1:-1;;34188:24:0;;;;;;;;;;;;;;;-1:-1:-1;;34188:24:0;;;;;;;;-1:-1:-1;;34188:24:0;;;;;;;;;;-1:-1:-1;;34188:24:0;-1:-1:-1;;;34188:24:0;;;;;;;;;;;;;;;;;34271:15;;34261:25;;;34231:132;;;;-1:-1:-1;;;34231:132:0;;17649:2:1;34231:132:0;;;17631:21:1;17688:2;17668:18;;;17661:30;17727:34;17707:18;;;17700:62;-1:-1:-1;;;17778:18:1;;;17771:31;17819:19;;34231:132:0;17447:397:1;34231:132:0;34448:29;;34420:24;34438:4;34420:9;:24::i;:::-;:57;;:91;;;;-1:-1:-1;34495:16:0;;;;34494:17;34420:91;:141;;;;-1:-1:-1;;;;;;34529:32:0;;;;;;:26;:32;;;;;;;;34528:33;34420:141;:179;;;;-1:-1:-1;34578:21:0;;-1:-1:-1;;;34578:21:0;;;;34420:179;34402:310;;;34655:45;34670:29;;34655:14;:45::i;:::-;34724:41;34739:4;34745:2;34749:6;34757:7;34724:14;:41::i;31807:161::-;31849:7;31870:15;31887;31906:19;:17;:19::i;:::-;31869:56;;-1:-1:-1;31869:56:0;-1:-1:-1;31943:17:0;31869:56;;31943:17;:::i;:::-;31936:24;;;;31807:161;:::o;35818:1319::-;23386:16;:23;;-1:-1:-1;;23386:23:0;23405:4;23386:23;;;35925:12:::1;:19:::0;23386:16;;35925:23:::1;::::0;-1:-1:-1;;;35925:19:0;::::1;23386:23:::0;35925:19:::1;35947:1;35925:23;:::i;:::-;36031:12;:15:::0;35903:45:::1;::::0;;::::1;::::0;-1:-1:-1;35959:32:0::1;::::0;35903:45;;35995:51:::1;::::0;36031:15;;;::::1;;35995:20:::0;:51:::1;:::i;:::-;35994:67;;;;:::i;:::-;35959:102:::0;-1:-1:-1;36072:14:0::1;36089:47;35959:102:::0;36089:20;:47:::1;:::i;:::-;36072:64:::0;-1:-1:-1;36174:21:0::1;36240:24;36072:64:::0;36240:16:::1;:24::i;:::-;36277:20;36300:38;36324:14:::0;36300:21:::1;:38;:::i;:::-;36444:12;:15:::0;36277:61;;-1:-1:-1;36349:29:0::1;::::0;36430::::1;::::0;36444:15;;::::1;;;36430:11:::0;:29:::1;:::i;:::-;36397:12;:15:::0;36382:30:::1;::::0;36397:15;;::::1;;;36382:12:::0;:30:::1;:::i;:::-;36381:79;;;;:::i;:::-;36349:111;;36529:1;36503:24;:27;:54;;;;;36556:1;36534:21;:23;36503:54;36499:147;;;36573:61;36586:24;36612:21;36573:12;:61::i;:::-;36879:12;:20:::0;36754:21:::1;::::0;36727:24:::1;::::0;36865:34:::1;::::0;36879:20;;::::1;;;36865:11:::0;:34:::1;:::i;:::-;36827:12;:20:::0;36808:39:::1;::::0;36827:20;;::::1;;;36808:16:::0;:39:::1;:::i;:::-;36807:93;;;;:::i;:::-;37008:12;:22:::0;36786:114;;-1:-1:-1;36911:20:0::1;::::0;36994:36:::1;::::0;37008:22:::1;::::0;::::1;;;36994:11:::0;:36:::1;:::i;:::-;36954:12;:22:::0;36935:41:::1;::::0;36954:22:::1;::::0;::::1;;;36935:16:::0;:41:::1;:::i;:::-;36934:97;;;;:::i;:::-;37042:14;::::0;36911:120;;-1:-1:-1;37042:36:0::1;::::0;-1:-1:-1;;;;;37042:14:0::1;37067:10:::0;37042:24:::1;:36::i;:::-;37089:16;::::0;:40:::1;::::0;-1:-1:-1;;;;;37089:16:0::1;37116:12:::0;37089:26:::1;:40::i;:::-;-1:-1:-1::0;;23432:16:0;:24;;-1:-1:-1;;23432:24:0;;;-1:-1:-1;;;;;;;;35818:1319:0:o;30240:440::-;30340:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30340:36:0;30406:29;30418:7;30427;30406:11;:29::i;:::-;30394:41;;30593:52;30605:9;30616:7;30625;30634:10;:8;:10::i;:::-;30593:11;:52::i;:::-;30562:17;;;30446:199;30533:14;;;30446:199;30493:25;;;30446:199;;;30240:440;;;;:::o;3094:173::-;3150:16;3169:6;;-1:-1:-1;;;;;3186:17:0;;;-1:-1:-1;;;;;;3186:17:0;;;;;;3219:40;;3169:6;;;;;;;3219:40;;3150:16;3219:40;3139:128;3094:173;:::o;13881:317::-;13996:6;13971:21;:31;;13963:73;;;;-1:-1:-1;;;13963:73:0;;18281:2:1;13963:73:0;;;18263:21:1;18320:2;18300:18;;;18293:30;18359:31;18339:18;;;18332:59;18408:18;;13963:73:0;18079:353:1;13963:73:0;14050:12;14068:9;-1:-1:-1;;;;;14068:14:0;14090:6;14068:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14049:52;;;14120:7;14112:78;;;;-1:-1:-1;;;14112:78:0;;18849:2:1;14112:78:0;;;18831:21:1;18888:2;18868:18;;;18861:30;18927:34;18907:18;;;18900:62;18998:28;18978:18;;;18971:56;19044:19;;14112:78:0;18647:422:1;14112:78:0;13952:246;13881:317;;:::o;37145:669::-;37279:16;;;37293:1;37279:16;;;;;;;;37255:21;;37279:16;;;;;;;;;;-1:-1:-1;37279:16:0;37255:40;;37324:4;37306;37311:1;37306:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;37306:23:0;;;-1:-1:-1;;;;;37306:23:0;;;;;37350:15;;;;;;;;;-1:-1:-1;;;;;37350:15:0;-1:-1:-1;;;;;37350:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37340:4;37345:1;37340:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37340:32:0;;;:7;;;;;;;;;;:32;;;;37422:15;;37407:4;25590:7;25622:18;;;:11;:18;;;;;;37422:15;;;;;;;25622:27;;;;;;37442:11;-1:-1:-1;37385:159:0;;;37502:15;;37470:62;;37487:4;;37502:15;;;-1:-1:-1;;;;;37502:15:0;-1:-1:-1;;37470:8:0;:62::i;:::-;37582:15;;:224;;-1:-1:-1;;;37582:224:0;;:15;;;;-1:-1:-1;;;;;37582:15:0;;:66;;:224;;37663:11;;37689:1;;37733:4;;37760;;37780:15;;37582:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37200:614;37145:669;:::o;34854:956::-;35006:28;35037;35048:7;35057;35037:10;:28::i;:::-;-1:-1:-1;;;;;35082:19:0;;;;;;:11;:19;;;;;;35006:59;;-1:-1:-1;35082:19:0;;35078:78;;;-1:-1:-1;;;;;35118:15:0;;;;;;:7;:15;;;;;:26;;35137:7;;35118:15;:26;;35137:7;;35118:26;:::i;:::-;;;;-1:-1:-1;;35078:78:0;-1:-1:-1;;;;;35170:22:0;;;;;;:11;:22;;;;;;;;35166:94;;;35231:17;;;;-1:-1:-1;;;;;35209:18:0;;;;;;:7;:18;;;;;:39;;:18;;;:39;;35231:17;;35209:39;:::i;:::-;;;;-1:-1:-1;;35166:94:0;35291:9;;-1:-1:-1;;;;;35272:15:0;;35291:9;35272:15;;;:7;:15;;;;;:28;;:15;;35291:9;35272:28;;35291:9;;35272:28;:::i;:::-;;;;-1:-1:-1;;35333:17:0;;;;;-1:-1:-1;;;;;35311:18:0;;;;;;:7;:18;;;;;;:39;;35333:17;;35311:18;;:39;;35333:17;;35311:39;:::i;:::-;;;;-1:-1:-1;;35361:177:0;;;;35389:27;35401:1;:6;;;35409:1;:6;;;35389:11;:27::i;:::-;35431:33;35443:1;:9;;;35454:1;:9;;;35431:11;:33::i;:::-;35509:4;-1:-1:-1;;;;;35484:42:0;35493:6;-1:-1:-1;;;;;35484:42:0;;35516:1;:9;;;35484:42;;;;2501:25:1;;2489:2;2474:18;;2355:177;35484:42:0;;;;;;;;35361:177;-1:-1:-1;;;;;35570:35:0;;;;;;:24;:35;;;;;;;;;:95;;;35650:15;;35626:20;35636:9;35626;:20::i;:::-;:39;;35570:95;35548:192;;;;-1:-1:-1;;;35548:192:0;;20649:2:1;35548:192:0;;;20631:21:1;20688:2;20668:18;;;20661:30;20727:34;20707:18;;;20700:62;-1:-1:-1;;;20778:18:1;;;20771:45;20833:19;;35548:192:0;20447:411:1;35548:192:0;35773:9;-1:-1:-1;;;;;35756:46:0;35765:6;-1:-1:-1;;;;;35756:46:0;;35784:1;:17;;;35756:46;;;;2501:25:1;;2489:2;2474:18;;2355:177;35756:46:0;;;;;;;;34995:815;34854:956;;;;:::o;31976:578::-;32074:7;;32110;;32027;;;;;32128:314;32152:9;:16;32148:20;;32128:314;;;32236:7;32212;:21;32220:9;32230:1;32220:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32220:12:0;32212:21;;;;;;;;;;;;;:31;;:83;;;32288:7;32264;:21;32272:9;32282:1;32272:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32272:12:0;32264:21;;;;;;;;;;;;;:31;32212:83;32190:146;;;32319:7;;32328;;32311:25;;;;;;;31976:578;;:::o;32190:146::-;32362:7;:21;32370:9;32380:1;32370:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32370:12:0;32362:21;;;;;;;;;;;;;32351:32;;;;:::i;:::-;;;32409:7;:21;32417:9;32427:1;32417:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32417:12:0;32409:21;;;;;;;;;;;;;32398:32;;;;:::i;:::-;;-1:-1:-1;32170:3:0;;;;:::i;:::-;;;;32128:314;;;;32476:7;;32466;;:17;;;;:::i;:::-;32456:7;:27;32452:58;;;32493:7;;32502;;32485:25;;;;;;31976:578;;:::o;32452:58::-;32529:7;;32538;;-1:-1:-1;31976:578:0;-1:-1:-1;31976:578:0:o;37822:434::-;37933:15;;38137:16;;37933:261;;-1:-1:-1;;;37933:261:0;;38005:4;37933:261;;;21212:34:1;21262:18;;;21255:34;;;38051:1:0;21305:18:1;;;21298:34;;;21348:18;;;21341:34;-1:-1:-1;;;;;38137:16:0;;;21391:19:1;;;21384:44;38168:15:0;21444:19:1;;;21437:35;37933:15:0;;;;;;:31;;37972:9;;21146:19:1;;37933:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;38210:38:0;;;5470:25:1;;;5526:2;5511:18;;5504:34;;;38210:38:0;;-1:-1:-1;5443:18:1;38210:38:0;;;;;;;37822:434;;:::o;30688:437::-;30789:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30789:28:0;30840:7;30835:91;;30864:17;;;:27;;;30906:8;;30835:91;30956:12;:16;30976:3;;30946:26;;30956:16;;30946:7;:26;:::i;:::-;30945:34;;;;:::i;:::-;30936:6;;;:43;31013:12;:19;31036:3;;31003:29;;-1:-1:-1;;;31013:19:0;;;;31003:7;:29;:::i;:::-;31002:37;;;;:::i;:::-;30990:9;;;:49;;;31080:6;;;;31070:16;;:7;:16;:::i;:::-;:28;;;;:::i;:::-;31050:17;;;:48;30688:437;;;;:::o;31133:666::-;31342:15;;;;31490:21;31500:11;31490:7;:21;:::i;:::-;31480:31;;31529:7;31524:72;;-1:-1:-1;31561:7:0;;-1:-1:-1;31579:1:0;;-1:-1:-1;31579:1:0;31553:31;;31524:72;31624:11;31615:1;:6;;;:20;;;;:::i;:::-;31608:27;;31668:11;31656:1;:9;;;:23;;;;:::i;:::-;31646:33;-1:-1:-1;31646:33:0;31708:14;31718:4;31708:7;:14;:::i;:::-;:24;;;;:::i;:::-;31690:42;;31133:666;;;;;;;;;;:::o;29868:125::-;29947:4;29936:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;29962:11:0;:23;;29981:4;;29962:11;:15;;:23;;29981:4;;29962:23;:::i;:::-;;;;-1:-1:-1;;;;29868:125:0:o;30001:231::-;30091:4;30075:22;;;;:7;:22;;;;;:33;;30101:7;;30075:22;:33;;30101:7;;30075:33;:::i;:::-;;;;-1:-1:-1;;30143:4:0;30123:26;;;;:11;:26;;;;;;;;30119:65;;;30167:4;30151:22;;;;:7;:22;;;;;:33;;30177:7;;30151:22;:33;;30177:7;;30151:33;:::i;:::-;;;;-1:-1:-1;;30119:65:0;30217:7;30195:11;:18;;;:29;;;;;;;:::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;433:548::-;545:4;574:2;603;592:9;585:21;635:6;629:13;678:6;673:2;662:9;658:18;651:34;703:1;713:140;727:6;724:1;721:13;713:140;;;822:14;;;818:23;;812:30;788:17;;;807:2;784:26;777:66;742:10;;713:140;;;717:3;902:1;897:2;888:6;877:9;873:22;869:31;862:42;972:2;965;961:7;956:2;948:6;944:15;940:29;929:9;925:45;921:54;913:62;;;;433:548;;;;:::o;986:131::-;-1:-1:-1;;;;;1061:31:1;;1051:42;;1041:70;;1107:1;1104;1097:12;1122:315;1190:6;1198;1251:2;1239:9;1230:7;1226:23;1222:32;1219:52;;;1267:1;1264;1257:12;1219:52;1306:9;1293:23;1325:31;1350:5;1325:31;:::i;:::-;1375:5;1427:2;1412:18;;;;1399:32;;-1:-1:-1;;;1122:315:1:o;1634:255::-;1701:6;1754:2;1742:9;1733:7;1729:23;1725:32;1722:52;;;1770:1;1767;1760:12;1722:52;1809:9;1796:23;1828:31;1853:5;1828:31;:::i;1894:456::-;1971:6;1979;1987;2040:2;2028:9;2019:7;2015:23;2011:32;2008:52;;;2056:1;2053;2046:12;2008:52;2095:9;2082:23;2114:31;2139:5;2114:31;:::i;:::-;2164:5;-1:-1:-1;2221:2:1;2206:18;;2193:32;2234:33;2193:32;2234:33;:::i;:::-;1894:456;;2286:7;;-1:-1:-1;;;2340:2:1;2325:18;;;;2312:32;;1894:456::o;2978:118::-;3064:5;3057:13;3050:21;3043:5;3040:32;3030:60;;3086:1;3083;3076:12;3101:309;3166:6;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3279:9;3266:23;3256:33;;3339:2;3328:9;3324:18;3311:32;3352:28;3374:5;3352:28;:::i;:::-;3399:5;3389:15;;;3101:309;;;;;:::o;3415:156::-;3481:20;;3541:4;3530:16;;3520:27;;3510:55;;3561:1;3558;3551:12;3510:55;3415:156;;;:::o;3576:393::-;3654:6;3662;3670;3678;3731:3;3719:9;3710:7;3706:23;3702:33;3699:53;;;3748:1;3745;3738:12;3699:53;3771:27;3788:9;3771:27;:::i;:::-;3761:37;;3817:36;3849:2;3838:9;3834:18;3817:36;:::i;:::-;3807:46;;3872:36;3904:2;3893:9;3889:18;3872:36;:::i;:::-;3862:46;;3927:36;3959:2;3948:9;3944:18;3927:36;:::i;:::-;3917:46;;3576:393;;;;;;;:::o;4909:382::-;4974:6;4982;5035:2;5023:9;5014:7;5010:23;5006:32;5003:52;;;5051:1;5048;5041:12;5003:52;5090:9;5077:23;5109:31;5134:5;5109:31;:::i;:::-;5159:5;-1:-1:-1;5216:2:1;5201:18;;5188:32;5229:30;5188:32;5229:30;:::i;5549:241::-;5605:6;5658:2;5646:9;5637:7;5633:23;5629:32;5626:52;;;5674:1;5671;5664:12;5626:52;5713:9;5700:23;5732:28;5754:5;5732:28;:::i;5795:315::-;5863:6;5871;5924:2;5912:9;5903:7;5899:23;5895:32;5892:52;;;5940:1;5937;5930:12;5892:52;5976:9;5963:23;5953:33;;6036:2;6025:9;6021:18;6008:32;6049:31;6074:5;6049:31;:::i;6115:248::-;6183:6;6191;6244:2;6232:9;6223:7;6219:23;6215:32;6212:52;;;6260:1;6257;6250:12;6212:52;-1:-1:-1;;6283:23:1;;;6353:2;6338:18;;;6325:32;;-1:-1:-1;6115:248:1:o;6368:388::-;6436:6;6444;6497:2;6485:9;6476:7;6472:23;6468:32;6465:52;;;6513:1;6510;6503:12;6465:52;6552:9;6539:23;6571:31;6596:5;6571:31;:::i;:::-;6621:5;-1:-1:-1;6678:2:1;6663:18;;6650:32;6691:33;6650:32;6691:33;:::i;6761:356::-;6963:2;6945:21;;;6982:18;;;6975:30;7041:34;7036:2;7021:18;;7014:62;7108:2;7093:18;;6761:356::o;7122:127::-;7183:10;7178:3;7174:20;7171:1;7164:31;7214:4;7211:1;7204:15;7238:4;7235:1;7228:15;7254:422;7343:1;7386:5;7343:1;7400:270;7421:7;7411:8;7408:21;7400:270;;;7480:4;7476:1;7472:6;7468:17;7462:4;7459:27;7456:53;;;7489:18;;:::i;:::-;7539:7;7529:8;7525:22;7522:55;;;7559:16;;;;7522:55;7638:22;;;;7598:15;;;;7400:270;;;7404:3;7254:422;;;;;:::o;7681:806::-;7730:5;7760:8;7750:80;;-1:-1:-1;7801:1:1;7815:5;;7750:80;7849:4;7839:76;;-1:-1:-1;7886:1:1;7900:5;;7839:76;7931:4;7949:1;7944:59;;;;8017:1;8012:130;;;;7924:218;;7944:59;7974:1;7965:10;;7988:5;;;8012:130;8049:3;8039:8;8036:17;8033:43;;;8056:18;;:::i;:::-;-1:-1:-1;;8112:1:1;8098:16;;8127:5;;7924:218;;8226:2;8216:8;8213:16;8207:3;8201:4;8198:13;8194:36;8188:2;8178:8;8175:16;8170:2;8164:4;8161:12;8157:35;8154:77;8151:159;;;-1:-1:-1;8263:19:1;;;8295:5;;8151:159;8342:34;8367:8;8361:4;8342:34;:::i;:::-;8412:6;8408:1;8404:6;8400:19;8391:7;8388:32;8385:58;;;8423:18;;:::i;:::-;8461:20;;7681:806;-1:-1:-1;;;7681:806:1:o;8492:140::-;8550:5;8579:47;8620:4;8610:8;8606:19;8600:4;8579:47;:::i;8637:168::-;8710:9;;;8741;;8758:15;;;8752:22;;8738:37;8728:71;;8779:18;;:::i;9089:245::-;9156:6;9209:2;9197:9;9188:7;9184:23;9180:32;9177:52;;;9225:1;9222;9215:12;9177:52;9257:9;9251:16;9276:28;9298:5;9276:28;:::i;9748:217::-;9788:1;9814;9804:132;;9858:10;9853:3;9849:20;9846:1;9839:31;9893:4;9890:1;9883:15;9921:4;9918:1;9911:15;9804:132;-1:-1:-1;9950:9:1;;9748:217::o;10733:127::-;10794:10;10789:3;10785:20;10782:1;10775:31;10825:4;10822:1;10815:15;10849:4;10846:1;10839:15;10865:128;10932:9;;;10953:11;;;10950:37;;;10967:18;;:::i;10998:127::-;11059:10;11054:3;11050:20;11047:1;11040:31;11090:4;11087:1;11080:15;11114:4;11111:1;11104:15;11130:135;11169:3;11190:17;;;11187:43;;11210:18;;:::i;:::-;-1:-1:-1;11257:1:1;11246:13;;11130:135::o;11270:125::-;11335:9;;;11356:10;;;11353:36;;;11369:18;;:::i;12116:148::-;12204:4;12183:12;;;12197;;;12179:31;;12222:13;;12219:39;;;12238:18;;:::i;17849:225::-;17953:4;17932:12;;;17946;;;17928:31;17979:22;;;;18020:24;;;18010:58;;18048:18;;:::i;:::-;18010:58;17849:225;;;;:::o;19206:251::-;19276:6;19329:2;19317:9;19308:7;19304:23;19300:32;19297:52;;;19345:1;19342;19335:12;19297:52;19377:9;19371:16;19396:31;19421:5;19396:31;:::i;19462:980::-;19724:4;19772:3;19761:9;19757:19;19803:6;19792:9;19785:25;19829:2;19867:6;19862:2;19851:9;19847:18;19840:34;19910:3;19905:2;19894:9;19890:18;19883:31;19934:6;19969;19963:13;20000:6;19992;19985:22;20038:3;20027:9;20023:19;20016:26;;20077:2;20069:6;20065:15;20051:29;;20098:1;20108:195;20122:6;20119:1;20116:13;20108:195;;;20187:13;;-1:-1:-1;;;;;20183:39:1;20171:52;;20278:15;;;;20243:12;;;;20219:1;20137:9;20108:195;;;-1:-1:-1;;;;;;;20359:32:1;;;;20354:2;20339:18;;20332:60;-1:-1:-1;;;20423:3:1;20408:19;20401:35;20320:3;19462:980;-1:-1:-1;;;19462:980:1:o;21483:306::-;21571:6;21579;21587;21640:2;21628:9;21619:7;21615:23;21611:32;21608:52;;;21656:1;21653;21646:12;21608:52;21685:9;21679:16;21669:26;;21735:2;21724:9;21720:18;21714:25;21704:35;;21779:2;21768:9;21764:18;21758:25;21748:35;;21483:306;;;;;:::o
Swarm Source
ipfs://0ed18420781acacb6a271975e523577f1a7e3835b023a3919d753d94fff96f92
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.