Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 17587661 | 446 days ago | IN | 0 ETH | 0.00092994 | ||||
Approve | 17587599 | 446 days ago | IN | 0 ETH | 0.00191534 | ||||
Transfer Ownersh... | 16693593 | 572 days ago | IN | 0 ETH | 0.00105642 | ||||
Transfer | 16693589 | 572 days ago | IN | 0 ETH | 0.0025949 | ||||
Exclude From Max... | 16693579 | 572 days ago | IN | 0 ETH | 0.00177938 | ||||
Exclude From Fee | 16693573 | 572 days ago | IN | 0 ETH | 0.00176275 | ||||
0x60806040 | 16693543 | 572 days ago | IN | 0 ETH | 0.21438864 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TitleProtocol
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-23 */ // 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; } } /** * @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); } } /** * @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 interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File contracts/IUniswapV2Router02.sol interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File contracts/IUniswapV2Factory.sol interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } /** * @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); } } } } contract TitleProtocol 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) public _isExcludedFromFee; mapping(address => bool) private _isExcluded; mapping(address => bool) public _isExcludedFromMaxWallet; mapping(address => bool) public isBot; address[] private _excluded; uint8 private constant _decimals = 9; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10_000_000_000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public maxTxAmountBuy = 200_000_000 * 10**_decimals; // 2% of supply uint256 public maxTxAmountSell = 50_000_000 * 10**_decimals; // 0.5% of supply uint256 public maxWalletAmount = 400_000_000 * 10**_decimals; // 4% of supply //antisnipers uint256 public liqAddedBlockNumber; uint256 public blocksToWait = 1; address payable public marketingAddress; address payable public devAddress; mapping(address => bool) public isAutomatedMarketMakerPair; string private constant _name = "Title Protocol"; string private constant _symbol = "TITLE"; bool private inSwapAndLiquify; IUniswapV2Router02 public UniswapV2Router; address public uniswapPair; bool public swapAndLiquifyEnabled = true; bool public tradingOpen = false; uint256 public numTokensSellToAddToLiquidity = 175_000_000 * 10**_decimals; struct feeRatesStruct { uint8 rfi; uint8 burn; uint8 marketing; uint8 dev; uint8 lp; uint8 toSwap; } feeRatesStruct public buyRates = feeRatesStruct({ rfi: 2, // 0 RFI rate, in % burn: 1, // Burn rate, in % dev: 0, // dev team fee in % marketing: 2, // marketing fee in % lp: 0, // lp rate in % toSwap: 2 // marketing + dev + lp }); feeRatesStruct public sellRates = feeRatesStruct({ rfi: 2, // 0 RFI rate, in % burn: 1, // Burn rate, in % dev: 0, // dev team fee in % marketing: 2, // marketing fee in % lp: 0, // lp rate in % toSwap: 2 // marketing + dev + lp }); feeRatesStruct private appliedRates = buyRates; struct TotFeesPaidStruct { uint256 rfi; uint256 burn; uint256 toSwap; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues { uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rBurn; uint256 rToSwap; uint256 tTransferAmount; uint256 tRfi; uint256 tBurn; uint256 tToSwap; } event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ETHReceived, uint256 tokensIntotoSwap ); event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount); event TokensBurned(uint256 tokenAmount); event MarketingAndDevFeesAdded(uint256 devFee, 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; devAddress = payable(msg.sender); marketingAddress = payable(address(0x1A9B52C9223c2818d5032893E9069a668a1760bb)); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingAddress] = true; _isExcludedFromFee[devAddress] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromMaxWallet[owner()] = true; _isExcludedFromMaxWallet[marketingAddress] = true; _isExcludedFromMaxWallet[devAddress] = true; _isExcludedFromMaxWallet[address(this)] = true; _isExcludedFromMaxWallet[uniswapPair] = true; emit Transfer(address(0), owner(), _tTotal); } 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; } 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 excludeMultipleAccountsFromMaxWallet( address[] calldata accounts, bool excluded ) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { require( _isExcludedFromMaxWallet[accounts[i]] != excluded, "_isExcludedFromMaxWallet already set to that value for one wallet" ); _isExcludedFromMaxWallet[accounts[i]] = excluded; emit ExcludeFromMaxWallet(accounts[i], excluded); } } 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); } // @dev 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.rBurn, 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.tBurn = (tAmount * appliedRates.burn) / 100; s.tToSwap = (tAmount * appliedRates.toSwap) / 100; s.tTransferAmount = tAmount - s.tRfi - s.tBurn - 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 rBurn, uint256 rToSwap ) { rAmount = tAmount * currentRate; if (!takeFee) { return (rAmount, rAmount, 0, 0, 0); } rRfi = s.tRfi * currentRate; rBurn = s.tBurn * currentRate; rToSwap = s.tToSwap * currentRate; rTransferAmount = rAmount - rRfi - rBurn - rToSwap; return (rAmount, rTransferAmount, rBurn, 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 { 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) { _tTotal = _tTotal -= s.tBurn; _rTotal = _rTotal -= s.rBurn; _reflectRfi(s.rRfi, s.tRfi); _takeToSwap(s.rToSwap, s.tToSwap); emit Transfer(sender, address(this), s.tToSwap); } if (!_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) { require(tradingOpen, "Trading not enabled yet"); } 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 addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); // we give the remaining tax to dev & marketing wallets uint256 remainingBalance = address(this).balance; uint256 devFee = (remainingBalance * appliedRates.dev) / (denominator - appliedRates.dev); uint256 marketingFee = (remainingBalance * appliedRates.marketing) / (denominator - appliedRates.marketing); devAddress.sendValue(devFee); 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 devAddress, 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 _Burn, uint8 _marketing, uint8 _dev, uint8 _lp ) external onlyOwner { require( _rfi + _Burn + _marketing + _dev + _lp <= 20, "Total sell fees cannot be over 20%" ); buyRates.rfi = _rfi; buyRates.burn = _Burn; buyRates.marketing = _marketing; buyRates.dev = _dev; buyRates.lp = _lp; buyRates.toSwap = _marketing + _dev + _lp; } function setSellFees( uint8 _rfi, uint8 _Burn, uint8 _marketing, uint8 _dev, uint8 _lp ) external onlyOwner { require( _rfi + _Burn + _marketing + _dev + _lp <= 20, "Total sell fees cannot be over 20%" ); sellRates.rfi = _rfi; sellRates.burn = _Burn; sellRates.marketing = _marketing; sellRates.dev = _dev; sellRates.lp = _lp; sellRates.toSwap = _marketing + _dev + _lp; } function setMaxTransactionAmount( uint256 _maxTxAmountBuyPct, uint256 _maxTxAmountSellPct ) external onlyOwner { require( _maxTxAmountSellPct <= 200, "Max Tx AmountSell cannot be less than 0.5%" ); 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 setDevAddress(address payable _devAddress) external onlyOwner { devAddress = _devAddress; } function withdrawBNB(uint256 amount) external onlyOwner { if (amount == 0) payable(owner()).transfer(address(this).balance); else payable(owner()).transfer(amount); } function withdrawForeignToken(address token) external onlyOwner { IERC20(address(token)).transfer( msg.sender, IERC20(token).balanceOf(address(this)) ); } function manualSwapAndAddToLiq() external onlyOwner { swapAndLiquify(balanceOf(address(this))); } function unblacklistSniper(address botAddress) external onlyOwner { require( isBot[botAddress], "address provided is already not blacklisted" ); isBot[botAddress] = false; emit BlacklistedUser(botAddress, false); } function setMaxWalletAmount(uint256 _maxWalletAmountPct) external onlyOwner { require( _maxWalletAmountPct <= 200, "Max Wallet Ammount cannot be less than 0,5%" ); maxWalletAmount = _tTotal / _maxWalletAmountPct; 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); } function updateBlocksToWait(uint256 numberOfBlocks) external onlyOwner { require(numberOfBlocks < 10,"Too many blocks"); blocksToWait = numberOfBlocks; } function enableTrading() external onlyOwner { tradingOpen = true; liqAddedBlockNumber = block.number; } }
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":"devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"MarketingAndDevFeesAdded","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":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"burn","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"dev","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":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromMaxWallet","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":"manualSwapAndAddToLiq","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":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"dev","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":"_Burn","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","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":"_Burn","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_dev","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":[],"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":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"burn","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":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"}],"name":"unblacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfBlocks","type":"uint256"}],"name":"updateBlocksToWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a6200073d565b62000023906402540be40062000755565b600981905562000036906000196200076f565b620000449060001962000792565b600a556009600a6200005791906200073d565b6200006790630bebc20062000755565b600b55620000786009600a6200073d565b62000088906302faf08062000755565b600c55620000996009600a6200073d565b620000a9906317d7840062000755565b600d556001600f556014805461ffff60a01b1916600160a01b179055620000d36009600a6200073d565b620000e390630a6e49c062000755565b6015556040805160c0808201835260028083526001602080850182905284860183905260006060808701829052608080880183905260a09788018690526016805465ffffffffffff1990811665020000020102908117928390558b51998a018c52888a529589019690965298870186905290860182905285015292909301819052601780549093169091179091556018805461ffff191661010080850460ff9081169091029190911790921763ffff0000191663ff0000001962010000808604851602161763010000008085048416021761ffff60201b191660ff60281b196401000000008086048516021617650100000000009384900492909216909202179055348015620001f257600080fd5b50620001fe33620005d8565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000256573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027c9190620007a8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f09190620007a8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200033e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003649190620007a8565b601480546001600160a01b0319166001600160a01b039283169081178255600090815260126020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360138054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620004056000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600090812091909155601180546001600160a01b0319908116331790915560108054909116731a9b52c9223c2818d5032893e9069a668a1760bb179055600190600490620004716000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260049093528183208054851660019081179091556011549091168352818320805485168217905530835290822080549093168117909255600690620004f36000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260069093528183208054851660019081179091556011548216845282842080548616821790553084528284208054861682179055601454909116835291208054909216179055620005816000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620005c991815260200190565b60405180910390a350620007d3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200067f57816000190482111562000663576200066362000628565b808516156200067157918102915b93841c939080029062000643565b509250929050565b600082620006985750600162000737565b81620006a75750600062000737565b8160018114620006c05760028114620006cb57620006eb565b600191505062000737565b60ff841115620006df57620006df62000628565b50506001821b62000737565b5060208310610133831016604e8410600b841016171562000710575081810a62000737565b6200071c83836200063e565b806000190482111562000733576200073362000628565b0290505b92915050565b60006200074e60ff84168362000687565b9392505050565b808202811582820484141762000737576200073762000628565b6000826200078d57634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111562000737576200073762000628565b600060208284031215620007bb57600080fd5b81516001600160a01b03811681146200074e57600080fd5b613a6c80620007e36000396000f3fe6080604052600436106103905760003560e01c80638a0eef5a116101dc578063c49b9a8011610102578063d6c180bf116100a0578063ea2f0b371161006f578063ea2f0b3714610bd6578063ee6b268814610bf6578063f2fde38b14610c16578063ffb54a9914610c3657600080fd5b8063d6c180bf14610b44578063d8dcac4f14610b5a578063dcf4242414610b70578063dd62ed3e14610b9057600080fd5b8063d12a7688116100dc578063d12a768814610ac8578063d1d7d7ef14610ade578063d2fcc00114610b0e578063d44e586e14610b2e57600080fd5b8063c49b9a8014610a68578063c816841b14610a88578063d0d41fe114610aa857600080fd5b80639a7a23d61161017a578063a5ece94111610149578063a5ece941146109f2578063a9059cbb14610a12578063aa4bde2814610a32578063bd94545b14610a4857600080fd5b80639a7a23d6146109585780639ba5e4d514610978578063a13849ae146109b2578063a457c2d7146109d257600080fd5b8063906e9dd0116101b6578063906e9dd0146108d5578063958b0f20146108f557806395d89b411461090a57806396344eea1461093857600080fd5b80638a0eef5a1461088c5780638a8c523c146108a25780638da5cb5b146108b757600080fd5b80633bbac579116102c157806370a082311161025f578063768dc7101161022e578063768dc710146107d35780637949a40314610803578063885a4cd01461083357806388f820201461085357600080fd5b806370a08231146106ce578063713898cd146106ee578063715018a61461077457806373cafdc21461078957600080fd5b80634a74bb021161029b5780634a74bb021461061b57806352390c021461063c5780635342acb41461065c5780636dd3d39f1461069557600080fd5b80633bbac579146105ab578063437823ec146105db5780634549b039146105fb57600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce5671461052f5780633685d4191461054b578063395093511461056b5780633ad10ef61461058b57600080fd5b806323b872dd146104cf57806327a14fc2146104ef5780632d8381191461050f57600080fd5b8063095ea7b31161036a578063095ea7b314610440578063127f4b2e1461047057806315952f541461049057806318160ddd146104b057600080fd5b8063046797801461039c578063055add0d146103be57806306fdde031461040057600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b7366004613404565b610c57565b005b3480156103ca57600080fd5b506013546103e39061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040c57600080fd5b5060408051808201909152600e81526d151a5d1b1948141c9bdd1bd8dbdb60921b60208201525b6040516103f7919061341d565b34801561044c57600080fd5b5061046061045b366004613480565b610ca6565b60405190151581526020016103f7565b34801561047c57600080fd5b506103bc61048b366004613404565b610cbd565b34801561049c57600080fd5b506103bc6104ab3660046134ac565b610d69565b3480156104bc57600080fd5b506009545b6040519081526020016103f7565b3480156104db57600080fd5b506104606104ea3660046134c9565b610e66565b3480156104fb57600080fd5b506103bc61050a366004613404565b610f10565b34801561051b57600080fd5b506104c161052a366004613404565b610fe9565b34801561053b57600080fd5b50604051600981526020016103f7565b34801561055757600080fd5b506103bc6105663660046134ac565b61106d565b34801561057757600080fd5b50610460610586366004613480565b61121f565b34801561059757600080fd5b506011546103e3906001600160a01b031681565b3480156105b757600080fd5b506104606105c63660046134ac565b60076020526000908152604090205460ff1681565b3480156105e757600080fd5b506103bc6105f63660046134ac565b61125b565b34801561060757600080fd5b506104c1610616366004613518565b6112a9565b34801561062757600080fd5b5060145461046090600160a01b900460ff1681565b34801561064857600080fd5b506103bc6106573660046134ac565b611333565b34801561066857600080fd5b506104606106773660046134ac565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106a157600080fd5b506104606106b03660046134ac565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106da57600080fd5b506104c16106e93660046134ac565b611486565b3480156106fa57600080fd5b506017546107389060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691600160281b90041686565b6040805160ff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103f7565b34801561078057600080fd5b506103bc6114e5565b34801561079557600080fd5b506016546107389060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691600160281b90041686565b3480156107df57600080fd5b506104606107ee3660046134ac565b60046020526000908152604090205460ff1681565b34801561080f57600080fd5b5061046061081e3660046134ac565b60126020526000908152604090205460ff1681565b34801561083f57600080fd5b506103bc61084e3660046134ac565b61151b565b34801561085f57600080fd5b5061046061086e3660046134ac565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561089857600080fd5b506104c1600e5481565b3480156108ae57600080fd5b506103bc611626565b3480156108c357600080fd5b506000546001600160a01b03166103e3565b3480156108e157600080fd5b506103bc6108f03660046134ac565b611669565b34801561090157600080fd5b506103bc6116b5565b34801561091657600080fd5b506040805180820190915260058152645449544c4560d81b6020820152610433565b34801561094457600080fd5b506103bc61095336600461355e565b6116f0565b34801561096457600080fd5b506103bc6109733660046135c3565b6117f7565b34801561098457600080fd5b50601954601a54601b5461099792919083565b604080519384526020840192909252908201526060016103f7565b3480156109be57600080fd5b506103bc6109cd366004613404565b61197c565b3480156109de57600080fd5b506104606109ed366004613480565b6119ed565b3480156109fe57600080fd5b506010546103e3906001600160a01b031681565b348015610a1e57600080fd5b50610460610a2d366004613480565b611a86565b348015610a3e57600080fd5b506104c1600d5481565b348015610a5457600080fd5b506103bc610a633660046135f1565b611a93565b348015610a7457600080fd5b506103bc610a83366004613677565b611c64565b348015610a9457600080fd5b506014546103e3906001600160a01b031681565b348015610ab457600080fd5b506103bc610ac33660046134ac565b611cdb565b348015610ad457600080fd5b506104c160155481565b348015610aea57600080fd5b50610460610af93660046134ac565b60066020526000908152604090205460ff1681565b348015610b1a57600080fd5b506103bc610b293660046135c3565b611d27565b348015610b3a57600080fd5b506104c1600c5481565b348015610b5057600080fd5b506104c1600b5481565b348015610b6657600080fd5b506104c1600f5481565b348015610b7c57600080fd5b506103bc610b8b366004613694565b611e3d565b348015610b9c57600080fd5b506104c1610bab3660046136b6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610be257600080fd5b506103bc610bf13660046134ac565b611ef1565b348015610c0257600080fd5b506103bc610c1136600461355e565b611f3c565b348015610c2257600080fd5b506103bc610c313660046134ac565b612043565b348015610c4257600080fd5b5060145461046090600160a81b900460ff1681565b6000546001600160a01b03163314610c8a5760405162461bcd60e51b8152600401610c81906136e4565b60405180910390fd5b610c966009600a613813565b610ca09082613822565b60155550565b6000610cb33384846120db565b5060015b92915050565b6000546001600160a01b03163314610ce75760405162461bcd60e51b8152600401610c81906136e4565b80600003610d2d57600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610d29573d6000803e3d6000fd5b5050565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610d29573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610d935760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03811660009081526007602052604090205460ff16610e0f5760405162461bcd60e51b815260206004820152602b60248201527f616464726573732070726f766964656420697320616c7265616479206e6f742060448201526a189b1858dadb1a5cdd195960aa1b6064820152608401610c81565b6001600160a01b0381166000818152600760209081526040808320805460ff191690555192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a250565b6000610e738484846121ff565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610ef85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c81565b610f0585338584036120db565b506001949350505050565b6000546001600160a01b03163314610f3a5760405162461bcd60e51b8152600401610c81906136e4565b60c8811115610f9f5760405162461bcd60e51b815260206004820152602b60248201527f4d61782057616c6c657420416d6d6f756e742063616e6e6f74206265206c657360448201526a73207468616e20302c352560a81b6064820152608401610c81565b80600954610fad9190613839565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000600a548211156110505760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c81565b600061105a6126f5565b90506110668184613839565b9392505050565b6000546001600160a01b031633146110975760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03811660009081526005602052604090205460ff166110ff5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c81565b60005b600854811015610d2957816001600160a01b0316600882815481106111295761112961385b565b6000918252602090912001546001600160a01b03160361120d576008805461115390600190613871565b815481106111635761116361385b565b600091825260209091200154600880546001600160a01b03909216918390811061118f5761118f61385b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806111e7576111e7613884565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806112178161389a565b915050611102565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610cb39185906112569086906138b3565b6120db565b6000546001600160a01b031633146112855760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156112fd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c81565b8161131957600061130f846001612718565b519150610cb79050565b6000611326846001612718565b602001519150610cb79050565b6000546001600160a01b0316331461135d5760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03811660009081526005602052604090205460ff16156113c65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c81565b6001600160a01b03811660009081526001602052604090205415611420576001600160a01b03811660009081526001602052604090205461140690610fe9565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156114c357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cb790610fe9565b6000546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610c81906136e4565b611519600061275b565b565b6000546001600160a01b031633146115455760405162461bcd60e51b8152600401610c81906136e4565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b791906138c6565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611602573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2991906138df565b6000546001600160a01b031633146116505760405162461bcd60e51b8152600401610c81906136e4565b6014805460ff60a81b1916600160a81b17905543600e55565b6000546001600160a01b031633146116935760405162461bcd60e51b8152600401610c81906136e4565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116df5760405162461bcd60e51b8152600401610c81906136e4565b6115196116eb30611486565b6127ab565b6000546001600160a01b0316331461171a5760405162461bcd60e51b8152600401610c81906136e4565b6014818385611729888a6138fc565b61173391906138fc565b61173d91906138fc565b61174791906138fc565b60ff1611156117685760405162461bcd60e51b8152600401610c8190613915565b6016805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff0000001916176301000000858316021764ff000000001916600160201b91841691909102179055806117c783856138fc565b6117d191906138fc565b6016805460ff92909216600160281b0260ff60281b199092169190911790555050505050565b6000546001600160a01b031633146118215760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036118b75760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610c81565b6001600160a01b0382166000908152601260205260409020805460ff19168215801591909117909155611940576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000546001600160a01b031633146119a65760405162461bcd60e51b8152600401610c81906136e4565b600a81106119e85760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920626c6f636b7360881b6044820152606401610c81565b600f55565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611a6f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c81565b611a7c33858584036120db565b5060019392505050565b6000610cb33384846121ff565b6000546001600160a01b03163314611abd5760405162461bcd60e51b8152600401610c81906136e4565b60005b82811015611c5e5781151560066000868685818110611ae157611ae161385b565b9050602002016020810190611af691906134ac565b6001600160a01b0316815260208101919091526040016000205460ff16151503611b925760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656064820152601d60fa1b608482015260a401610c81565b8160066000868685818110611ba957611ba961385b565b9050602002016020810190611bbe91906134ac565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2858584818110611c1c57611c1c61385b565b9050602002016020810190611c3191906134ac565b6040516001600160a01b03909116815260200160405180910390a280611c568161389a565b915050611ac0565b50505050565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610c81906136e4565b60148054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fde90831515815260200190565b6000546001600160a01b03163314611d055760405162461bcd60e51b8152600401610c81906136e4565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d515760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611ddc5760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610c81565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b03163314611e675760405162461bcd60e51b8152600401610c81906136e4565b60c8811115611ecb5760405162461bcd60e51b815260206004820152602a60248201527f4d617820547820416d6f756e7453656c6c2063616e6e6f74206265206c657373604482015269207468616e20302e352560b01b6064820152608401610c81565b81600954611ed99190613839565b600b55600954611eea908290613839565b600c555050565b6000546001600160a01b03163314611f1b5760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611f665760405162461bcd60e51b8152600401610c81906136e4565b6014818385611f75888a6138fc565b611f7f91906138fc565b611f8991906138fc565b611f9391906138fc565b60ff161115611fb45760405162461bcd60e51b8152600401610c8190613915565b6017805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff0000001916176301000000858316021764ff000000001916600160201b918416919091021790558061201383856138fc565b61201d91906138fc565b6017805460ff92909216600160281b0260ff60281b199092169190911790555050505050565b6000546001600160a01b0316331461206d5760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b0381166120d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c81565b610d668161275b565b6001600160a01b03831661213d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c81565b6001600160a01b03821661219e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c81565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122635760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c81565b6001600160a01b0382166122c55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c81565b6001600160a01b03831660009081526007602052604090205460ff161561232e5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610c81565b600081116123905760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c81565b61239983611486565b8111156124025760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c81565b6001600160a01b03831660009081526004602052604081205460ff168061244157506001600160a01b03831660009081526004602052604090205460ff165b1590508015612682576001600160a01b03841660009081526012602052604090205460ff16156125ae57600f54600e5461247b91906138b3565b4310156124df576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021765ffff000000001916600160201b80850483160260ff60281b191617600160281b9384900491909116909202919091179055600b548211156125a95760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610c81565b612682565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021765ffff000000001916600160201b80850483160260ff60281b191617600160281b9384900491909116909202919091179055600c548211156126825760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610c81565b60155461268e30611486565b1015801561269f575060135460ff16155b80156126c457506001600160a01b03841660009081526012602052604090205460ff16155b80156126d95750601454600160a01b900460ff165b156126e9576126e96015546127ab565b611c5e8484848461292d565b6000806000612702612c8e565b90925090506127118183613839565b9250505090565b6127206133b8565b61272a8383612e11565b905061273f81848461273a6126f5565b612ed2565b6080860152606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6013805460ff191660011790556018546000906127d390600160281b900460ff166002613957565b60185460ff918216925060009183916127f591600160201b9091041685613822565b6127ff9190613839565b9050600061280d8285613871565b90504761281982612f62565b60006128258247613871565b60185490915060009061284290600160201b900460ff1687613871565b60185461285990600160201b900460ff1684613822565b6128639190613839565b905061286f8582613115565b601854479060009061288b906301000000900460ff1689613871565b6018546128a2906301000000900460ff1684613822565b6128ac9190613839565b6018549091506000906128c89062010000900460ff168a613871565b6018546128de9062010000900460ff1685613822565b6128e89190613839565b601154909150612901906001600160a01b0316836131ef565b601054612917906001600160a01b0316826131ef565b50506013805460ff191690555050505050505050565b60006129398383612718565b6001600160a01b03861660009081526005602052604090205490915060ff161561298b576001600160a01b03851660009081526002602052604081208054859290612985908490613871565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156129df5760a08101516001600160a01b038516600090815260026020526040812080549091906129d99084906138b3565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612a09908490613871565b90915550506020808201516001600160a01b0386166000908152600190925260408220805491929091612a3d9084906138b3565b90915550508115612b01578060e0015160096000828254612a5e9190613871565b9182905550600955506060810151600a8054600090612a7e908490613871565b9182905550600a5550604081015160c0820151612a9b919061330d565b612aae8160800151826101000151613342565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612af891815260200190565b60405180910390a35b6001600160a01b03851660009081526004602052604090205460ff16158015612b4357506001600160a01b03841660009081526004602052604090205460ff16155b15612ba157601454600160a81b900460ff16612ba15760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610c81565b6001600160a01b03841660009081526006602052604090205460ff1680612bd25750600d54612bcf85611486565b11155b612c365760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610c81565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a00151604051612c7f91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612de057826001600060088481548110612cbd57612cbd61385b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d285750816002600060088481548110612d0157612d0161385b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d3e57600a54600954945094505050509091565b6001600060088381548110612d5557612d5561385b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d849084613871565b92506002600060088381548110612d9d57612d9d61385b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dcc9083613871565b915080612dd88161389a565b915050612c9b565b50600954600a54612df19190613839565b821015612e0857600a546009549350935050509091565b90939092509050565b612e196133b8565b81612e2a5760a08101839052610cb7565b601854606490612e3d9060ff1685613822565b612e479190613839565b60c0820152601854606490612e6490610100900460ff1685613822565b612e6e9190613839565b60e0820152601854606490612e8d90600160281b900460ff1685613822565b612e979190613839565b610100820181905260e082015160c0830151612eb39086613871565b612ebd9190613871565b612ec79190613871565b60a082015292915050565b600080808080612ee28689613822565b945086612efa57508392506000915081905080612f57565b858960c00151612f0a9190613822565b9250858960e00151612f1c9190613822565b915085896101000151612f2f9190613822565b90508082612f3d8588613871565b612f479190613871565b612f519190613871565b93509091905b945094509450945094565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f9757612f9761385b565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e919061397a565b816001815181106130415761304161385b565b6001600160a01b039283166020918202929092018101919091526013543060009081526003835260408082206101009093049094168152915220548211156130a2576013546130a290309061010090046001600160a01b03166000196120db565b60135460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906130df908590600090869030904290600401613997565b600060405180830381600087803b1580156130f957600080fd5b505af115801561310d573d6000803e3d6000fd5b505050505050565b60135460115460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af115801561318a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131af9190613a08565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b8047101561323f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c81565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461328c576040519150601f19603f3d011682016040523d82523d6000602084013e613291565b606091505b50509050806133085760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c81565b505050565b81600a600082825461331f9190613871565b9091555050601980548291906000906133399084906138b3565b90915550505050565b30600090815260016020526040812080548492906133619084906138b3565b90915550503060009081526005602052604090205460ff16156133a357306000908152600260205260408120805483929061339d9084906138b3565b90915550505b806019600201600082825461333991906138b3565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020828403121561341657600080fd5b5035919050565b600060208083528351808285015260005b8181101561344a5785810183015185820160400152820161342e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d6657600080fd5b6000806040838503121561349357600080fd5b823561349e8161346b565b946020939093013593505050565b6000602082840312156134be57600080fd5b81356110668161346b565b6000806000606084860312156134de57600080fd5b83356134e98161346b565b925060208401356134f98161346b565b929592945050506040919091013590565b8015158114610d6657600080fd5b6000806040838503121561352b57600080fd5b82359150602083013561353d8161350a565b809150509250929050565b803560ff8116811461355957600080fd5b919050565b600080600080600060a0868803121561357657600080fd5b61357f86613548565b945061358d60208701613548565b935061359b60408701613548565b92506135a960608701613548565b91506135b760808701613548565b90509295509295909350565b600080604083850312156135d657600080fd5b82356135e18161346b565b9150602083013561353d8161350a565b60008060006040848603121561360657600080fd5b833567ffffffffffffffff8082111561361e57600080fd5b818601915086601f83011261363257600080fd5b81358181111561364157600080fd5b8760208260051b850101111561365657600080fd5b6020928301955093505084013561366c8161350a565b809150509250925092565b60006020828403121561368957600080fd5b81356110668161350a565b600080604083850312156136a757600080fd5b50508035926020909101359150565b600080604083850312156136c957600080fd5b82356136d48161346b565b9150602083013561353d8161346b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561376a57816000190482111561375057613750613719565b8085161561375d57918102915b93841c9390800290613734565b509250929050565b60008261378157506001610cb7565b8161378e57506000610cb7565b81600181146137a457600281146137ae576137ca565b6001915050610cb7565b60ff8411156137bf576137bf613719565b50506001821b610cb7565b5060208310610133831016604e8410600b84101617156137ed575081810a610cb7565b6137f7838361372f565b806000190482111561380b5761380b613719565b029392505050565b600061106660ff841683613772565b8082028115828204841417610cb757610cb7613719565b60008261385657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610cb757610cb7613719565b634e487b7160e01b600052603160045260246000fd5b6000600182016138ac576138ac613719565b5060010190565b80820180821115610cb757610cb7613719565b6000602082840312156138d857600080fd5b5051919050565b6000602082840312156138f157600080fd5b81516110668161350a565b60ff8181168382160190811115610cb757610cb7613719565b60208082526022908201527f546f74616c2073656c6c20666565732063616e6e6f74206265206f7665722032604082015261302560f01b606082015260800190565b60ff818116838216029081169081811461397357613973613719565b5092915050565b60006020828403121561398c57600080fd5b81516110668161346b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139e75784516001600160a01b0316835293830193918301916001016139c2565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a1d57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122017e1bbb23cfd2f4725dd4935fc48e1003e18078c2293593aed6c2fb63759b75e64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103905760003560e01c80638a0eef5a116101dc578063c49b9a8011610102578063d6c180bf116100a0578063ea2f0b371161006f578063ea2f0b3714610bd6578063ee6b268814610bf6578063f2fde38b14610c16578063ffb54a9914610c3657600080fd5b8063d6c180bf14610b44578063d8dcac4f14610b5a578063dcf4242414610b70578063dd62ed3e14610b9057600080fd5b8063d12a7688116100dc578063d12a768814610ac8578063d1d7d7ef14610ade578063d2fcc00114610b0e578063d44e586e14610b2e57600080fd5b8063c49b9a8014610a68578063c816841b14610a88578063d0d41fe114610aa857600080fd5b80639a7a23d61161017a578063a5ece94111610149578063a5ece941146109f2578063a9059cbb14610a12578063aa4bde2814610a32578063bd94545b14610a4857600080fd5b80639a7a23d6146109585780639ba5e4d514610978578063a13849ae146109b2578063a457c2d7146109d257600080fd5b8063906e9dd0116101b6578063906e9dd0146108d5578063958b0f20146108f557806395d89b411461090a57806396344eea1461093857600080fd5b80638a0eef5a1461088c5780638a8c523c146108a25780638da5cb5b146108b757600080fd5b80633bbac579116102c157806370a082311161025f578063768dc7101161022e578063768dc710146107d35780637949a40314610803578063885a4cd01461083357806388f820201461085357600080fd5b806370a08231146106ce578063713898cd146106ee578063715018a61461077457806373cafdc21461078957600080fd5b80634a74bb021161029b5780634a74bb021461061b57806352390c021461063c5780635342acb41461065c5780636dd3d39f1461069557600080fd5b80633bbac579146105ab578063437823ec146105db5780634549b039146105fb57600080fd5b806323b872dd1161032e578063313ce56711610308578063313ce5671461052f5780633685d4191461054b578063395093511461056b5780633ad10ef61461058b57600080fd5b806323b872dd146104cf57806327a14fc2146104ef5780632d8381191461050f57600080fd5b8063095ea7b31161036a578063095ea7b314610440578063127f4b2e1461047057806315952f541461049057806318160ddd146104b057600080fd5b8063046797801461039c578063055add0d146103be57806306fdde031461040057600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b7366004613404565b610c57565b005b3480156103ca57600080fd5b506013546103e39061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040c57600080fd5b5060408051808201909152600e81526d151a5d1b1948141c9bdd1bd8dbdb60921b60208201525b6040516103f7919061341d565b34801561044c57600080fd5b5061046061045b366004613480565b610ca6565b60405190151581526020016103f7565b34801561047c57600080fd5b506103bc61048b366004613404565b610cbd565b34801561049c57600080fd5b506103bc6104ab3660046134ac565b610d69565b3480156104bc57600080fd5b506009545b6040519081526020016103f7565b3480156104db57600080fd5b506104606104ea3660046134c9565b610e66565b3480156104fb57600080fd5b506103bc61050a366004613404565b610f10565b34801561051b57600080fd5b506104c161052a366004613404565b610fe9565b34801561053b57600080fd5b50604051600981526020016103f7565b34801561055757600080fd5b506103bc6105663660046134ac565b61106d565b34801561057757600080fd5b50610460610586366004613480565b61121f565b34801561059757600080fd5b506011546103e3906001600160a01b031681565b3480156105b757600080fd5b506104606105c63660046134ac565b60076020526000908152604090205460ff1681565b3480156105e757600080fd5b506103bc6105f63660046134ac565b61125b565b34801561060757600080fd5b506104c1610616366004613518565b6112a9565b34801561062757600080fd5b5060145461046090600160a01b900460ff1681565b34801561064857600080fd5b506103bc6106573660046134ac565b611333565b34801561066857600080fd5b506104606106773660046134ac565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106a157600080fd5b506104606106b03660046134ac565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106da57600080fd5b506104c16106e93660046134ac565b611486565b3480156106fa57600080fd5b506017546107389060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691600160281b90041686565b6040805160ff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103f7565b34801561078057600080fd5b506103bc6114e5565b34801561079557600080fd5b506016546107389060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691600160281b90041686565b3480156107df57600080fd5b506104606107ee3660046134ac565b60046020526000908152604090205460ff1681565b34801561080f57600080fd5b5061046061081e3660046134ac565b60126020526000908152604090205460ff1681565b34801561083f57600080fd5b506103bc61084e3660046134ac565b61151b565b34801561085f57600080fd5b5061046061086e3660046134ac565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561089857600080fd5b506104c1600e5481565b3480156108ae57600080fd5b506103bc611626565b3480156108c357600080fd5b506000546001600160a01b03166103e3565b3480156108e157600080fd5b506103bc6108f03660046134ac565b611669565b34801561090157600080fd5b506103bc6116b5565b34801561091657600080fd5b506040805180820190915260058152645449544c4560d81b6020820152610433565b34801561094457600080fd5b506103bc61095336600461355e565b6116f0565b34801561096457600080fd5b506103bc6109733660046135c3565b6117f7565b34801561098457600080fd5b50601954601a54601b5461099792919083565b604080519384526020840192909252908201526060016103f7565b3480156109be57600080fd5b506103bc6109cd366004613404565b61197c565b3480156109de57600080fd5b506104606109ed366004613480565b6119ed565b3480156109fe57600080fd5b506010546103e3906001600160a01b031681565b348015610a1e57600080fd5b50610460610a2d366004613480565b611a86565b348015610a3e57600080fd5b506104c1600d5481565b348015610a5457600080fd5b506103bc610a633660046135f1565b611a93565b348015610a7457600080fd5b506103bc610a83366004613677565b611c64565b348015610a9457600080fd5b506014546103e3906001600160a01b031681565b348015610ab457600080fd5b506103bc610ac33660046134ac565b611cdb565b348015610ad457600080fd5b506104c160155481565b348015610aea57600080fd5b50610460610af93660046134ac565b60066020526000908152604090205460ff1681565b348015610b1a57600080fd5b506103bc610b293660046135c3565b611d27565b348015610b3a57600080fd5b506104c1600c5481565b348015610b5057600080fd5b506104c1600b5481565b348015610b6657600080fd5b506104c1600f5481565b348015610b7c57600080fd5b506103bc610b8b366004613694565b611e3d565b348015610b9c57600080fd5b506104c1610bab3660046136b6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610be257600080fd5b506103bc610bf13660046134ac565b611ef1565b348015610c0257600080fd5b506103bc610c1136600461355e565b611f3c565b348015610c2257600080fd5b506103bc610c313660046134ac565b612043565b348015610c4257600080fd5b5060145461046090600160a81b900460ff1681565b6000546001600160a01b03163314610c8a5760405162461bcd60e51b8152600401610c81906136e4565b60405180910390fd5b610c966009600a613813565b610ca09082613822565b60155550565b6000610cb33384846120db565b5060015b92915050565b6000546001600160a01b03163314610ce75760405162461bcd60e51b8152600401610c81906136e4565b80600003610d2d57600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610d29573d6000803e3d6000fd5b5050565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015610d29573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610d935760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03811660009081526007602052604090205460ff16610e0f5760405162461bcd60e51b815260206004820152602b60248201527f616464726573732070726f766964656420697320616c7265616479206e6f742060448201526a189b1858dadb1a5cdd195960aa1b6064820152608401610c81565b6001600160a01b0381166000818152600760209081526040808320805460ff191690555192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a250565b6000610e738484846121ff565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610ef85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c81565b610f0585338584036120db565b506001949350505050565b6000546001600160a01b03163314610f3a5760405162461bcd60e51b8152600401610c81906136e4565b60c8811115610f9f5760405162461bcd60e51b815260206004820152602b60248201527f4d61782057616c6c657420416d6d6f756e742063616e6e6f74206265206c657360448201526a73207468616e20302c352560a81b6064820152608401610c81565b80600954610fad9190613839565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000600a548211156110505760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c81565b600061105a6126f5565b90506110668184613839565b9392505050565b6000546001600160a01b031633146110975760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03811660009081526005602052604090205460ff166110ff5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c81565b60005b600854811015610d2957816001600160a01b0316600882815481106111295761112961385b565b6000918252602090912001546001600160a01b03160361120d576008805461115390600190613871565b815481106111635761116361385b565b600091825260209091200154600880546001600160a01b03909216918390811061118f5761118f61385b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560088054806111e7576111e7613884565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806112178161389a565b915050611102565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610cb39185906112569086906138b3565b6120db565b6000546001600160a01b031633146112855760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006009548311156112fd5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c81565b8161131957600061130f846001612718565b519150610cb79050565b6000611326846001612718565b602001519150610cb79050565b6000546001600160a01b0316331461135d5760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03811660009081526005602052604090205460ff16156113c65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c81565b6001600160a01b03811660009081526001602052604090205415611420576001600160a01b03811660009081526001602052604090205461140690610fe9565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff16156114c357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610cb790610fe9565b6000546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610c81906136e4565b611519600061275b565b565b6000546001600160a01b031633146115455760405162461bcd60e51b8152600401610c81906136e4565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b791906138c6565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611602573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2991906138df565b6000546001600160a01b031633146116505760405162461bcd60e51b8152600401610c81906136e4565b6014805460ff60a81b1916600160a81b17905543600e55565b6000546001600160a01b031633146116935760405162461bcd60e51b8152600401610c81906136e4565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116df5760405162461bcd60e51b8152600401610c81906136e4565b6115196116eb30611486565b6127ab565b6000546001600160a01b0316331461171a5760405162461bcd60e51b8152600401610c81906136e4565b6014818385611729888a6138fc565b61173391906138fc565b61173d91906138fc565b61174791906138fc565b60ff1611156117685760405162461bcd60e51b8152600401610c8190613915565b6016805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff0000001916176301000000858316021764ff000000001916600160201b91841691909102179055806117c783856138fc565b6117d191906138fc565b6016805460ff92909216600160281b0260ff60281b199092169190911790555050505050565b6000546001600160a01b031633146118215760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036118b75760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610c81565b6001600160a01b0382166000908152601260205260409020805460ff19168215801591909117909155611940576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000546001600160a01b031633146119a65760405162461bcd60e51b8152600401610c81906136e4565b600a81106119e85760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920626c6f636b7360881b6044820152606401610c81565b600f55565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611a6f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c81565b611a7c33858584036120db565b5060019392505050565b6000610cb33384846121ff565b6000546001600160a01b03163314611abd5760405162461bcd60e51b8152600401610c81906136e4565b60005b82811015611c5e5781151560066000868685818110611ae157611ae161385b565b9050602002016020810190611af691906134ac565b6001600160a01b0316815260208101919091526040016000205460ff16151503611b925760405162461bcd60e51b815260206004820152604160248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960448201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656064820152601d60fa1b608482015260a401610c81565b8160066000868685818110611ba957611ba961385b565b9050602002016020810190611bbe91906134ac565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2858584818110611c1c57611c1c61385b565b9050602002016020810190611c3191906134ac565b6040516001600160a01b03909116815260200160405180910390a280611c568161389a565b915050611ac0565b50505050565b6000546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610c81906136e4565b60148054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610fde90831515815260200190565b6000546001600160a01b03163314611d055760405162461bcd60e51b8152600401610c81906136e4565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d515760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611ddc5760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610c81565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b03163314611e675760405162461bcd60e51b8152600401610c81906136e4565b60c8811115611ecb5760405162461bcd60e51b815260206004820152602a60248201527f4d617820547820416d6f756e7453656c6c2063616e6e6f74206265206c657373604482015269207468616e20302e352560b01b6064820152608401610c81565b81600954611ed99190613839565b600b55600954611eea908290613839565b600c555050565b6000546001600160a01b03163314611f1b5760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611f665760405162461bcd60e51b8152600401610c81906136e4565b6014818385611f75888a6138fc565b611f7f91906138fc565b611f8991906138fc565b611f9391906138fc565b60ff161115611fb45760405162461bcd60e51b8152600401610c8190613915565b6017805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff0000001916176301000000858316021764ff000000001916600160201b918416919091021790558061201383856138fc565b61201d91906138fc565b6017805460ff92909216600160281b0260ff60281b199092169190911790555050505050565b6000546001600160a01b0316331461206d5760405162461bcd60e51b8152600401610c81906136e4565b6001600160a01b0381166120d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c81565b610d668161275b565b6001600160a01b03831661213d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c81565b6001600160a01b03821661219e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c81565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122635760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c81565b6001600160a01b0382166122c55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c81565b6001600160a01b03831660009081526007602052604090205460ff161561232e5760405162461bcd60e51b815260206004820181905260248201527f45524332303a206164647265737320626c61636b6c69737465642028626f74296044820152606401610c81565b600081116123905760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c81565b61239983611486565b8111156124025760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610c81565b6001600160a01b03831660009081526004602052604081205460ff168061244157506001600160a01b03831660009081526004602052604090205460ff165b1590508015612682576001600160a01b03841660009081526012602052604090205460ff16156125ae57600f54600e5461247b91906138b3565b4310156124df576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b6016546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021765ffff000000001916600160201b80850483160260ff60281b191617600160281b9384900491909116909202919091179055600b548211156125a95760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610c81565b612682565b6017546018805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021765ffff000000001916600160201b80850483160260ff60281b191617600160281b9384900491909116909202919091179055600c548211156126825760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610c81565b60155461268e30611486565b1015801561269f575060135460ff16155b80156126c457506001600160a01b03841660009081526012602052604090205460ff16155b80156126d95750601454600160a01b900460ff165b156126e9576126e96015546127ab565b611c5e8484848461292d565b6000806000612702612c8e565b90925090506127118183613839565b9250505090565b6127206133b8565b61272a8383612e11565b905061273f81848461273a6126f5565b612ed2565b6080860152606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6013805460ff191660011790556018546000906127d390600160281b900460ff166002613957565b60185460ff918216925060009183916127f591600160201b9091041685613822565b6127ff9190613839565b9050600061280d8285613871565b90504761281982612f62565b60006128258247613871565b60185490915060009061284290600160201b900460ff1687613871565b60185461285990600160201b900460ff1684613822565b6128639190613839565b905061286f8582613115565b601854479060009061288b906301000000900460ff1689613871565b6018546128a2906301000000900460ff1684613822565b6128ac9190613839565b6018549091506000906128c89062010000900460ff168a613871565b6018546128de9062010000900460ff1685613822565b6128e89190613839565b601154909150612901906001600160a01b0316836131ef565b601054612917906001600160a01b0316826131ef565b50506013805460ff191690555050505050505050565b60006129398383612718565b6001600160a01b03861660009081526005602052604090205490915060ff161561298b576001600160a01b03851660009081526002602052604081208054859290612985908490613871565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156129df5760a08101516001600160a01b038516600090815260026020526040812080549091906129d99084906138b3565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612a09908490613871565b90915550506020808201516001600160a01b0386166000908152600190925260408220805491929091612a3d9084906138b3565b90915550508115612b01578060e0015160096000828254612a5e9190613871565b9182905550600955506060810151600a8054600090612a7e908490613871565b9182905550600a5550604081015160c0820151612a9b919061330d565b612aae8160800151826101000151613342565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836101000151604051612af891815260200190565b60405180910390a35b6001600160a01b03851660009081526004602052604090205460ff16158015612b4357506001600160a01b03841660009081526004602052604090205460ff16155b15612ba157601454600160a81b900460ff16612ba15760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610c81565b6001600160a01b03841660009081526006602052604090205460ff1680612bd25750600d54612bcf85611486565b11155b612c365760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610c81565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360a00151604051612c7f91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612de057826001600060088481548110612cbd57612cbd61385b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612d285750816002600060088481548110612d0157612d0161385b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612d3e57600a54600954945094505050509091565b6001600060088381548110612d5557612d5561385b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612d849084613871565b92506002600060088381548110612d9d57612d9d61385b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612dcc9083613871565b915080612dd88161389a565b915050612c9b565b50600954600a54612df19190613839565b821015612e0857600a546009549350935050509091565b90939092509050565b612e196133b8565b81612e2a5760a08101839052610cb7565b601854606490612e3d9060ff1685613822565b612e479190613839565b60c0820152601854606490612e6490610100900460ff1685613822565b612e6e9190613839565b60e0820152601854606490612e8d90600160281b900460ff1685613822565b612e979190613839565b610100820181905260e082015160c0830151612eb39086613871565b612ebd9190613871565b612ec79190613871565b60a082015292915050565b600080808080612ee28689613822565b945086612efa57508392506000915081905080612f57565b858960c00151612f0a9190613822565b9250858960e00151612f1c9190613822565b915085896101000151612f2f9190613822565b90508082612f3d8588613871565b612f479190613871565b612f519190613871565b93509091905b945094509450945094565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f9757612f9761385b565b60200260200101906001600160a01b031690816001600160a01b031681525050601360019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302e919061397a565b816001815181106130415761304161385b565b6001600160a01b039283166020918202929092018101919091526013543060009081526003835260408082206101009093049094168152915220548211156130a2576013546130a290309061010090046001600160a01b03166000196120db565b60135460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906130df908590600090869030904290600401613997565b600060405180830381600087803b1580156130f957600080fd5b505af115801561310d573d6000803e3d6000fd5b505050505050565b60135460115460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c40160606040518083038185885af115801561318a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131af9190613a08565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b8047101561323f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c81565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461328c576040519150601f19603f3d011682016040523d82523d6000602084013e613291565b606091505b50509050806133085760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610c81565b505050565b81600a600082825461331f9190613871565b9091555050601980548291906000906133399084906138b3565b90915550505050565b30600090815260016020526040812080548492906133619084906138b3565b90915550503060009081526005602052604090205460ff16156133a357306000908152600260205260408120805483929061339d9084906138b3565b90915550505b806019600201600082825461333991906138b3565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020828403121561341657600080fd5b5035919050565b600060208083528351808285015260005b8181101561344a5785810183015185820160400152820161342e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d6657600080fd5b6000806040838503121561349357600080fd5b823561349e8161346b565b946020939093013593505050565b6000602082840312156134be57600080fd5b81356110668161346b565b6000806000606084860312156134de57600080fd5b83356134e98161346b565b925060208401356134f98161346b565b929592945050506040919091013590565b8015158114610d6657600080fd5b6000806040838503121561352b57600080fd5b82359150602083013561353d8161350a565b809150509250929050565b803560ff8116811461355957600080fd5b919050565b600080600080600060a0868803121561357657600080fd5b61357f86613548565b945061358d60208701613548565b935061359b60408701613548565b92506135a960608701613548565b91506135b760808701613548565b90509295509295909350565b600080604083850312156135d657600080fd5b82356135e18161346b565b9150602083013561353d8161350a565b60008060006040848603121561360657600080fd5b833567ffffffffffffffff8082111561361e57600080fd5b818601915086601f83011261363257600080fd5b81358181111561364157600080fd5b8760208260051b850101111561365657600080fd5b6020928301955093505084013561366c8161350a565b809150509250925092565b60006020828403121561368957600080fd5b81356110668161350a565b600080604083850312156136a757600080fd5b50508035926020909101359150565b600080604083850312156136c957600080fd5b82356136d48161346b565b9150602083013561353d8161346b565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561376a57816000190482111561375057613750613719565b8085161561375d57918102915b93841c9390800290613734565b509250929050565b60008261378157506001610cb7565b8161378e57506000610cb7565b81600181146137a457600281146137ae576137ca565b6001915050610cb7565b60ff8411156137bf576137bf613719565b50506001821b610cb7565b5060208310610133831016604e8410600b84101617156137ed575081810a610cb7565b6137f7838361372f565b806000190482111561380b5761380b613719565b029392505050565b600061106660ff841683613772565b8082028115828204841417610cb757610cb7613719565b60008261385657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610cb757610cb7613719565b634e487b7160e01b600052603160045260246000fd5b6000600182016138ac576138ac613719565b5060010190565b80820180821115610cb757610cb7613719565b6000602082840312156138d857600080fd5b5051919050565b6000602082840312156138f157600080fd5b81516110668161350a565b60ff8181168382160190811115610cb757610cb7613719565b60208082526022908201527f546f74616c2073656c6c20666565732063616e6e6f74206265206f7665722032604082015261302560f01b606082015260800190565b60ff818116838216029081169081811461397357613973613719565b5092915050565b60006020828403121561398c57600080fd5b81516110668161346b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139e75784516001600160a01b0316835293830193918301916001016139c2565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613a1d57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122017e1bbb23cfd2f4725dd4935fc48e1003e18078c2293593aed6c2fb63759b75e64736f6c63430008110033
Deployed Bytecode Sourcemap
20928:23606:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42179:179;;;;;;;;;;-1:-1:-1;42179:179:0;;;;;:::i;:::-;;:::i;:::-;;22320:41;;;;;;;;;;-1:-1:-1;22320:41:0;;;;;;;-1:-1:-1;;;;;22320:41:0;;;;;;-1:-1:-1;;;;;389:32:1;;;371:51;;359:2;344:18;22320:41:0;;;;;;;;25863:83;;;;;;;;;;-1:-1:-1;25933:5:0;;;;;;;;;;;;-1:-1:-1;;;25933:5:0;;;;25863:83;;;;;;;:::i;26848:193::-;;;;;;;;;;-1:-1:-1;26848:193:0;;;;;:::i;:::-;;:::i;:::-;;;1607:14:1;;1600:22;1582:41;;1570:2;1555:18;26848:193:0;1442:187:1;42657:189:0;;;;;;;;;;-1:-1:-1;42657:189:0;;;;;:::i;:::-;;:::i;43184:281::-;;;;;;;;;;-1:-1:-1;43184:281:0;;;;;:::i;:::-;;:::i;26140:95::-;;;;;;;;;;-1:-1:-1;26220:7:0;;26140:95;;;2032:25:1;;;2020:2;2005:18;26140:95:0;1886:177:1;27049:521:0;;;;;;;;;;-1:-1:-1;27049:521:0;;;;;:::i;:::-;;:::i;43473:350::-;;;;;;;;;;-1:-1:-1;43473:350:0;;;;;:::i;:::-;;:::i;28998:319::-;;;;;;;;;;-1:-1:-1;28998:319:0;;;;;:::i;:::-;;:::i;26049:83::-;;;;;;;;;;-1:-1:-1;26049:83:0;;21490:1;2671:36:1;;2659:2;2644:18;26049:83:0;2529:184:1;29738:473:0;;;;;;;;;;-1:-1:-1;29738:473:0;;;;;:::i;:::-;;:::i;27578:297::-;;;;;;;;;;-1:-1:-1;27578:297:0;;;;;:::i;:::-;;:::i;22068:33::-;;;;;;;;;;-1:-1:-1;22068:33:0;;;;-1:-1:-1;;;;;22068:33:0;;;21373:37;;;;;;;;;;-1:-1:-1;21373:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30219:113;;;;;;;;;;-1:-1:-1;30219:113:0;;;;;:::i;:::-;;:::i;28501:489::-;;;;;;;;;;-1:-1:-1;28501:489:0;;;;;:::i;:::-;;:::i;22401:40::-;;;;;;;;;;-1:-1:-1;22401:40:0;;;;-1:-1:-1;;;22401:40:0;;;;;;29396:334;;;;;;;;;;-1:-1:-1;29396:334:0;;;;;:::i;:::-;;:::i;30993:124::-;;;;;;;;;;-1:-1:-1;30993:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;31082:27:0;31058:4;31082:27;;;:18;:27;;;;;;;;;30993:124;31125:168;;;;;;;;;;-1:-1:-1;31125:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;31252:33:0;31223:4;31252:33;;;:24;:33;;;;;;;;;31125:168;26243:198;;;;;;;;;;-1:-1:-1;26243:198:0;;;;;:::i;:::-;;:::i;23071:327::-;;;;;;;;;;-1:-1:-1;23071:327:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23071:327:0;;;;;-1:-1:-1;;;23071:327:0;;;;;;;;;3652:4:1;3683:15;;;3665:34;;3735:15;;;3730:2;3715:18;;3708:43;3787:15;;;3767:18;;;3760:43;;;;3839:15;;;3834:2;3819:18;;3812:43;3892:15;;3886:3;3871:19;;3864:44;3945:15;;;3939:3;3924:19;;3917:44;3629:3;3614:19;23071:327:0;3379:588:1;2403:94:0;;;;;;;;;;;;;:::i;22736:326::-;;;;;;;;;;-1:-1:-1;22736:326:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22736:326:0;;;;;-1:-1:-1;;;22736:326:0;;;;;21200:50;;;;;;;;;;-1:-1:-1;21200:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22110:58;;;;;;;;;;-1:-1:-1;22110:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42854:203;;;;;;;;;;-1:-1:-1;42854:203:0;;;;;:::i;:::-;;:::i;28373:120::-;;;;;;;;;;-1:-1:-1;28373:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;28465:20:0;28441:4;28465:20;;;:11;:20;;;;;;;;;28373:120;21941:34;;;;;;;;;;;;;;;;44403:126;;;;;;;;;;;;;:::i;1752:87::-;;;;;;;;;;-1:-1:-1;1798:7:0;1825:6;-1:-1:-1;;;;;1825:6:0;1752:87;;42366:161;;;;;;;;;;-1:-1:-1;42366:161:0;;;;;:::i;:::-;;:::i;43065:111::-;;;;;;;;;;;;;:::i;25954:87::-;;;;;;;;;;-1:-1:-1;26026:7:0;;;;;;;;;;;;-1:-1:-1;;;26026:7:0;;;;25954:87;;40675:518;;;;;;;;;;-1:-1:-1;40675:518:0;;;;;:::i;:::-;;:::i;40145:522::-;;;;;;;;;;-1:-1:-1;40145:522:0;;;;;:::i;:::-;;:::i;23571:36::-;;;;;;;;;;-1:-1:-1;23571:36:0;;;;;;;;;;;;;;;;5659:25:1;;;5715:2;5700:18;;5693:34;;;;5743:18;;;5736:34;5647:2;5632:18;23571:36:0;5457:319:1;44219:176:0;;;;;;;;;;-1:-1:-1;44219:176:0;;;;;:::i;:::-;;:::i;27883:482::-;;;;;;;;;;-1:-1:-1;27883:482:0;;;;;:::i;:::-;;:::i;22022:39::-;;;;;;;;;;-1:-1:-1;22022:39:0;;;;-1:-1:-1;;;;;22022:39:0;;;26449:199;;;;;;;;;;-1:-1:-1;26449:199:0;;;;;:::i;:::-;;:::i;21837:60::-;;;;;;;;;;;;;;;;30340:525;;;;;;;;;;-1:-1:-1;30340:525:0;;;;;:::i;:::-;;:::i;31301:171::-;;;;;;;;;;-1:-1:-1;31301:171:0;;;;;:::i;:::-;;:::i;22368:26::-;;;;;;;;;;-1:-1:-1;22368:26:0;;;;-1:-1:-1;;;;;22368:26:0;;;42535:114;;;;;;;;;;-1:-1:-1;42535:114:0;;;;;:::i;:::-;;:::i;22486:74::-;;;;;;;;;;;;;;;;21308:56;;;;;;;;;;-1:-1:-1;21308:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43831:380;;;;;;;;;;-1:-1:-1;43831:380:0;;;;;:::i;:::-;;:::i;21753:59::-;;;;;;;;;;;;;;;;21670;;;;;;;;;;;;;;;;21982:31;;;;;;;;;;;;;;;;41734:437;;;;;;;;;;-1:-1:-1;41734:437:0;;;;;:::i;:::-;;:::i;26656:184::-;;;;;;;;;;-1:-1:-1;26656:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;26805:18:0;;;26773:7;26805:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26656:184;30873:112;;;;;;;;;;-1:-1:-1;30873:112:0;;;;;:::i;:::-;;:::i;41201:525::-;;;;;;;;;;-1:-1:-1;41201:525:0;;;;;:::i;:::-;;:::i;2652:229::-;;;;;;;;;;-1:-1:-1;2652:229:0;;;;;:::i;:::-;;:::i;22448:31::-;;;;;;;;;;-1:-1:-1;22448:31:0;;;;-1:-1:-1;;;22448:31:0;;;;;;42179:179;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;;;;;;;;;42337:13:::1;21490:1;42337:2;:13;:::i;:::-;42322:28;::::0;:12;:28:::1;:::i;:::-;42290:29;:60:::0;-1:-1:-1;42179:179:0:o;26848:193::-;26950:4;26972:39;683:10;26995:7;27004:6;26972:8;:39::i;:::-;-1:-1:-1;27029:4:0;26848:193;;;;;:::o;42657:189::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;42728:6:::1;42738:1;42728:11:::0;42724:114:::1;;1798:7:::0;1825:6;;42741:48:::1;::::0;-1:-1:-1;;;;;1825:6:0;;;;42767:21:::1;42741:48:::0;::::1;;;::::0;42767:21;;42741:48;1798:7;42741:48;42767:21;1825:6;42741:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42657:189:::0;:::o;42724:114::-:1;1798:7:::0;1825:6;;42805:33:::1;::::0;-1:-1:-1;;;;;1825:6:0;;;;42805:33;::::1;;;::::0;42831:6;;42805:33;1798:7;42805:33;42831:6;1825;42805:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;42724:114;42657:189:::0;:::o;43184:281::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43283:17:0;::::1;;::::0;;;:5:::1;:17;::::0;;;;;::::1;;43261:110;;;::::0;-1:-1:-1;;;43261:110:0;;9679:2:1;43261:110:0::1;::::0;::::1;9661:21:1::0;9718:2;9698:18;;;9691:30;9757:34;9737:18;;;9730:62;-1:-1:-1;;;9808:18:1;;;9801:41;9859:19;;43261:110:0::1;9477:407:1::0;43261:110:0::1;-1:-1:-1::0;;;;;43382:17:0;::::1;43402:5;43382:17:::0;;;:5:::1;:17;::::0;;;;;;;:25;;-1:-1:-1;;43382:25:0::1;::::0;;43423:34;371:51:1;;;43402:5:0;;43423:34:::1;::::0;344:18:1;43423:34:0::1;;;;;;;43184:281:::0;:::o;27049:521::-;27181:4;27198:36;27208:6;27216:9;27227:6;27198:9;:36::i;:::-;-1:-1:-1;;;;;27274:19:0;;27247:24;27274:19;;;:11;:19;;;;;;;;683:10;27274:33;;;;;;;;27340:26;;;;27318:116;;;;-1:-1:-1;;;27318:116:0;;10091:2:1;27318:116:0;;;10073:21:1;10130:2;10110:18;;;10103:30;10169:34;10149:18;;;10142:62;-1:-1:-1;;;10220:18:1;;;10213:38;10268:19;;27318:116:0;9889:404:1;27318:116:0;27470:57;27479:6;683:10;27520:6;27501:16;:25;27470:8;:57::i;:::-;-1:-1:-1;27558:4:0;;27049:521;-1:-1:-1;;;;27049:521:0:o;43473:350::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;43628:3:::1;43605:19;:26;;43583:119;;;::::0;-1:-1:-1;;;43583:119:0;;10500:2:1;43583:119:0::1;::::0;::::1;10482:21:1::0;10539:2;10519:18;;;10512:30;10578:34;10558:18;;;10551:62;-1:-1:-1;;;10629:18:1;;;10622:41;10680:19;;43583:119:0::1;10298:407:1::0;43583:119:0::1;43741:19;43731:7;;:29;;;;:::i;:::-;43713:15;:47:::0;;;43776:39:::1;::::0;2032:25:1;;;43776:39:0::1;::::0;2020:2:1;2005:18;43776:39:0::1;;;;;;;;43473:350:::0;:::o;28998:319::-;29092:7;29150;;29139;:18;;29117:110;;;;-1:-1:-1;;;29117:110:0;;11134:2:1;29117:110:0;;;11116:21:1;11173:2;11153:18;;;11146:30;11212:34;11192:18;;;11185:62;-1:-1:-1;;;11263:18:1;;;11256:40;11313:19;;29117:110:0;10932:406:1;29117:110:0;29238:19;29260:10;:8;:10::i;:::-;29238:32;-1:-1:-1;29288:21:0;29238:32;29288:7;:21;:::i;:::-;29281:28;28998:319;-1:-1:-1;;;28998:319:0:o;29738:473::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29818:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29810:56;;;::::0;-1:-1:-1;;;29810:56:0;;11545:2:1;29810:56:0::1;::::0;::::1;11527:21:1::0;11584:2;11564:18;;;11557:30;11623:25;11603:18;;;11596:53;11666:18;;29810:56:0::1;11343:347:1::0;29810:56:0::1;29882:9;29877:327;29901:9;:16:::0;29897:20;::::1;29877:327;;;29959:7;-1:-1:-1::0;;;;;29943:23:0::1;:9;29953:1;29943:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29943:12:0::1;:23:::0;29939:254:::1;;30002:9;30012:16:::0;;:20:::1;::::0;30031:1:::1;::::0;30012:20:::1;:::i;:::-;30002:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;29987:9:::1;:12:::0;;-1:-1:-1;;;;;30002:31:0;;::::1;::::0;29997:1;;29987:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;29987:46:0::1;-1:-1:-1::0;;;;;29987:46:0;;::::1;;::::0;;30052:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30091:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30091:28:0::1;::::0;;30138:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30138:15:0;;;;;-1:-1:-1;;;;;;30138:15:0::1;::::0;;;;;42741:48:::1;42657:189:::0;:::o;29939:254::-:1;29919:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29877:327;;27578:297:::0;683:10;27693:4;27787:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27787:34:0;;;;;;;;;;27693:4;;27715:130;;27765:7;;27787:47;;27824:10;;27787:47;:::i;:::-;27715:8;:130::i;30219:113::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30290:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;30290:34:0::1;30320:4;30290:34;::::0;;30219:113::o;28501:489::-;28619:7;28663;;28652;:18;;28644:62;;;;-1:-1:-1;;;28644:62:0;;12564:2:1;28644:62:0;;;12546:21:1;12603:2;12583:18;;;12576:30;12642:33;12622:18;;;12615:61;12693:18;;28644:62:0;12362:355:1;28644:62:0;28722:17;28717:266;;28756:28;28787:25;28798:7;28807:4;28787:10;:25::i;:::-;28834:9;;-1:-1:-1;28827:16:0;;-1:-1:-1;28827:16:0;28717:266;28876:28;28907:25;28918:7;28927:4;28907:10;:25::i;:::-;28954:17;;;;-1:-1:-1;28947:24:0;;-1:-1:-1;28947:24:0;29396:334;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29479:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29478:21;29470:61;;;::::0;-1:-1:-1;;;29470:61:0;;12924:2:1;29470:61:0::1;::::0;::::1;12906:21:1::0;12963:2;12943:18;;;12936:30;13002:29;12982:18;;;12975:57;13049:18;;29470:61:0::1;12722:351:1::0;29470:61:0::1;-1:-1:-1::0;;;;;29546:16:0;::::1;29565:1;29546:16:::0;;;:7:::1;:16;::::0;;;;;:20;29542:109:::1;;-1:-1:-1::0;;;;;29622:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29602:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29583:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29542:109:::1;-1:-1:-1::0;;;;;29661:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29661:27:0::1;29684:4;29661:27:::0;;::::1;::::0;;;29699:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29699:23:0::1;::::0;;::::1;::::0;;29396:334::o;26243:198::-;-1:-1:-1;;;;;26333:20:0;;26309:7;26333:20;;;:11;:20;;;;;;;;26329:49;;;-1:-1:-1;;;;;;26362:16:0;;;;;:7;:16;;;;;;;26243:198::o;26329:49::-;-1:-1:-1;;;;;26416:16:0;;;;;;:7;:16;;;;;;26396:37;;:19;:37::i;2403:94::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;2468:21:::1;2486:1;2468:9;:21::i;:::-;2403:94::o:0;42854:203::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;43000:38:::1;::::0;-1:-1:-1;;;43000:38:0;;43032:4:::1;43000:38;::::0;::::1;371:51:1::0;-1:-1:-1;;;;;42929:31:0;::::1;::::0;::::1;::::0;42975:10:::1;::::0;42929:31;;43000:23:::1;::::0;344:18:1;;43000:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42929:120;::::0;-1:-1:-1;;;;;;42929:120:0::1;::::0;;;;;;-1:-1:-1;;;;;13459:32:1;;;42929:120:0::1;::::0;::::1;13441:51:1::0;13508:18;;;13501:34;13414:18;;42929:120:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44403:126::-:0;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;44458:11:::1;:18:::0;;-1:-1:-1;;;;44458:18:0::1;-1:-1:-1::0;;;44458:18:0::1;::::0;;44509:12:::1;44487:19;:34:::0;44403:126::o;42366:161::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;42483:16:::1;:36:::0;;-1:-1:-1;;;;;;42483:36:0::1;-1:-1:-1::0;;;;;42483:36:0;;;::::1;::::0;;;::::1;::::0;;42366:161::o;43065:111::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;43128:40:::1;43143:24;43161:4;43143:9;:24::i;:::-;43128:14;:40::i;40675:518::-:0;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;40907:2:::1;40900:3:::0;40893:4;40880:10;40865:12:::1;40872:5:::0;40865:4;:12:::1;:::i;:::-;:25;;;;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:44;;;;40843:128;;;;-1:-1:-1::0;;;40843:128:0::1;;;;;;;:::i;:::-;40982:8;:19:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;41012:21:0;;;;;;;40982:19:::1;41012:21:::0;;::::1;;;-1:-1:-1::0;;41086:19:0;41044:31;;;::::1;;-1:-1:-1::0;;41086:19:0;;;;;::::1;;;-1:-1:-1::0;;41116:17:0::1;-1:-1:-1::0;;;41116:17:0;;::::1;::::0;;;::::1;;::::0;;;41162::::1;41086:19:::0;41044:31;41162:17:::1;:::i;:::-;:23;;;;:::i;:::-;41144:8;:41:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;41144:41:0::1;-1:-1:-1::0;;;;41144:41:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;40675:518:0:o;40145:522::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40284:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;;:42;::::1;;:33;::::0;;::::1;:42;;::::0;40262:148:::1;;;::::0;-1:-1:-1;;;40262:148:0;;14554:2:1;40262:148:0::1;::::0;::::1;14536:21:1::0;14593:2;14573:18;;;14566:30;14632:34;14612:18;;;14605:62;14703:26;14683:18;;;14676:54;14747:19;;40262:148:0::1;14352:420:1::0;40262:148:0::1;-1:-1:-1::0;;;;;40421:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;40421:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;40473:130:::1;;-1:-1:-1::0;;;;;40499:31:0;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;40499:38:0::1;40533:4;40499:38;::::0;;40557:34;;371:51:1;;;40557:34:0;::::1;;::::0;::::1;::::0;344:18:1;40557:34:0::1;;;;;;;40473:130;40618:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;40618:41:0;::::1;::::0;::::1;::::0;;;::::1;40145:522:::0;;:::o;44219:176::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;44326:2:::1;44309:14;:19;44301:46;;;::::0;-1:-1:-1;;;44301:46:0;;14979:2:1;44301:46:0::1;::::0;::::1;14961:21:1::0;15018:2;14998:18;;;14991:30;-1:-1:-1;;;15037:18:1;;;15030:45;15092:18;;44301:46:0::1;14777:339:1::0;44301:46:0::1;44358:12;:29:::0;44219:176::o;27883:482::-;683:10;28003:4;28052:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28052:34:0;;;;;;;;;;28119:35;;;;28097:122;;;;-1:-1:-1;;;28097:122:0;;15323:2:1;28097:122:0;;;15305:21:1;15362:2;15342:18;;;15335:30;15401:34;15381:18;;;15374:62;-1:-1:-1;;;15452:18:1;;;15445:35;15497:19;;28097:122:0;15121:401:1;28097:122:0;28255:67;683:10;28278:7;28306:15;28287:16;:34;28255:8;:67::i;:::-;-1:-1:-1;28353:4:0;;27883:482;-1:-1:-1;;;27883:482:0:o;26449:199::-;26554:4;26576:42;683:10;26600:9;26611:6;26576:9;:42::i;30340:525::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;30488:9:::1;30483:375;30503:19:::0;;::::1;30483:375;;;30611:8;30570:49;;:24;:37;30595:8;;30604:1;30595:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30570:37:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30570:37:0;;::::1;;:49;;::::0;30544:176:::1;;;::::0;-1:-1:-1;;;30544:176:0;;15729:2:1;30544:176:0::1;::::0;::::1;15711:21:1::0;15768:2;15748:18;;;15741:30;15807:34;15787:18;;;15780:62;15878:34;15858:18;;;15851:62;-1:-1:-1;;;15929:19:1;;;15922:32;15971:19;;30544:176:0::1;15527:469:1::0;30544:176:0::1;30775:8;30735:24;:37;30760:8;;30769:1;30760:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30735:37:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30735:37:0;:48;;-1:-1:-1;;30735:48:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30803:43;::::1;;;30824:8:::0;;30833:1;30824:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30803:43;::::0;-1:-1:-1;;;;;389:32:1;;;371:51;;359:2;344:18;30803:43:0::1;;;;;;;30524:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30483:375;;;;30340:525:::0;;;:::o;31301:171::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;31378:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;31378:32:0::1;-1:-1:-1::0;;;;31378:32:0;;::::1;;::::0;;31426:38:::1;::::0;::::1;::::0;::::1;::::0;31402:8;1607:14:1;1600:22;1582:41;;1570:2;1555:18;;1442:187;42535:114:0;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;42617:10:::1;:24:::0;;-1:-1:-1;;;;;;42617:24:0::1;-1:-1:-1::0;;;;;42617:24:0;;;::::1;::::0;;;::::1;::::0;;42535:114::o;43831:380::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43968:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;43946:145:::1;;;::::0;-1:-1:-1;;;43946:145:0;;16203:2:1;43946:145:0::1;::::0;::::1;16185:21:1::0;16242:2;16222:18;;;16215:30;16281:34;16261:18;;;16254:62;-1:-1:-1;;;16332:18:1;;;16325:48;16390:19;;43946:145:0::1;16001:414:1::0;43946:145:0::1;-1:-1:-1::0;;;;;44102:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;;;:44;;-1:-1:-1;;44102:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;44164:39;;371:51:1;;;44102:44:0;;44164:39:::1;::::0;344:18:1;44164:39:0::1;;;;;;;43831:380:::0;;:::o;41734:437::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;41924:3:::1;41901:19;:26;;41879:118;;;::::0;-1:-1:-1;;;41879:118:0;;16622:2:1;41879:118:0::1;::::0;::::1;16604:21:1::0;16661:2;16641:18;;;16634:30;16700:34;16680:18;;;16673:62;-1:-1:-1;;;16751:18:1;;;16744:40;16801:19;;41879:118:0::1;16420:406:1::0;41879:118:0::1;42035:18;42025:7;;:28;;;;:::i;:::-;42008:14;:45:::0;42108:7:::1;::::0;:29:::1;::::0;42118:19;;42108:29:::1;:::i;:::-;42090:15;:47:::0;-1:-1:-1;;41734:437:0:o;30873:112::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30942:27:0::1;30972:5;30942:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;30942:35:0::1;::::0;;30873:112::o;41201:525::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;41434:2:::1;41427:3:::0;41420:4;41407:10;41392:12:::1;41399:5:::0;41392:4;:12:::1;:::i;:::-;:25;;;;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:44;;;;41370:128;;;;-1:-1:-1::0;;;41370:128:0::1;;;;;;;:::i;:::-;41509:9;:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;41540:22:0;;;;;;;41509:20:::1;41540:22:::0;;::::1;;;-1:-1:-1::0;;41616:20:0;41573:32;;;::::1;;-1:-1:-1::0;;41616:20:0;;;;;::::1;;;-1:-1:-1::0;;41647:18:0::1;-1:-1:-1::0;;;41647:18:0;;::::1;::::0;;;::::1;;::::0;;;41695:17:::1;41616:20:::0;41573:32;41695:17:::1;:::i;:::-;:23;;;;:::i;:::-;41676:9;:42:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;41676:42:0::1;-1:-1:-1::0;;;;41676:42:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;41201:525:0:o;2652:229::-;1798:7;1825:6;-1:-1:-1;;;;;1825:6:0;683:10;1972:23;1964:68;;;;-1:-1:-1;;;1964:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2755:22:0;::::1;2733:110;;;::::0;-1:-1:-1;;;2733:110:0;;17033:2:1;2733:110:0::1;::::0;::::1;17015:21:1::0;17072:2;17052:18;;;17045:30;17111:34;17091:18;;;17084:62;-1:-1:-1;;;17162:18:1;;;17155:36;17208:19;;2733:110:0::1;16831:402:1::0;2733:110:0::1;2854:19;2864:8;2854:9;:19::i;34454:369::-:0;-1:-1:-1;;;;;34581:19:0;;34573:68;;;;-1:-1:-1;;;34573:68:0;;17440:2:1;34573:68:0;;;17422:21:1;17479:2;17459:18;;;17452:30;17518:34;17498:18;;;17491:62;-1:-1:-1;;;17569:18:1;;;17562:34;17613:19;;34573:68:0;17238:400:1;34573:68:0;-1:-1:-1;;;;;34660:21:0;;34652:68;;;;-1:-1:-1;;;34652:68:0;;17845:2:1;34652:68:0;;;17827:21:1;17884:2;17864:18;;;17857:30;17923:34;17903:18;;;17896:62;-1:-1:-1;;;17974:18:1;;;17967:32;18016:19;;34652:68:0;17643:398:1;34652:68:0;-1:-1:-1;;;;;34731:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34783:32;;2032:25:1;;;34783:32:0;;2005:18:1;34783:32:0;;;;;;;34454:369;;;:::o;34831:1699::-;-1:-1:-1;;;;;34953:18:0;;34945:68;;;;-1:-1:-1;;;34945:68:0;;18248:2:1;34945:68:0;;;18230:21:1;18287:2;18267:18;;;18260:30;18326:34;18306:18;;;18299:62;-1:-1:-1;;;18377:18:1;;;18370:35;18422:19;;34945:68:0;18046:401:1;34945:68:0;-1:-1:-1;;;;;35032:16:0;;35024:64;;;;-1:-1:-1;;;35024:64:0;;18654:2:1;35024:64:0;;;18636:21:1;18693:2;18673:18;;;18666:30;18732:34;18712:18;;;18705:62;-1:-1:-1;;;18783:18:1;;;18776:33;18826:19;;35024:64:0;18452:399:1;35024:64:0;-1:-1:-1;;;;;35108:11:0;;;;;;:5;:11;;;;;;;;35107:12;35099:57;;;;-1:-1:-1;;;35099:57:0;;19058:2:1;35099:57:0;;;19040:21:1;;;19077:18;;;19070:30;19136:34;19116:18;;;19109:62;19188:18;;35099:57:0;18856:356:1;35099:57:0;35184:1;35175:6;:10;35167:64;;;;-1:-1:-1;;;35167:64:0;;19419:2:1;35167:64:0;;;19401:21:1;19458:2;19438:18;;;19431:30;19497:34;19477:18;;;19470:62;-1:-1:-1;;;19548:18:1;;;19541:39;19597:19;;35167:64:0;19217:405:1;35167:64:0;35274:15;35284:4;35274:9;:15::i;:::-;35264:6;:25;;35242:124;;;;-1:-1:-1;;;35242:124:0;;19829:2:1;35242:124:0;;;19811:21:1;19868:2;19848:18;;;19841:30;19907:34;19887:18;;;19880:62;-1:-1:-1;;;19958:18:1;;;19951:47;20015:19;;35242:124:0;19627:413:1;35242:124:0;-1:-1:-1;;;;;35396:24:0;;35379:12;35396:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;35424:22:0;;;;;;:18;:22;;;;;;;;35396:50;35394:53;35379:68;;35464:7;35460:687;;;-1:-1:-1;;;;;35492:32:0;;;;;;:26;:32;;;;;;;;35488:648;;;35586:12;;35564:19;;:34;;;;:::i;:::-;35549:12;:49;35545:167;;;-1:-1:-1;;;;;35623:9:0;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;35623:16:0;35635:4;35623:16;;;;;;35667:25;;371:51:1;;;35635:4:0;;35667:25;;344:18:1;35667:25:0;;;;;;;35545:167;35747:8;35732:23;:12;:23;;;;;;-1:-1:-1;;35732:23:0;;;;;;;;;;;;;;;-1:-1:-1;;35732:23:0;;;;;;;;-1:-1:-1;;35732:23:0;;;;;;;;;;-1:-1:-1;;35732:23:0;-1:-1:-1;;;35732:23:0;;;;;;-1:-1:-1;;;;35732:23:0;;-1:-1:-1;;;35732:23:0;;;;;;;;;;;;;;;;;35814:14;;35804:24;;;35774:130;;;;-1:-1:-1;;;35774:130:0;;20247:2:1;35774:130:0;;;20229:21:1;;;20266:18;;;20259:30;20325:34;20305:18;;;20298:62;20377:18;;35774:130:0;20045:356:1;35774:130:0;35488:648;;;35960:9;35945:24;:12;:24;;;;;;-1:-1:-1;;35945:24:0;;;;;;;;;;;;;;;-1:-1:-1;;35945:24:0;;;;;;;;-1:-1:-1;;35945:24:0;;;;;;;;;;-1:-1:-1;;35945:24:0;-1:-1:-1;;;35945:24:0;;;;;;-1:-1:-1;;;;35945:24:0;;-1:-1:-1;;;35945:24:0;;;;;;;;;;;;;;;;;36028:15;;36018:25;;;35988:132;;;;-1:-1:-1;;;35988:132:0;;20608:2:1;35988:132:0;;;20590:21:1;20647:2;20627:18;;;20620:30;20686:34;20666:18;;;20659:62;-1:-1:-1;;;20737:18:1;;;20730:31;20778:19;;35988:132:0;20406:397:1;35988:132:0;36205:29;;36177:24;36195:4;36177:9;:24::i;:::-;:57;;:91;;;;-1:-1:-1;36252:16:0;;;;36251:17;36177:91;:141;;;;-1:-1:-1;;;;;;36286:32:0;;;;;;:26;:32;;;;;;;;36285:33;36177:141;:179;;;;-1:-1:-1;36335:21:0;;-1:-1:-1;;;36335:21:0;;;;36177:179;36159:310;;;36412:45;36427:29;;36412:14;:45::i;:::-;36481:41;36496:4;36502:2;36506:6;36514:7;36481:14;:41::i;33699:161::-;33741:7;33762:15;33779;33798:19;:17;:19::i;:::-;33761:56;;-1:-1:-1;33761:56:0;-1:-1:-1;33835:17:0;33761:56;;33835:17;:::i;:::-;33828:24;;;;33699:161;:::o;31950:470::-;32050:36;;:::i;:::-;32116:29;32128:7;32137;32116:11;:29::i;:::-;32104:41;;32333:52;32345:9;32356:7;32365;32374:10;:8;:10::i;:::-;32333:11;:52::i;:::-;32302:17;;;32156:229;32272:15;;;32156:229;32243:14;;;32156:229;32203:25;;;32156:229;;;31950:470;;;;:::o;2889:173::-;2945:16;2964:6;;-1:-1:-1;;;;;2981:17:0;;;-1:-1:-1;;;;;;2981:17:0;;;;;;3014:40;;2964:6;;;;;;;3014:40;;2945:16;3014:40;2934:128;2889:173;:::o;37814:1210::-;24585:16;:23;;-1:-1:-1;;24585:23:0;24604:4;24585:23;;;37921:12:::1;:19:::0;24585:16;;37921:23:::1;::::0;-1:-1:-1;;;37921:19:0;::::1;24585:23:::0;37921:19:::1;37943:1;37921:23;:::i;:::-;38027:12;:15:::0;37899:45:::1;::::0;;::::1;::::0;-1:-1:-1;37955:32:0::1;::::0;37899:45;;37991:51:::1;::::0;-1:-1:-1;;;38027:15:0;;::::1;;37991:20:::0;:51:::1;:::i;:::-;37990:67;;;;:::i;:::-;37955:102:::0;-1:-1:-1;38068:14:0::1;38085:47;37955:102:::0;38085:20;:47:::1;:::i;:::-;38068:64:::0;-1:-1:-1;38170:21:0::1;38236:24;38068:64:::0;38236:16:::1;:24::i;:::-;38273:20;38296:38;38320:14:::0;38296:21:::1;:38;:::i;:::-;38440:12;:15:::0;38273:61;;-1:-1:-1;38345:29:0::1;::::0;38426::::1;::::0;-1:-1:-1;;;38440:15:0;::::1;;;38426:11:::0;:29:::1;:::i;:::-;38393:12;:15:::0;38378:30:::1;::::0;-1:-1:-1;;;38393:15:0;::::1;;;38378:12:::0;:30:::1;:::i;:::-;38377:79;;;;:::i;:::-;38345:111;;38495:61;38508:24;38534:21;38495:12;:61::i;:::-;38778:12;:16:::0;38661:21:::1;::::0;38634:24:::1;::::0;38764:30:::1;::::0;38778:16;;::::1;;;38764:11:::0;:30:::1;:::i;:::-;38730:12;:16:::0;38711:35:::1;::::0;38730:16;;::::1;;;38711::::0;:35:::1;:::i;:::-;38710:85;;;;:::i;:::-;38903:12;:22:::0;38693:102;;-1:-1:-1;38806:20:0::1;::::0;38889:36:::1;::::0;38903:22;;::::1;;;38889:11:::0;:36:::1;:::i;:::-;38849:12;:22:::0;38830:41:::1;::::0;38849:22;;::::1;;;38830:16:::0;:41:::1;:::i;:::-;38829:97;;;;:::i;:::-;38937:10;::::0;38806:120;;-1:-1:-1;38937:28:0::1;::::0;-1:-1:-1;;;;;38937:10:0::1;38958:6:::0;38937:20:::1;:28::i;:::-;38976:16;::::0;:40:::1;::::0;-1:-1:-1;;;;;38976:16:0::1;39003:12:::0;38976:26:::1;:40::i;:::-;-1:-1:-1::0;;24631:16:0;:24;;-1:-1:-1;;24631:24:0;;;-1:-1:-1;;;;;;;;37814:1210:0:o;36611:1195::-;36763:28;36794;36805:7;36814;36794:10;:28::i;:::-;-1:-1:-1;;;;;36839:19:0;;;;;;:11;:19;;;;;;36763:59;;-1:-1:-1;36839:19:0;;36835:78;;;-1:-1:-1;;;;;36875:15:0;;;;;;:7;:15;;;;;:26;;36894:7;;36875:15;:26;;36894:7;;36875:26;:::i;:::-;;;;-1:-1:-1;;36835:78:0;-1:-1:-1;;;;;36927:22:0;;;;;;:11;:22;;;;;;;;36923:94;;;36988:17;;;;-1:-1:-1;;;;;36966:18:0;;;;;;:7;:18;;;;;:39;;:18;;;:39;;36988:17;;36966:39;:::i;:::-;;;;-1:-1:-1;;36923:94:0;37048:9;;-1:-1:-1;;;;;37029:15:0;;37048:9;37029:15;;;:7;:15;;;;;:28;;:15;;37048:9;37029:28;;37048:9;;37029:28;:::i;:::-;;;;-1:-1:-1;;37090:17:0;;;;;-1:-1:-1;;;;;37068:18:0;;;;;;:7;:18;;;;;;:39;;37090:17;;37068:18;;:39;;37090:17;;37068:39;:::i;:::-;;;;-1:-1:-1;;37118:265:0;;;;37167:1;:7;;;37156;;:18;;;;;;;:::i;:::-;;;;;-1:-1:-1;37146:7:0;:28;-1:-1:-1;37210:7:0;;;;37199;:18;;:7;;:18;;37210:7;;37199:18;:::i;:::-;;;;;-1:-1:-1;37189:7:0;:28;-1:-1:-1;37246:6:0;;;;37254;;;;37234:27;;37246:6;37234:11;:27::i;:::-;37276:33;37288:1;:9;;;37299:1;:9;;;37276:11;:33::i;:::-;37354:4;-1:-1:-1;;;;;37329:42:0;37338:6;-1:-1:-1;;;;;37329:42:0;;37361:1;:9;;;37329:42;;;;2032:25:1;;2020:2;2005:18;;1886:177;37329:42:0;;;;;;;;37118:265;-1:-1:-1;;;;;37398:26:0;;;;;;:18;:26;;;;;;;;37397:27;:61;;;;-1:-1:-1;;;;;;37429:29:0;;;;;;:18;:29;;;;;;;;37428:30;37397:61;37393:141;;;37483:11;;-1:-1:-1;;;37483:11:0;;;;37475:47;;;;-1:-1:-1;;;37475:47:0;;21240:2:1;37475:47:0;;;21222:21:1;21279:2;21259:18;;;21252:30;21318:25;21298:18;;;21291:53;21361:18;;37475:47:0;21038:347:1;37475:47:0;-1:-1:-1;;;;;37566:35:0;;;;;;:24;:35;;;;;;;;;:95;;;37646:15;;37622:20;37632:9;37622;:20::i;:::-;:39;;37566:95;37544:192;;;;-1:-1:-1;;;37544:192:0;;21592:2:1;37544:192:0;;;21574:21:1;21631:2;21611:18;;;21604:30;21670:34;21650:18;;;21643:62;-1:-1:-1;;;21721:18:1;;;21714:45;21776:19;;37544:192:0;21390:411:1;37544:192:0;37769:9;-1:-1:-1;;;;;37752:46:0;37761:6;-1:-1:-1;;;;;37752:46:0;;37780:1;:17;;;37752:46;;;;2032:25:1;;2020:2;2005:18;;1886:177;37752:46:0;;;;;;;;36752:1054;36611:1195;;;;:::o;33868:578::-;33966:7;;34002;;33919;;;;;34020:314;34044:9;:16;34040:20;;34020:314;;;34128:7;34104;:21;34112:9;34122:1;34112:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34112:12:0;34104:21;;;;;;;;;;;;;:31;;:83;;;34180:7;34156;:21;34164:9;34174:1;34164:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34164:12:0;34156:21;;;;;;;;;;;;;:31;34104:83;34082:146;;;34211:7;;34220;;34203:25;;;;;;;33868:578;;:::o;34082:146::-;34254:7;:21;34262:9;34272:1;34262:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34262:12:0;34254:21;;;;;;;;;;;;;34243:32;;;;:::i;:::-;;;34301:7;:21;34309:9;34319:1;34309:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34309:12:0;34301:21;;;;;;;;;;;;;34290:32;;;;:::i;:::-;;-1:-1:-1;34062:3:0;;;;:::i;:::-;;;;34020:314;;;;34368:7;;34358;;:17;;;;:::i;:::-;34348:7;:27;34344:58;;;34385:7;;34394;;34377:25;;;;;;33868:578;;:::o;34344:58::-;34421:7;;34430;;-1:-1:-1;33868:578:0;-1:-1:-1;33868:578:0:o;32428:503::-;32529:28;;:::i;:::-;32580:7;32575:91;;32604:17;;;:27;;;32646:8;;32575:91;32696:12;:16;32716:3;;32686:26;;32696:16;;32686:7;:26;:::i;:::-;32685:34;;;;:::i;:::-;32676:6;;;:43;32751:12;:17;32772:3;;32741:27;;32751:17;;;;;32741:7;:27;:::i;:::-;32740:35;;;;:::i;:::-;32730:7;;;:45;32809:12;:19;32832:3;;32799:29;;-1:-1:-1;;;32809:19:0;;;;32799:7;:29;:::i;:::-;32798:37;;;;:::i;:::-;32786:9;;;:49;;;32885:7;;;;32876:6;;;;32866:16;;:7;:16;:::i;:::-;:26;;;;:::i;:::-;:38;;;;:::i;:::-;32846:17;;;:58;32428:503;;;;:::o;32939:752::-;33148:15;;;;;33324:21;33334:11;33324:7;:21;:::i;:::-;33314:31;;33363:7;33358:75;;-1:-1:-1;33395:7:0;;-1:-1:-1;33413:1:0;;-1:-1:-1;33413:1:0;;-1:-1:-1;33413:1:0;33387:34;;33358:75;33461:11;33452:1;:6;;;:20;;;;:::i;:::-;33445:27;;33501:11;33491:1;:7;;;:21;;;;:::i;:::-;33483:29;;33545:11;33533:1;:9;;;:23;;;;:::i;:::-;33523:33;-1:-1:-1;33523:33:0;33602:5;33585:14;33595:4;33585:7;:14;:::i;:::-;:22;;;;:::i;:::-;:32;;;;:::i;:::-;33567:50;-1:-1:-1;33662:5:0;;33669:4;32939:752;;;;;;;;;;:::o;39032:669::-;39166:16;;;39180:1;39166:16;;;;;;;;39142:21;;39166:16;;;;;;;;;;-1:-1:-1;39166:16:0;39142:40;;39211:4;39193;39198:1;39193:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;39193:23:0;;;-1:-1:-1;;;;;39193:23:0;;;;;39237:15;;;;;;;;;-1:-1:-1;;;;;39237:15:0;-1:-1:-1;;;;;39237:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39227:4;39232:1;39227:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39227:32:0;;;:7;;;;;;;;;;:32;;;;39309:15;;39294:4;26773:7;26805:18;;;:11;:18;;;;;;39309:15;;;;;;;26805:27;;;;;;39329:11;-1:-1:-1;39272:159:0;;;39389:15;;39357:62;;39374:4;;39389:15;;;-1:-1:-1;;;;;39389:15:0;-1:-1:-1;;39357:8:0;:62::i;:::-;39469:15;;:224;;-1:-1:-1;;;39469:224:0;;:15;;;;-1:-1:-1;;;;;39469:15:0;;:66;;:224;;39550:11;;39576:1;;39620:4;;39647;;39667:15;;39469:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39087:614;39032:669;:::o;39709:428::-;39820:15;;40024:10;;39820:255;;-1:-1:-1;;;39820:255:0;;39892:4;39820:255;;;23528:34:1;23578:18;;;23571:34;;;39938:1:0;23621:18:1;;;23614:34;;;23664:18;;;23657:34;-1:-1:-1;;;;;40024:10:0;;;23707:19:1;;;23700:44;40049:15:0;23760:19:1;;;23753:35;39820:15:0;;;;;;:31;;39859:9;;23462:19:1;;39820:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;40091:38:0;;;24284:25:1;;;24340:2;24325:18;;24318:34;;;40091:38:0;;-1:-1:-1;24257:18:1;40091:38:0;;;;;;;39709:428;;:::o;14452:391::-;14581:6;14556:21;:31;;14534:110;;;;-1:-1:-1;;;14534:110:0;;24565:2:1;14534:110:0;;;24547:21:1;24604:2;24584:18;;;24577:30;24643:31;24623:18;;;24616:59;24692:18;;14534:110:0;24363:353:1;14534:110:0;14658:12;14676:9;-1:-1:-1;;;;;14676:14:0;14698:6;14676:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14657:52;;;14742:7;14720:115;;;;-1:-1:-1;;;14720:115:0;;25133:2:1;14720:115:0;;;25115:21:1;25172:2;25152:18;;;25145:30;25211:34;25191:18;;;25184:62;25282:28;25262:18;;;25255:56;25328:19;;14720:115:0;24931:422:1;14720:115:0;14523:320;14452:391;;:::o;31578:125::-;31657:4;31646:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;31672:11:0;:23;;31691:4;;31672:11;:15;;:23;;31691:4;;31672:23;:::i;:::-;;;;-1:-1:-1;;;;31578:125:0:o;31711:231::-;31801:4;31785:22;;;;:7;:22;;;;;:33;;31811:7;;31785:22;:33;;31811:7;;31785:33;:::i;:::-;;;;-1:-1:-1;;31853:4:0;31833:26;;;;:11;:26;;;;;;;;31829:65;;;31877:4;31861:22;;;;:7;:22;;;;;:33;;31887:7;;31861:22;:33;;31887:7;;31861:33;:::i;:::-;;;;-1:-1:-1;;31829:65:0;31927:7;31905:11;:18;;;:29;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;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:247::-;1693:6;1746:2;1734:9;1725:7;1721:23;1717:32;1714:52;;;1762:1;1759;1752:12;1714:52;1801:9;1788:23;1820:31;1845:5;1820:31;:::i;2068:456::-;2145:6;2153;2161;2214:2;2202:9;2193:7;2189:23;2185:32;2182:52;;;2230:1;2227;2220:12;2182:52;2269:9;2256:23;2288:31;2313:5;2288:31;:::i;:::-;2338:5;-1:-1:-1;2395:2:1;2380:18;;2367:32;2408:33;2367:32;2408:33;:::i;:::-;2068:456;;2460:7;;-1:-1:-1;;;2514:2:1;2499:18;;;;2486:32;;2068:456::o;2942:118::-;3028:5;3021:13;3014:21;3007:5;3004:32;2994:60;;3050:1;3047;3040:12;3065:309;3130:6;3138;3191:2;3179:9;3170:7;3166:23;3162:32;3159:52;;;3207:1;3204;3197:12;3159:52;3243:9;3230:23;3220:33;;3303:2;3292:9;3288:18;3275:32;3316:28;3338:5;3316:28;:::i;:::-;3363:5;3353:15;;;3065:309;;;;;:::o;4440:156::-;4506:20;;4566:4;4555:16;;4545:27;;4535:55;;4586:1;4583;4576:12;4535:55;4440:156;;;:::o;4601:464::-;4686:6;4694;4702;4710;4718;4771:3;4759:9;4750:7;4746:23;4742:33;4739:53;;;4788:1;4785;4778:12;4739:53;4811:27;4828:9;4811:27;:::i;:::-;4801:37;;4857:36;4889:2;4878:9;4874:18;4857:36;:::i;:::-;4847:46;;4912:36;4944:2;4933:9;4929:18;4912:36;:::i;:::-;4902:46;;4967:36;4999:2;4988:9;4984:18;4967:36;:::i;:::-;4957:46;;5022:37;5054:3;5043:9;5039:19;5022:37;:::i;:::-;5012:47;;4601:464;;;;;;;;:::o;5070:382::-;5135:6;5143;5196:2;5184:9;5175:7;5171:23;5167:32;5164:52;;;5212:1;5209;5202:12;5164:52;5251:9;5238:23;5270:31;5295:5;5270:31;:::i;:::-;5320:5;-1:-1:-1;5377:2:1;5362:18;;5349:32;5390:30;5349:32;5390:30;:::i;5781:750::-;5873:6;5881;5889;5942:2;5930:9;5921:7;5917:23;5913:32;5910:52;;;5958:1;5955;5948:12;5910:52;5998:9;5985:23;6027:18;6068:2;6060:6;6057:14;6054:34;;;6084:1;6081;6074:12;6054:34;6122:6;6111:9;6107:22;6097:32;;6167:7;6160:4;6156:2;6152:13;6148:27;6138:55;;6189:1;6186;6179:12;6138:55;6229:2;6216:16;6255:2;6247:6;6244:14;6241:34;;;6271:1;6268;6261:12;6241:34;6326:7;6319:4;6309:6;6306:1;6302:14;6298:2;6294:23;6290:34;6287:47;6284:67;;;6347:1;6344;6337:12;6284:67;6378:4;6370:13;;;;-1:-1:-1;6402:6:1;-1:-1:-1;;6443:20:1;;6430:34;6473:28;6430:34;6473:28;:::i;:::-;6520:5;6510:15;;;5781:750;;;;;:::o;6536:241::-;6592:6;6645:2;6633:9;6624:7;6620:23;6616:32;6613:52;;;6661:1;6658;6651:12;6613:52;6700:9;6687:23;6719:28;6741:5;6719:28;:::i;6782:248::-;6850:6;6858;6911:2;6899:9;6890:7;6886:23;6882:32;6879:52;;;6927:1;6924;6917:12;6879:52;-1:-1:-1;;6950:23:1;;;7020:2;7005:18;;;6992:32;;-1:-1:-1;6782:248:1:o;7035:388::-;7103:6;7111;7164:2;7152:9;7143:7;7139:23;7135:32;7132:52;;;7180:1;7177;7170:12;7132:52;7219:9;7206:23;7238:31;7263:5;7238:31;:::i;:::-;7288:5;-1:-1:-1;7345:2:1;7330:18;;7317:32;7358:33;7317:32;7358:33;:::i;7428:356::-;7630:2;7612:21;;;7649:18;;;7642:30;7708:34;7703:2;7688:18;;7681:62;7775:2;7760:18;;7428:356::o;7789:127::-;7850:10;7845:3;7841:20;7838:1;7831:31;7881:4;7878:1;7871:15;7905:4;7902:1;7895:15;7921:422;8010:1;8053:5;8010:1;8067:270;8088:7;8078:8;8075:21;8067:270;;;8147:4;8143:1;8139:6;8135:17;8129:4;8126:27;8123:53;;;8156:18;;:::i;:::-;8206:7;8196:8;8192:22;8189:55;;;8226:16;;;;8189:55;8305:22;;;;8265:15;;;;8067:270;;;8071:3;7921:422;;;;;:::o;8348:806::-;8397:5;8427:8;8417:80;;-1:-1:-1;8468:1:1;8482:5;;8417:80;8516:4;8506:76;;-1:-1:-1;8553:1:1;8567:5;;8506:76;8598:4;8616:1;8611:59;;;;8684:1;8679:130;;;;8591:218;;8611:59;8641:1;8632:10;;8655:5;;;8679:130;8716:3;8706:8;8703:17;8700:43;;;8723:18;;:::i;:::-;-1:-1:-1;;8779:1:1;8765:16;;8794:5;;8591:218;;8893:2;8883:8;8880:16;8874:3;8868:4;8865:13;8861:36;8855:2;8845:8;8842:16;8837:2;8831:4;8828:12;8824:35;8821:77;8818:159;;;-1:-1:-1;8930:19:1;;;8962:5;;8818:159;9009:34;9034:8;9028:4;9009:34;:::i;:::-;9079:6;9075:1;9071:6;9067:19;9058:7;9055:32;9052:58;;;9090:18;;:::i;:::-;9128:20;;8348:806;-1:-1:-1;;;8348:806:1:o;9159:140::-;9217:5;9246:47;9287:4;9277:8;9273:19;9267:4;9246:47;:::i;9304:168::-;9377:9;;;9408;;9425:15;;;9419:22;;9405:37;9395:71;;9446:18;;:::i;10710:217::-;10750:1;10776;10766:132;;10820:10;10815:3;10811:20;10808:1;10801:31;10855:4;10852:1;10845:15;10883:4;10880:1;10873:15;10766:132;-1:-1:-1;10912:9:1;;10710:217::o;11695:127::-;11756:10;11751:3;11747:20;11744:1;11737:31;11787:4;11784:1;11777:15;11811:4;11808:1;11801:15;11827:128;11894:9;;;11915:11;;;11912:37;;;11929:18;;:::i;11960:127::-;12021:10;12016:3;12012:20;12009:1;12002:31;12052:4;12049:1;12042:15;12076:4;12073:1;12066:15;12092:135;12131:3;12152:17;;;12149:43;;12172:18;;:::i;:::-;-1:-1:-1;12219:1:1;12208:13;;12092:135::o;12232:125::-;12297:9;;;12318:10;;;12315:36;;;12331:18;;:::i;13078:184::-;13148:6;13201:2;13189:9;13180:7;13176:23;13172:32;13169:52;;;13217:1;13214;13207:12;13169:52;-1:-1:-1;13240:16:1;;13078:184;-1:-1:-1;13078:184:1:o;13546:245::-;13613:6;13666:2;13654:9;13645:7;13641:23;13637:32;13634:52;;;13682:1;13679;13672:12;13634:52;13714:9;13708:16;13733:28;13755:5;13733:28;:::i;13796:148::-;13884:4;13863:12;;;13877;;;13859:31;;13902:13;;13899:39;;;13918:18;;:::i;13949:398::-;14151:2;14133:21;;;14190:2;14170:18;;;14163:30;14229:34;14224:2;14209:18;;14202:62;-1:-1:-1;;;14295:2:1;14280:18;;14273:32;14337:3;14322:19;;13949:398::o;20808:225::-;20912:4;20891:12;;;20905;;;20887:31;20938:22;;;;20979:24;;;20969:58;;21007:18;;:::i;:::-;20969:58;20808:225;;;;:::o;21938:251::-;22008:6;22061:2;22049:9;22040:7;22036:23;22032:32;22029:52;;;22077:1;22074;22067:12;22029:52;22109:9;22103:16;22128:31;22153:5;22128:31;:::i;22194:980::-;22456:4;22504:3;22493:9;22489:19;22535:6;22524:9;22517:25;22561:2;22599:6;22594:2;22583:9;22579:18;22572:34;22642:3;22637:2;22626:9;22622:18;22615:31;22666:6;22701;22695:13;22732:6;22724;22717:22;22770:3;22759:9;22755:19;22748:26;;22809:2;22801:6;22797:15;22783:29;;22830:1;22840:195;22854:6;22851:1;22848:13;22840:195;;;22919:13;;-1:-1:-1;;;;;22915:39:1;22903:52;;23010:15;;;;22975:12;;;;22951:1;22869:9;22840:195;;;-1:-1:-1;;;;;;;23091:32:1;;;;23086:2;23071:18;;23064:60;-1:-1:-1;;;23155:3:1;23140:19;23133:35;23052:3;22194:980;-1:-1:-1;;;22194:980:1:o;23799:306::-;23887:6;23895;23903;23956:2;23944:9;23935:7;23931:23;23927:32;23924:52;;;23972:1;23969;23962:12;23924:52;24001:9;23995:16;23985:26;;24051:2;24040:9;24036:18;24030:25;24020:35;;24095:2;24084:9;24080:18;24074:25;24064:35;;23799:306;;;;;:::o
Swarm Source
ipfs://17e1bbb23cfd2f4725dd4935fc48e1003e18078c2293593aed6c2fb63759b75e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.