ERC-20
Investment
Overview
Max Total Supply
1,000,000,000 SST
Holders
242 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH (+6.15%)
Onchain Market Cap
$84,090.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SMARTSETTOKEN
Compiler Version
v0.8.22+commit.4fc1097e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-16 */ /** https://smartsettoken.com/ */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.22; interface IERC20 { 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. * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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. */ contract Ownable is Context { address private _owner; address private _previousOwner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface 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); } 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; } contract SMARTSETTOKEN is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; mapping(address => bool) private _isExcludedFromLimit; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address payable public _marketingAddress = payable(address(0x88Adb91633F7c5985Ac6Ce609aA9a7128b097Ad5)); string private _name = "SMARTSET TOKEN"; string private _symbol = "SST"; uint8 private _decimals = 9; struct BuyFee { uint8 reflection; uint8 liquidity; uint8 marketing; } struct SellFee { uint8 reflection; uint8 liquidity; uint8 marketing; } BuyFee public buyFee; SellFee public sellFee; uint8 private _reflectionFee; uint8 private _liquidityFee; uint8 private _marketingFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = _tTotal.div(1000).mul(30); //3% uint256 private numTokensSellToAddToLiquidity = _tTotal.div(1000).mul(3); //0.3% uint256 public _maxWalletSize = _tTotal.div(1000).mul(30); // 3% event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } uint256 public deadBlocks = 0; uint256 launchedAt = 0; bool tradingOpen = false; mapping (address => uint256) public _lastTrade; constructor() { _rOwned[_msgSender()] = _rTotal; buyFee.reflection = 1; buyFee.liquidity = 4; buyFee.marketing = 4; sellFee.reflection = 1; sellFee.liquidity = 4; sellFee.marketing = 4; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // exclude owner, and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_marketingAddress] = true; _isExcludedFromLimit[_marketingAddress] = true; _isExcludedFromLimit[owner()] = true; _isExcludedFromLimit[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view 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); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function updateMarketingWallet(address payable newAddress) external onlyOwner { _marketingAddress = newAddress; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function excludeFromLimit(address account) public onlyOwner { _isExcludedFromLimit[account] = true; } function includeInLimit(address account) public onlyOwner { _isExcludedFromLimit[account] = false; } function setBothFees( uint8 buy_reflection, uint8 buy_liquidity, uint8 buy_marketing, uint8 sell_reflection, uint8 sell_liquidity, uint8 sell_marketing ) external onlyOwner { buyFee.reflection = buy_reflection; buyFee.liquidity = buy_liquidity; buyFee.marketing = buy_marketing; sellFee.reflection = sell_reflection; sellFee.liquidity = sell_liquidity; sellFee.marketing = sell_marketing; } function setNumTokensSellToAddToLiquidity(uint256 numTokens) external onlyOwner { numTokensSellToAddToLiquidity = numTokens; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256 ) { uint256 tFee = calculateReflectionFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tWallet = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); tTransferAmount = tTransferAmount.sub(tWallet); return (tTransferAmount, tFee, tLiquidity, tWallet); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rWallet = tWallet.mul(currentRate); uint256 rTransferAmount = rAmount .sub(rFee) .sub(rLiquidity) .sub(rWallet); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(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 = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function _takeWalletFee(uint256 tWallet) private { uint256 currentRate = _getRate(); uint256 rWallet = tWallet.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rWallet); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tWallet); } function calculateReflectionFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_reflectionFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div(10**2); } function removeAllFee() private { _reflectionFee = 0; _liquidityFee = 0; _marketingFee = 0; } function setBuy() private { _reflectionFee = buyFee.reflection; _liquidityFee = buyFee.liquidity; _marketingFee = buyFee.marketing; } function setSell() private { _reflectionFee = sellFee.reflection; _liquidityFee = sellFee.liquidity; _marketingFee = sellFee.marketing; } function isExcludedFromFee(address account) public view returns (bool) { return _isExcludedFromFee[account]; } function isExcludedFromLimit(address account) public view returns (bool) { return _isExcludedFromLimit[account]; } 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(amount > 0, "Transfer amount must be greater than zero"); if ( from != owner() && to != owner() ) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } if (takeFee) { if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) { require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); if (to != uniswapV2Pair) { require( amount + balanceOf(to) <= _maxWalletSize, "Recipient exceeds max wallet size." ); } } } //transfer amount, it will take reflection, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 tokens) private lockTheSwap { // Split the contract balance into halves uint256 denominator = (buyFee.liquidity + sellFee.liquidity + buyFee.marketing + sellFee.marketing) * 2; uint256 tokensToAddLiquidityWith = (tokens * (buyFee.liquidity + sellFee.liquidity)) / denominator; uint256 toSwap = tokens - tokensToAddLiquidityWith; uint256 initialBalance = address(this).balance; swapTokensForEth(toSwap); uint256 deltaBalance = address(this).balance - initialBalance; uint256 unitBalance = deltaBalance / (denominator - (buyFee.liquidity + sellFee.liquidity)); uint256 ethToAddLiquidityWith = unitBalance * (buyFee.liquidity + sellFee.liquidity); if (ethToAddLiquidityWith > 0) { // Add liquidity to uniswap addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith); } // Send ETH to marketing uint256 marketingAmt = unitBalance * 2 * (buyFee.marketing + sellFee.marketing); if (marketingAmt > 0) { payable(_marketingAddress).transfer(marketingAmt); } } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (takeFee) { removeAllFee(); if (sender == uniswapV2Pair) { setBuy(); } if (recipient == uniswapV2Pair) { setSell(); } } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } removeAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeWalletFee(tWallet); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeWalletFee(tWallet); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeWalletFee(tWallet); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tWallet ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, tWallet, _getRate() ); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _takeWalletFee(tWallet); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() { tradingOpen = _status; if(tradingOpen && launchedAt == 0){ launchedAt = block.number; deadBlocks = _deadBlocks; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"buyFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromLimit","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":"includeInLimit","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromLimit","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"liquidity","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy_reflection","type":"uint8"},{"internalType":"uint8","name":"buy_liquidity","type":"uint8"},{"internalType":"uint8","name":"buy_marketing","type":"uint8"},{"internalType":"uint8","name":"sell_reflection","type":"uint8"},{"internalType":"uint8","name":"sell_liquidity","type":"uint8"},{"internalType":"uint8","name":"sell_marketing","type":"uint8"}],"name":"setBothFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052670de0b6b3a764000060098190556200001f905f1962000591565b6200002c905f19620005bb565b600a55600c80546001600160a01b0319167388adb91633f7c5985ac6ce609aa9a7128b097ad517905560408051808201909152600e81526d29a6a0a92a29a2aa102a27a5a2a760911b6020820152600d906200008990826200066f565b5060408051808201909152600381526214d4d560ea1b6020820152600e90620000b390826200066f565b50600f805460ff191660099081179091556012805460ff60201b191664010000000017905554620000f690601e90620000ef906103e862000467565b90620004b9565b6013556009546200011290600390620000ef906103e862000467565b6014556009546200012e90601e90620000ef906103e862000467565b6015555f60168190556017556018805460ff1916905534801562000150575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a54335f9081526002602090815260409182902092909255601080546204040162ffffff199182168117909255601180549091169091179055805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa15801562000216573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200023c91906200073b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000288573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ae91906200073b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002f9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200031f91906200073b565b6001600160a01b0390811660a0528116608052600160055f620003495f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260058452828120805486166001908117909155600c805484168352848320805488168317905554909216815260089384905291822080549094168117909355620003ca5f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526008909252902080549091166001179055620004113390565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200045891815260200190565b60405180910390a350620007e1565b5f620004b083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200054360201b60201c565b90505b92915050565b5f825f03620004ca57505f620004b3565b5f620004d7838562000763565b905082620004e685836200077d565b14620004b05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b5f8183620005665760405162461bcd60e51b81526004016200053a919062000793565b505f6200057484866200077d565b95945050505050565b634e487b7160e01b5f52601260045260245ffd5b5f82620005a257620005a26200057d565b500690565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620004b357620004b3620005a7565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005fa57607f821691505b6020821081036200061957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200066a57805f5260205f20601f840160051c81016020851015620006465750805b601f840160051c820191505b8181101562000667575f815560010162000652565b50505b505050565b81516001600160401b038111156200068b576200068b620005d1565b620006a3816200069c8454620005e5565b846200061f565b602080601f831160018114620006d9575f8415620006c15750858301515b5f19600386901b1c1916600185901b17855562000733565b5f85815260208120601f198616915b828110156200070957888601518255948401946001909101908401620006e8565b50858210156200072757878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f602082840312156200074c575f80fd5b81516001600160a01b0381168114620004b0575f80fd5b8082028115828204841417620004b357620004b3620005a7565b5f826200078e576200078e6200057d565b500490565b5f602080835283518060208501525f5b81811015620007c157858101830151858201604001528201620007a3565b505f604082860101526040601f19601f8301168501019250505092915050565b60805160a05161254f620008425f395f818161040c0152818161106e015281816111c40152818161150b015261158101525f818161028a01528181611948015281816119ff01528181611a3b01528181611aa70152611b02015261254f5ff3fe6080604052600436106101f4575f3560e01c806388f8202011610108578063b27bcfba1161009d578063dd62ed3e1161006d578063dd62ed3e14610645578063ea2f0b3714610689578063f0f165af146106a8578063f2fde38b146106c7578063fabb0b4f146106e6575f80fd5b8063b27bcfba146105b1578063c49b9a80146105d0578063caac7934146105ef578063d94160e01461060e575f80fd5b806395d89b41116100d857806395d89b4114610534578063a87859f614610548578063a9059cbb14610573578063aacebbe314610592575f80fd5b806388f82020146104ad5780638da5cb5b146104e45780638f9a55c01461050057806391d919a914610515575f80fd5b80632d8381191161018957806349bd5a5e1161015957806349bd5a5e146103fb5780635342acb41461042e57806370a0823114610465578063715018a6146104845780637d1db4a514610498575f80fd5b80632d83811914610370578063313ce5671461038f578063437823ec146103b057806347062402146103cf575f80fd5b806318160ddd116101c457806318160ddd146102c457806323b872dd146102e25780632b14ca56146103015780632d4103d614610351575f80fd5b806306fdde03146101ff578063095ea7b3146102295780630bd3a7f9146102585780631694505e14610279575f80fd5b366101fb57005b5f80fd5b34801561020a575f80fd5b506102136106fb565b6040516102209190612112565b60405180910390f35b348015610234575f80fd5b50610248610243366004612175565b61078b565b6040519015158152602001610220565b348015610263575f80fd5b5061027761027236600461219f565b6107a1565b005b348015610284575f80fd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610220565b3480156102cf575f80fd5b506009545b604051908152602001610220565b3480156102ed575f80fd5b506102486102fc3660046121ba565b6107f6565b34801561030c575f80fd5b5060115461032d9060ff808216916101008104821691620100009091041683565b6040805160ff94851681529284166020840152921691810191909152606001610220565b34801561035c575f80fd5b5061027761036b36600461220c565b61085d565b34801561037b575f80fd5b506102d461038a366004612226565b6108b9565b34801561039a575f80fd5b50600f5460405160ff9091168152602001610220565b3480156103bb575f80fd5b506102776103ca36600461219f565b61093b565b3480156103da575f80fd5b5060105461032d9060ff808216916101008104821691620100009091041683565b348015610406575f80fd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b348015610439575f80fd5b5061024861044836600461219f565b6001600160a01b03165f9081526005602052604090205460ff1690565b348015610470575f80fd5b506102d461047f36600461219f565b610987565b34801561048f575f80fd5b506102776109e3565b3480156104a3575f80fd5b506102d460135481565b3480156104b8575f80fd5b506102486104c736600461219f565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156104ef575f80fd5b505f546001600160a01b03166102ac565b34801561050b575f80fd5b506102d460155481565b348015610520575f80fd5b5061027761052f36600461219f565b610a54565b34801561053f575f80fd5b50610213610a9d565b348015610553575f80fd5b506102d461056236600461219f565b60196020525f908152604090205481565b34801561057e575f80fd5b5061024861058d366004612175565b610aac565b34801561059d575f80fd5b506102776105ac36600461219f565b610ab8565b3480156105bc575f80fd5b506102776105cb36600461224d565b610b03565b3480156105db575f80fd5b506102776105ea3660046122bd565b610b81565b3480156105fa575f80fd5b50600c546102ac906001600160a01b031681565b348015610619575f80fd5b5061024861062836600461219f565b6001600160a01b03165f9081526008602052604090205460ff1690565b348015610650575f80fd5b506102d461065f3660046122d6565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b348015610694575f80fd5b506102776106a336600461219f565b610c04565b3480156106b3575f80fd5b506102776106c2366004612226565b610c4d565b3480156106d2575f80fd5b506102776106e136600461219f565b610c7b565b3480156106f1575f80fd5b506102d460165481565b6060600d805461070a9061230d565b80601f01602080910402602001604051908101604052809291908181526020018280546107369061230d565b80156107815780601f1061075857610100808354040283529160200191610781565b820191905f5260205f20905b81548152906001019060200180831161076457829003601f168201915b5050505050905090565b5f610797338484610d62565b5060015b92915050565b5f546001600160a01b031633146107d35760405162461bcd60e51b81526004016107ca90612345565b60405180910390fd5b6001600160a01b03165f908152600860205260409020805460ff19166001179055565b5f610802848484610e85565b610853843361084e856040518060600160405280602881526020016124f2602891396001600160a01b038a165f908152600460209081526040808320338452909152902054919061127e565b610d62565b5060019392505050565b5f546001600160a01b031633146108865760405162461bcd60e51b81526004016107ca90612345565b6018805460ff191683151590811790915560ff1680156108a65750601754155b156108b5574360175560168190555b5050565b5f600a5482111561091f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016107ca565b5f6109286112b6565b905061093483826112d7565b9392505050565b5f546001600160a01b031633146109645760405162461bcd60e51b81526004016107ca90612345565b6001600160a01b03165f908152600560205260409020805460ff19166001179055565b6001600160a01b0381165f9081526006602052604081205460ff16156109c257506001600160a01b03165f9081526003602052604090205490565b6001600160a01b0382165f9081526002602052604090205461079b906108b9565b5f546001600160a01b03163314610a0c5760405162461bcd60e51b81526004016107ca90612345565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610a7d5760405162461bcd60e51b81526004016107ca90612345565b6001600160a01b03165f908152600860205260409020805460ff19169055565b6060600e805461070a9061230d565b5f610797338484610e85565b5f546001600160a01b03163314610ae15760405162461bcd60e51b81526004016107ca90612345565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610b2c5760405162461bcd60e51b81526004016107ca90612345565b6010805460ff97881661ffff199182161761010097891688021762ff00001990811662010000978a16880217909255601180549589169590911694909417928716909502919091179093169290931602179055565b5f546001600160a01b03163314610baa5760405162461bcd60e51b81526004016107ca90612345565b601280548215156401000000000264ff00000000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610bf990831515815260200190565b60405180910390a150565b5f546001600160a01b03163314610c2d5760405162461bcd60e51b81526004016107ca90612345565b6001600160a01b03165f908152600560205260409020805460ff19169055565b5f546001600160a01b03163314610c765760405162461bcd60e51b81526004016107ca90612345565b601455565b5f546001600160a01b03163314610ca45760405162461bcd60e51b81526004016107ca90612345565b6001600160a01b038116610d095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ca565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610dc45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107ca565b6001600160a01b038216610e255760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107ca565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610ee95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107ca565b6001600160a01b038216610f4b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107ca565b5f8111610fac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ca565b5f546001600160a01b03848116911614801590610fd657505f546001600160a01b03838116911614155b1561102d5760185460ff1661102d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016107ca565b5f61103730610987565b9050601354811061104757506013545b6014548110801590819061106557506012546301000000900460ff16155b80156110a357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156110b95750601254640100000000900460ff165b156110cc5760145491506110cc82611318565b6001600160a01b0385165f9081526005602052604090205460019060ff168061110c57506001600160a01b0385165f9081526005602052604090205460ff165b1561111457505f5b801561126a576001600160a01b0386165f9081526008602052604090205460ff1615801561115a57506001600160a01b0385165f9081526008602052604090205460ff16155b1561126a576013548411156111c25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016107ca565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161461126a5760155461120786610987565b611211908661238e565b111561126a5760405162461bcd60e51b815260206004820152602260248201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604482015261329760f11b60648201526084016107ca565b611276868686846114f2565b505050505050565b5f81848411156112a15760405162461bcd60e51b81526004016107ca9190612112565b505f6112ad84866123a1565b95945050505050565b5f805f6112c1611758565b90925090506112d082826112d7565b9250505090565b5f61093483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118c7565b6012805463ff000000191663010000001790556011546010545f916201000080820460ff9081169391820481169261135d9261010091829004831692919004166123b4565b61136791906123b4565b61137191906123b4565b61137c9060026123cd565b60115460105460ff92831693505f9284926113a49261010091829004831692919004166123b4565b6113b19060ff16856123f0565b6113bb9190612407565b90505f6113c882856123a1565b9050476113d4826118f3565b5f6113df82476123a1565b6011546010549192505f916114049160ff6101009182900481169291909104166123b4565b6114119060ff16876123a1565b61141b9083612407565b6011546010549192505f916114409160ff6101009182900481169291909104166123b4565b61144d9060ff16836123f0565b9050801561145f5761145f8682611aa1565b6011546010545f916114819160ff6201000092839004811692909104166123b4565b60ff1661148f8460026123f0565b61149991906123f0565b905080156114da57600c546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156114d8573d5f803e3d5ffd5b505b50506012805463ff0000001916905550505050505050565b80156115f5576115096012805462ffffff19169055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03160361157f576010546012805460ff80841661ffff19909216919091176101008085048316021762ff000019166201000093849004919091169092029190911790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036115f5576011546012805460ff80841661ffff19909216919091176101008085048316021762ff000019166201000093849004919091169092029190911790555b6001600160a01b0384165f9081526006602052604090205460ff16801561163457506001600160a01b0383165f9081526006602052604090205460ff16155b1561164957611644848484611b7e565b611741565b6001600160a01b0384165f9081526006602052604090205460ff1615801561168857506001600160a01b0383165f9081526006602052604090205460ff165b1561169857611644848484611cbd565b6001600160a01b0384165f9081526006602052604090205460ff161580156116d857506001600160a01b0383165f9081526006602052604090205460ff16155b156116e857611644848484611d71565b6001600160a01b0384165f9081526006602052604090205460ff16801561172657506001600160a01b0383165f9081526006602052604090205460ff165b1561173657611644848484611dc2565b611741848484611d71565b6117526012805462ffffff19169055565b50505050565b600a546009545f918291825b600754811015611897578260025f6007848154811061178557611785612426565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806117ed57508160035f600784815481106117c7576117c7612426565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561180357600a54600954945094505050509091565b61184760025f6007848154811061181c5761181c612426565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548490611e3d565b925061188d60035f6007848154811061186257611862612426565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548390611e3d565b9150600101611764565b50600954600a546118a7916112d7565b8210156118be57600a546009549350935050509091565b90939092509050565b5f81836118e75760405162461bcd60e51b81526004016107ca9190612112565b505f6112ad8486612407565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061192657611926612426565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c6919061243a565b816001815181106119d9576119d9612426565b60200260200101906001600160a01b031690816001600160a01b031681525050611a24307f000000000000000000000000000000000000000000000000000000000000000084610d62565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a789085905f90869030904290600401612455565b5f604051808303815f87803b158015611a8f575f80fd5b505af1158015611276573d5f803e3d5ffd5b611acc307f000000000000000000000000000000000000000000000000000000000000000084610d62565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611b52573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b7791906124c6565b5050505050565b5f805f80611b8b85611e7e565b93509350935093505f805f611baa88878787611ba56112b6565b611ed7565b6001600160a01b038d165f908152600360205260409020549295509093509150611bd49089611e3d565b6001600160a01b038b165f90815260036020908152604080832093909355600290522054611c029084611e3d565b6001600160a01b03808c165f9081526002602052604080822093909355908b1681522054611c309083611f34565b6001600160a01b038a165f90815260026020526040902055611c5185611f92565b611c5a84611f92565b611c648187612015565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051611ca991815260200190565b60405180910390a350505050505050505050565b5f805f80611cca85611e7e565b93509350935093505f805f611ce488878787611ba56112b6565b6001600160a01b038d165f908152600260205260409020549295509093509150611d0e9084611e3d565b6001600160a01b03808c165f90815260026020908152604080832094909455918c16815260039091522054611d439088611f34565b6001600160a01b038a165f90815260036020908152604080832093909355600290522054611c309083611f34565b5f805f80611d7e85611e7e565b93509350935093505f805f611d9888878787611ba56112b6565b6001600160a01b038d165f908152600260205260409020549295509093509150611c029084611e3d565b5f805f80611dcf85611e7e565b93509350935093505f805f611de988878787611ba56112b6565b6001600160a01b038d165f908152600360205260409020549295509093509150611e139089611e3d565b6001600160a01b038b165f90815260036020908152604080832093909355600290522054611d0e90845b5f61093483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061127e565b5f805f805f611e8c86612039565b90505f611e9887612059565b90505f611ea488612078565b90505f611ebb83611eb58b87611e3d565b90611e3d565b9050611ec78183611e3d565b9993985091965094509092505050565b5f808080611ee58986612094565b90505f611ef28987612094565b90505f611eff8988612094565b90505f611f0c8989612094565b90505f611f1f82611eb585818989611e3d565b949d949c50929a509298505050505050505050565b5f80611f40838561238e565b9050838110156109345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107ca565b5f611f9b6112b6565b90505f611fa88383612094565b305f90815260026020526040902054909150611fc49082611f34565b305f9081526002602090815260408083209390935560069052205460ff161561201057305f908152600360205260409020546120009084611f34565b305f908152600360205260409020555b505050565b600a546120229083611e3d565b600a55600b546120329082611f34565b600b555050565b6012545f9061079b9060649061205390859060ff16612094565b906112d7565b6012545f9061079b90606490612053908590610100900460ff16612094565b6012545f9061079b9060649061205390859062010000900460ff165b5f825f036120a357505f61079b565b5f6120ae83856123f0565b9050826120bb8583612407565b146109345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107ca565b5f602080835283518060208501525f5b8181101561213e57858101830151858201604001528201612122565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612172575f80fd5b50565b5f8060408385031215612186575f80fd5b82356121918161215e565b946020939093013593505050565b5f602082840312156121af575f80fd5b81356109348161215e565b5f805f606084860312156121cc575f80fd5b83356121d78161215e565b925060208401356121e78161215e565b929592945050506040919091013590565b80358015158114612207575f80fd5b919050565b5f806040838503121561221d575f80fd5b612191836121f8565b5f60208284031215612236575f80fd5b5035919050565b803560ff81168114612207575f80fd5b5f805f805f8060c08789031215612262575f80fd5b61226b8761223d565b95506122796020880161223d565b94506122876040880161223d565b93506122956060880161223d565b92506122a36080880161223d565b91506122b160a0880161223d565b90509295509295509295565b5f602082840312156122cd575f80fd5b610934826121f8565b5f80604083850312156122e7575f80fd5b82356122f28161215e565b915060208301356123028161215e565b809150509250929050565b600181811c9082168061232157607f821691505b60208210810361233f57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561079b5761079b61237a565b8181038181111561079b5761079b61237a565b60ff818116838216019081111561079b5761079b61237a565b60ff81811683821602908116908181146123e9576123e961237a565b5092915050565b808202811582820484141761079b5761079b61237a565b5f8261242157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561244a575f80fd5b81516109348161215e565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156124a55784516001600160a01b031683529383019391830191600101612480565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156124d8575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220adb8eb63eb0826baa1eb81ebbf11c31dd8b5e0f6f8b44bc57f1d442a247ff0e664736f6c63430008160033
Deployed Bytecode
0x6080604052600436106101f4575f3560e01c806388f8202011610108578063b27bcfba1161009d578063dd62ed3e1161006d578063dd62ed3e14610645578063ea2f0b3714610689578063f0f165af146106a8578063f2fde38b146106c7578063fabb0b4f146106e6575f80fd5b8063b27bcfba146105b1578063c49b9a80146105d0578063caac7934146105ef578063d94160e01461060e575f80fd5b806395d89b41116100d857806395d89b4114610534578063a87859f614610548578063a9059cbb14610573578063aacebbe314610592575f80fd5b806388f82020146104ad5780638da5cb5b146104e45780638f9a55c01461050057806391d919a914610515575f80fd5b80632d8381191161018957806349bd5a5e1161015957806349bd5a5e146103fb5780635342acb41461042e57806370a0823114610465578063715018a6146104845780637d1db4a514610498575f80fd5b80632d83811914610370578063313ce5671461038f578063437823ec146103b057806347062402146103cf575f80fd5b806318160ddd116101c457806318160ddd146102c457806323b872dd146102e25780632b14ca56146103015780632d4103d614610351575f80fd5b806306fdde03146101ff578063095ea7b3146102295780630bd3a7f9146102585780631694505e14610279575f80fd5b366101fb57005b5f80fd5b34801561020a575f80fd5b506102136106fb565b6040516102209190612112565b60405180910390f35b348015610234575f80fd5b50610248610243366004612175565b61078b565b6040519015158152602001610220565b348015610263575f80fd5b5061027761027236600461219f565b6107a1565b005b348015610284575f80fd5b506102ac7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610220565b3480156102cf575f80fd5b506009545b604051908152602001610220565b3480156102ed575f80fd5b506102486102fc3660046121ba565b6107f6565b34801561030c575f80fd5b5060115461032d9060ff808216916101008104821691620100009091041683565b6040805160ff94851681529284166020840152921691810191909152606001610220565b34801561035c575f80fd5b5061027761036b36600461220c565b61085d565b34801561037b575f80fd5b506102d461038a366004612226565b6108b9565b34801561039a575f80fd5b50600f5460405160ff9091168152602001610220565b3480156103bb575f80fd5b506102776103ca36600461219f565b61093b565b3480156103da575f80fd5b5060105461032d9060ff808216916101008104821691620100009091041683565b348015610406575f80fd5b506102ac7f0000000000000000000000004e293c4925f71c6ffc4d6636dc532caa00d863ce81565b348015610439575f80fd5b5061024861044836600461219f565b6001600160a01b03165f9081526005602052604090205460ff1690565b348015610470575f80fd5b506102d461047f36600461219f565b610987565b34801561048f575f80fd5b506102776109e3565b3480156104a3575f80fd5b506102d460135481565b3480156104b8575f80fd5b506102486104c736600461219f565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156104ef575f80fd5b505f546001600160a01b03166102ac565b34801561050b575f80fd5b506102d460155481565b348015610520575f80fd5b5061027761052f36600461219f565b610a54565b34801561053f575f80fd5b50610213610a9d565b348015610553575f80fd5b506102d461056236600461219f565b60196020525f908152604090205481565b34801561057e575f80fd5b5061024861058d366004612175565b610aac565b34801561059d575f80fd5b506102776105ac36600461219f565b610ab8565b3480156105bc575f80fd5b506102776105cb36600461224d565b610b03565b3480156105db575f80fd5b506102776105ea3660046122bd565b610b81565b3480156105fa575f80fd5b50600c546102ac906001600160a01b031681565b348015610619575f80fd5b5061024861062836600461219f565b6001600160a01b03165f9081526008602052604090205460ff1690565b348015610650575f80fd5b506102d461065f3660046122d6565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b348015610694575f80fd5b506102776106a336600461219f565b610c04565b3480156106b3575f80fd5b506102776106c2366004612226565b610c4d565b3480156106d2575f80fd5b506102776106e136600461219f565b610c7b565b3480156106f1575f80fd5b506102d460165481565b6060600d805461070a9061230d565b80601f01602080910402602001604051908101604052809291908181526020018280546107369061230d565b80156107815780601f1061075857610100808354040283529160200191610781565b820191905f5260205f20905b81548152906001019060200180831161076457829003601f168201915b5050505050905090565b5f610797338484610d62565b5060015b92915050565b5f546001600160a01b031633146107d35760405162461bcd60e51b81526004016107ca90612345565b60405180910390fd5b6001600160a01b03165f908152600860205260409020805460ff19166001179055565b5f610802848484610e85565b610853843361084e856040518060600160405280602881526020016124f2602891396001600160a01b038a165f908152600460209081526040808320338452909152902054919061127e565b610d62565b5060019392505050565b5f546001600160a01b031633146108865760405162461bcd60e51b81526004016107ca90612345565b6018805460ff191683151590811790915560ff1680156108a65750601754155b156108b5574360175560168190555b5050565b5f600a5482111561091f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016107ca565b5f6109286112b6565b905061093483826112d7565b9392505050565b5f546001600160a01b031633146109645760405162461bcd60e51b81526004016107ca90612345565b6001600160a01b03165f908152600560205260409020805460ff19166001179055565b6001600160a01b0381165f9081526006602052604081205460ff16156109c257506001600160a01b03165f9081526003602052604090205490565b6001600160a01b0382165f9081526002602052604090205461079b906108b9565b5f546001600160a01b03163314610a0c5760405162461bcd60e51b81526004016107ca90612345565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610a7d5760405162461bcd60e51b81526004016107ca90612345565b6001600160a01b03165f908152600860205260409020805460ff19169055565b6060600e805461070a9061230d565b5f610797338484610e85565b5f546001600160a01b03163314610ae15760405162461bcd60e51b81526004016107ca90612345565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610b2c5760405162461bcd60e51b81526004016107ca90612345565b6010805460ff97881661ffff199182161761010097891688021762ff00001990811662010000978a16880217909255601180549589169590911694909417928716909502919091179093169290931602179055565b5f546001600160a01b03163314610baa5760405162461bcd60e51b81526004016107ca90612345565b601280548215156401000000000264ff00000000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610bf990831515815260200190565b60405180910390a150565b5f546001600160a01b03163314610c2d5760405162461bcd60e51b81526004016107ca90612345565b6001600160a01b03165f908152600560205260409020805460ff19169055565b5f546001600160a01b03163314610c765760405162461bcd60e51b81526004016107ca90612345565b601455565b5f546001600160a01b03163314610ca45760405162461bcd60e51b81526004016107ca90612345565b6001600160a01b038116610d095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107ca565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610dc45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107ca565b6001600160a01b038216610e255760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107ca565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610ee95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107ca565b6001600160a01b038216610f4b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107ca565b5f8111610fac5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107ca565b5f546001600160a01b03848116911614801590610fd657505f546001600160a01b03838116911614155b1561102d5760185460ff1661102d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e000000000000000060448201526064016107ca565b5f61103730610987565b9050601354811061104757506013545b6014548110801590819061106557506012546301000000900460ff16155b80156110a357507f0000000000000000000000004e293c4925f71c6ffc4d6636dc532caa00d863ce6001600160a01b0316856001600160a01b031614155b80156110b95750601254640100000000900460ff165b156110cc5760145491506110cc82611318565b6001600160a01b0385165f9081526005602052604090205460019060ff168061110c57506001600160a01b0385165f9081526005602052604090205460ff165b1561111457505f5b801561126a576001600160a01b0386165f9081526008602052604090205460ff1615801561115a57506001600160a01b0385165f9081526008602052604090205460ff16155b1561126a576013548411156111c25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016107ca565b7f0000000000000000000000004e293c4925f71c6ffc4d6636dc532caa00d863ce6001600160a01b0316856001600160a01b03161461126a5760155461120786610987565b611211908661238e565b111561126a5760405162461bcd60e51b815260206004820152602260248201527f526563697069656e742065786365656473206d61782077616c6c65742073697a604482015261329760f11b60648201526084016107ca565b611276868686846114f2565b505050505050565b5f81848411156112a15760405162461bcd60e51b81526004016107ca9190612112565b505f6112ad84866123a1565b95945050505050565b5f805f6112c1611758565b90925090506112d082826112d7565b9250505090565b5f61093483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118c7565b6012805463ff000000191663010000001790556011546010545f916201000080820460ff9081169391820481169261135d9261010091829004831692919004166123b4565b61136791906123b4565b61137191906123b4565b61137c9060026123cd565b60115460105460ff92831693505f9284926113a49261010091829004831692919004166123b4565b6113b19060ff16856123f0565b6113bb9190612407565b90505f6113c882856123a1565b9050476113d4826118f3565b5f6113df82476123a1565b6011546010549192505f916114049160ff6101009182900481169291909104166123b4565b6114119060ff16876123a1565b61141b9083612407565b6011546010549192505f916114409160ff6101009182900481169291909104166123b4565b61144d9060ff16836123f0565b9050801561145f5761145f8682611aa1565b6011546010545f916114819160ff6201000092839004811692909104166123b4565b60ff1661148f8460026123f0565b61149991906123f0565b905080156114da57600c546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156114d8573d5f803e3d5ffd5b505b50506012805463ff0000001916905550505050505050565b80156115f5576115096012805462ffffff19169055565b7f0000000000000000000000004e293c4925f71c6ffc4d6636dc532caa00d863ce6001600160a01b0316846001600160a01b03160361157f576010546012805460ff80841661ffff19909216919091176101008085048316021762ff000019166201000093849004919091169092029190911790555b7f0000000000000000000000004e293c4925f71c6ffc4d6636dc532caa00d863ce6001600160a01b0316836001600160a01b0316036115f5576011546012805460ff80841661ffff19909216919091176101008085048316021762ff000019166201000093849004919091169092029190911790555b6001600160a01b0384165f9081526006602052604090205460ff16801561163457506001600160a01b0383165f9081526006602052604090205460ff16155b1561164957611644848484611b7e565b611741565b6001600160a01b0384165f9081526006602052604090205460ff1615801561168857506001600160a01b0383165f9081526006602052604090205460ff165b1561169857611644848484611cbd565b6001600160a01b0384165f9081526006602052604090205460ff161580156116d857506001600160a01b0383165f9081526006602052604090205460ff16155b156116e857611644848484611d71565b6001600160a01b0384165f9081526006602052604090205460ff16801561172657506001600160a01b0383165f9081526006602052604090205460ff165b1561173657611644848484611dc2565b611741848484611d71565b6117526012805462ffffff19169055565b50505050565b600a546009545f918291825b600754811015611897578260025f6007848154811061178557611785612426565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806117ed57508160035f600784815481106117c7576117c7612426565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561180357600a54600954945094505050509091565b61184760025f6007848154811061181c5761181c612426565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548490611e3d565b925061188d60035f6007848154811061186257611862612426565b5f9182526020808320909101546001600160a01b031683528201929092526040019020548390611e3d565b9150600101611764565b50600954600a546118a7916112d7565b8210156118be57600a546009549350935050509091565b90939092509050565b5f81836118e75760405162461bcd60e51b81526004016107ca9190612112565b505f6112ad8486612407565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061192657611926612426565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c6919061243a565b816001815181106119d9576119d9612426565b60200260200101906001600160a01b031690816001600160a01b031681525050611a24307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610d62565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611a789085905f90869030904290600401612455565b5f604051808303815f87803b158015611a8f575f80fd5b505af1158015611276573d5f803e3d5ffd5b611acc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610d62565b60405163f305d71960e01b81523060048201819052602482018490525f60448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611b52573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b7791906124c6565b5050505050565b5f805f80611b8b85611e7e565b93509350935093505f805f611baa88878787611ba56112b6565b611ed7565b6001600160a01b038d165f908152600360205260409020549295509093509150611bd49089611e3d565b6001600160a01b038b165f90815260036020908152604080832093909355600290522054611c029084611e3d565b6001600160a01b03808c165f9081526002602052604080822093909355908b1681522054611c309083611f34565b6001600160a01b038a165f90815260026020526040902055611c5185611f92565b611c5a84611f92565b611c648187612015565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051611ca991815260200190565b60405180910390a350505050505050505050565b5f805f80611cca85611e7e565b93509350935093505f805f611ce488878787611ba56112b6565b6001600160a01b038d165f908152600260205260409020549295509093509150611d0e9084611e3d565b6001600160a01b03808c165f90815260026020908152604080832094909455918c16815260039091522054611d439088611f34565b6001600160a01b038a165f90815260036020908152604080832093909355600290522054611c309083611f34565b5f805f80611d7e85611e7e565b93509350935093505f805f611d9888878787611ba56112b6565b6001600160a01b038d165f908152600260205260409020549295509093509150611c029084611e3d565b5f805f80611dcf85611e7e565b93509350935093505f805f611de988878787611ba56112b6565b6001600160a01b038d165f908152600360205260409020549295509093509150611e139089611e3d565b6001600160a01b038b165f90815260036020908152604080832093909355600290522054611d0e90845b5f61093483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061127e565b5f805f805f611e8c86612039565b90505f611e9887612059565b90505f611ea488612078565b90505f611ebb83611eb58b87611e3d565b90611e3d565b9050611ec78183611e3d565b9993985091965094509092505050565b5f808080611ee58986612094565b90505f611ef28987612094565b90505f611eff8988612094565b90505f611f0c8989612094565b90505f611f1f82611eb585818989611e3d565b949d949c50929a509298505050505050505050565b5f80611f40838561238e565b9050838110156109345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107ca565b5f611f9b6112b6565b90505f611fa88383612094565b305f90815260026020526040902054909150611fc49082611f34565b305f9081526002602090815260408083209390935560069052205460ff161561201057305f908152600360205260409020546120009084611f34565b305f908152600360205260409020555b505050565b600a546120229083611e3d565b600a55600b546120329082611f34565b600b555050565b6012545f9061079b9060649061205390859060ff16612094565b906112d7565b6012545f9061079b90606490612053908590610100900460ff16612094565b6012545f9061079b9060649061205390859062010000900460ff165b5f825f036120a357505f61079b565b5f6120ae83856123f0565b9050826120bb8583612407565b146109345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107ca565b5f602080835283518060208501525f5b8181101561213e57858101830151858201604001528201612122565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612172575f80fd5b50565b5f8060408385031215612186575f80fd5b82356121918161215e565b946020939093013593505050565b5f602082840312156121af575f80fd5b81356109348161215e565b5f805f606084860312156121cc575f80fd5b83356121d78161215e565b925060208401356121e78161215e565b929592945050506040919091013590565b80358015158114612207575f80fd5b919050565b5f806040838503121561221d575f80fd5b612191836121f8565b5f60208284031215612236575f80fd5b5035919050565b803560ff81168114612207575f80fd5b5f805f805f8060c08789031215612262575f80fd5b61226b8761223d565b95506122796020880161223d565b94506122876040880161223d565b93506122956060880161223d565b92506122a36080880161223d565b91506122b160a0880161223d565b90509295509295509295565b5f602082840312156122cd575f80fd5b610934826121f8565b5f80604083850312156122e7575f80fd5b82356122f28161215e565b915060208301356123028161215e565b809150509250929050565b600181811c9082168061232157607f821691505b60208210810361233f57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561079b5761079b61237a565b8181038181111561079b5761079b61237a565b60ff818116838216019081111561079b5761079b61237a565b60ff81811683821602908116908181146123e9576123e961237a565b5092915050565b808202811582820484141761079b5761079b61237a565b5f8261242157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561244a575f80fd5b81516109348161215e565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156124a55784516001600160a01b031683529383019391830191600101612480565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f606084860312156124d8575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220adb8eb63eb0826baa1eb81ebbf11c31dd8b5e0f6f8b44bc57f1d442a247ff0e664736f6c63430008160033
Deployed Bytecode Sourcemap
25169:21137:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28498:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29483:193;;;;;;;;;;-1:-1:-1;29483:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;29483:193:0;1023:187:1;30978:115:0;;;;;;;;;;-1:-1:-1;30978:115:0;;;;;:::i;:::-;;:::i;:::-;;26483:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1658:32:1;;;1640:51;;1628:2;1613:18;26483:51:0;1467:230:1;28775:95:0;;;;;;;;;;-1:-1:-1;28855:7:0;;28775:95;;;1848:25:1;;;1836:2;1821:18;28775:95:0;1702:177:1;29684:446:0;;;;;;;;;;-1:-1:-1;29684:446:0;;;;;:::i;:::-;;:::i;26347:22::-;;;;;;;;;;-1:-1:-1;26347:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;2565:4:1;2553:17;;;2535:36;;2607:17;;;2602:2;2587:18;;2580:45;2661:17;;2641:18;;;2634:45;;;;2523:2;2508:18;26347:22:0;2345:340:1;46052:251:0;;;;;;;;;;-1:-1:-1;46052:251:0;;;;;:::i;:::-;;:::i;30270:322::-;;;;;;;;;;-1:-1:-1;30270:322:0;;;;;:::i;:::-;;:::i;28684:83::-;;;;;;;;;;-1:-1:-1;28750:9:0;;28684:83;;28750:9;;;;3435:36:1;;3423:2;3408:18;28684:83:0;3293:184:1;30741:111:0;;;;;;;;;;-1:-1:-1;30741:111:0;;;;;:::i;:::-;;:::i;26320:20::-;;;;;;;;;;-1:-1:-1;26320:20:0;;;;;;;;;;;;;;;;;;;;;;26541:38;;;;;;;;;;;;;;;36116:124;;;;;;;;;;-1:-1:-1;36116:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;36205:27:0;36181:4;36205:27;;;:18;:27;;;;;;;;;36116:124;28878:198;;;;;;;;;;-1:-1:-1;28878:198:0;;;;;:::i;:::-;;:::i;15233:148::-;;;;;;;;;;;;;:::i;26658:55::-;;;;;;;;;;;;;;;;30140:120;;;;;;;;;;-1:-1:-1;30140:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30232:20:0;30208:4;30232:20;;;:11;:20;;;;;;;;;30140:120;14591:79;;;;;;;;;;-1:-1:-1;14629:7:0;14656:6;-1:-1:-1;;;;;14656:6:0;14591:79;;26811:57;;;;;;;;;;;;;;;;31101:114;;;;;;;;;;-1:-1:-1;31101:114:0;;;;;:::i;:::-;;:::i;28589:87::-;;;;;;;;;;;;;:::i;27359:46::-;;;;;;;;;;-1:-1:-1;27359:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;29084:199;;;;;;;;;;-1:-1:-1;29084:199:0;;;;;:::i;:::-;;:::i;30604:127::-;;;;;;;;;;-1:-1:-1;30604:127:0;;;;;:::i;:::-;;:::i;31223:514::-;;;;;;;;;;-1:-1:-1;31223:514:0;;;;;:::i;:::-;;:::i;31893:171::-;;;;;;;;;;-1:-1:-1;31893:171:0;;;;;:::i;:::-;;:::i;25870:103::-;;;;;;;;;;-1:-1:-1;25870:103:0;;;;-1:-1:-1;;;;;25870:103:0;;;36248:128;;;;;;;;;;-1:-1:-1;36248:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;36339:29:0;36315:4;36339:29;;;:20;:29;;;;;;;;;36248:128;29291:184;;;;;;;;;;-1:-1:-1;29291:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;29440:18:0;;;29408:7;29440:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29291:184;30860:110;;;;;;;;;;-1:-1:-1;30860:110:0;;;;;:::i;:::-;;:::i;31745:140::-;;;;;;;;;;-1:-1:-1;31745:140:0;;;;;:::i;:::-;;:::i;15536:281::-;;;;;;;;;;-1:-1:-1;15536:281:0;;;;;:::i;:::-;;:::i;27261:29::-;;;;;;;;;;;;;;;;28498:83;28535:13;28568:5;28561:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28498:83;:::o;29483:193::-;29585:4;29607:39;7435:10;29630:7;29639:6;29607:8;:39::i;:::-;-1:-1:-1;29664:4:0;29483:193;;;;;:::o;30978:115::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;31049:29:0::1;;::::0;;;:20:::1;:29;::::0;;;;:36;;-1:-1:-1;;31049:36:0::1;31081:4;31049:36;::::0;;30978:115::o;29684:446::-;29816:4;29833:36;29843:6;29851:9;29862:6;29833:9;:36::i;:::-;29880:220;29903:6;7435:10;29951:138;30007:6;29951:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29951:19:0;;;;;;:11;:19;;;;;;;;7435:10;29951:33;;;;;;;;;;:37;:138::i;:::-;29880:8;:220::i;:::-;-1:-1:-1;30118:4:0;29684:446;;;;;:::o;46052:251::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;46139:11:::1;:21:::0;;-1:-1:-1;;46139:21:0::1;::::0;::::1;;::::0;;::::1;::::0;;;::::1;46174:11:::0;:30;::::1;;;-1:-1:-1::0;46189:10:0::1;::::0;:15;46174:30:::1;46171:125;;;46233:12;46220:10;:25:::0;46260:10:::1;:24:::0;;;46171:125:::1;46052:251:::0;;:::o;30270:322::-;30364:7;30422;;30411;:18;;30389:110;;;;-1:-1:-1;;;30389:110:0;;6401:2:1;30389:110:0;;;6383:21:1;6440:2;6420:18;;;6413:30;6479:34;6459:18;;;6452:62;-1:-1:-1;;;6530:18:1;;;6523:40;6580:19;;30389:110:0;6199:406:1;30389:110:0;30510:19;30532:10;:8;:10::i;:::-;30510:32;-1:-1:-1;30560:24:0;:7;30510:32;30560:11;:24::i;:::-;30553:31;30270:322;-1:-1:-1;;;30270:322:0:o;30741:111::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30810:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;30810:34:0::1;30840:4;30810:34;::::0;;30741:111::o;28878:198::-;-1:-1:-1;;;;;28968:20:0;;28944:7;28968:20;;;:11;:20;;;;;;;;28964:49;;;-1:-1:-1;;;;;;28997:16:0;;;;;:7;:16;;;;;;;28878:198::o;28964:49::-;-1:-1:-1;;;;;29051:16:0;;;;;;:7;:16;;;;;;29031:37;;:19;:37::i;15233:148::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;15340:1:::1;15324:6:::0;;15303:40:::1;::::0;-1:-1:-1;;;;;15324:6:0;;::::1;::::0;15303:40:::1;::::0;15340:1;;15303:40:::1;15371:1;15354:19:::0;;-1:-1:-1;;;;;;15354:19:0::1;::::0;;15233:148::o;31101:114::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31170:29:0::1;31202:5;31170:29:::0;;;:20:::1;:29;::::0;;;;:37;;-1:-1:-1;;31170:37:0::1;::::0;;31101:114::o;28589:87::-;28628:13;28661:7;28654:14;;;;;:::i;29084:199::-;29189:4;29211:42;7435:10;29235:9;29246:6;29211:9;:42::i;30604:127::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;30693:17:::1;:30:::0;;-1:-1:-1;;;;;;30693:30:0::1;-1:-1:-1::0;;;;;30693:30:0;;;::::1;::::0;;;::::1;::::0;;30604:127::o;31223:514::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;31470:6:::1;:34:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;31515:32:0;;;;31470:34:::1;31515:32:::0;;::::1;::::0;::::1;;-1:-1:-1::0;;31558:32:0;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;31603:7:::1;:36:::0;;;;::::1;31650:34:::0;;;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;31695::::0;;::::1;::::0;;;::::1;;;::::0;;31223:514::o;31893:171::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;31970:21:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31970:32:0;;::::1;;::::0;;32018:38:::1;::::0;::::1;::::0;::::1;::::0;31994:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;32018:38:0::1;;;;;;;;31893:171:::0;:::o;30860:110::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30927:27:0::1;30957:5;30927:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;30927:35:0::1;::::0;;30860:110::o;31745:140::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;31836:29:::1;:41:::0;31745:140::o;15536:281::-;14803:6;;-1:-1:-1;;;;;14803:6:0;7435:10;14803:22;14795:67;;;;-1:-1:-1;;;14795:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15639:22:0;::::1;15617:110;;;::::0;-1:-1:-1;;;15617:110:0;;6812:2:1;15617:110:0::1;::::0;::::1;6794:21:1::0;6851:2;6831:18;;;6824:30;6890:34;6870:18;;;6863:62;-1:-1:-1;;;6941:18:1;;;6934:36;6987:19;;15617:110:0::1;6610:402:1::0;15617:110:0::1;15764:6;::::0;;15743:38:::1;::::0;-1:-1:-1;;;;;15743:38:0;;::::1;::::0;15764:6;::::1;::::0;15743:38:::1;::::0;::::1;15792:6;:17:::0;;-1:-1:-1;;;;;;15792:17:0::1;-1:-1:-1::0;;;;;15792:17:0;;;::::1;::::0;;;::::1;::::0;;15536:281::o;36384:371::-;-1:-1:-1;;;;;36511:19:0;;36503:68;;;;-1:-1:-1;;;36503:68:0;;7219:2:1;36503:68:0;;;7201:21:1;7258:2;7238:18;;;7231:30;7297:34;7277:18;;;7270:62;-1:-1:-1;;;7348:18:1;;;7341:34;7392:19;;36503:68:0;7017:400:1;36503:68:0;-1:-1:-1;;;;;36590:21:0;;36582:68;;;;-1:-1:-1;;;36582:68:0;;7624:2:1;36582:68:0;;;7606:21:1;7663:2;7643:18;;;7636:30;7702:34;7682:18;;;7675:62;-1:-1:-1;;;7753:18:1;;;7746:32;7795:19;;36582:68:0;7422:398:1;36582:68:0;-1:-1:-1;;;;;36663:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;36715:32;;1848:25:1;;;36715:32:0;;1821:18:1;36715:32:0;;;;;;;36384:371;;;:::o;36763:2343::-;-1:-1:-1;;;;;36885:18:0;;36877:68;;;;-1:-1:-1;;;36877:68:0;;8027:2:1;36877:68:0;;;8009:21:1;8066:2;8046:18;;;8039:30;8105:34;8085:18;;;8078:62;-1:-1:-1;;;8156:18:1;;;8149:35;8201:19;;36877:68:0;7825:401:1;36877:68:0;-1:-1:-1;;;;;36964:16:0;;36956:64;;;;-1:-1:-1;;;36956:64:0;;8433:2:1;36956:64:0;;;8415:21:1;8472:2;8452:18;;;8445:30;8511:34;8491:18;;;8484:62;-1:-1:-1;;;8562:18:1;;;8555:33;8605:19;;36956:64:0;8231:399:1;36956:64:0;37048:1;37039:6;:10;37031:64;;;;-1:-1:-1;;;37031:64:0;;8837:2:1;37031:64:0;;;8819:21:1;8876:2;8856:18;;;8849:30;8915:34;8895:18;;;8888:62;-1:-1:-1;;;8966:18:1;;;8959:39;9015:19;;37031:64:0;8635:405:1;37031:64:0;14629:7;14656:6;-1:-1:-1;;;;;37121:15:0;;;14656:6;;37121:15;;;;:32;;-1:-1:-1;14629:7:0;14656:6;-1:-1:-1;;;;;37140:13:0;;;14656:6;;37140:13;;37121:32;37116:88;;;37164:11;;;;37156:48;;;;-1:-1:-1;;;37156:48:0;;9247:2:1;37156:48:0;;;9229:21:1;9286:2;9266:18;;;9259:30;9325:26;9305:18;;;9298:54;9369:18;;37156:48:0;9045:348:1;37156:48:0;37539:28;37570:24;37588:4;37570:9;:24::i;:::-;37539:55;;37635:12;;37611:20;:36;37607:104;;-1:-1:-1;37687:12:0;;37607:104;37787:29;;37750:66;;;;;;;37845:53;;-1:-1:-1;37882:16:0;;;;;;;37881:17;37845:53;:91;;;;;37923:13;-1:-1:-1;;;;;37915:21:0;:4;-1:-1:-1;;;;;37915:21:0;;;37845:91;:129;;;;-1:-1:-1;37953:21:0;;;;;;;37845:129;37827:318;;;38024:29;;38001:52;;38097:36;38112:20;38097:14;:36::i;:::-;-1:-1:-1;;;;;38338:24:0;;38218:12;38338:24;;;:18;:24;;;;;;38233:4;;38338:24;;;:50;;-1:-1:-1;;;;;;38366:22:0;;;;;;:18;:22;;;;;;;;38338:50;38334:98;;;-1:-1:-1;38415:5:0;38334:98;38446:7;38442:536;;;-1:-1:-1;;;;;38475:26:0;;;;;;:20;:26;;;;;;;;38474:27;:56;;;;-1:-1:-1;;;;;;38506:24:0;;;;;;:20;:24;;;;;;;;38505:25;38474:56;38470:497;;;38591:12;;38581:6;:22;;38551:136;;;;-1:-1:-1;;;38551:136:0;;9600:2:1;38551:136:0;;;9582:21:1;9639:2;9619:18;;;9612:30;9678:34;9658:18;;;9651:62;-1:-1:-1;;;9729:18:1;;;9722:38;9777:19;;38551:136:0;9398:404:1;38551:136:0;38716:13;-1:-1:-1;;;;;38710:19:0;:2;-1:-1:-1;;;;;38710:19:0;;38706:228;;38814:14;;38797:13;38807:2;38797:9;:13::i;:::-;38788:22;;:6;:22;:::i;:::-;:40;;38754:160;;;;-1:-1:-1;;;38754:160:0;;10271:2:1;38754:160:0;;;10253:21:1;10310:2;10290:18;;;10283:30;10349:34;10329:18;;;10322:62;-1:-1:-1;;;10400:18:1;;;10393:32;10442:19;;38754:160:0;10069:398:1;38754:160:0;39057:41;39072:4;39078:2;39082:6;39090:7;39057:14;:41::i;:::-;36866:2240;;;36763:2343;;;:::o;4099:226::-;4219:7;4255:12;4247:6;;;;4239:29;;;;-1:-1:-1;;;4239:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4279:9:0;4291:5;4295:1;4291;:5;:::i;:::-;4279:17;4099:226;-1:-1:-1;;;;;4099:226:0:o;33593:164::-;33635:7;33656:15;33673;33692:19;:17;:19::i;:::-;33655:56;;-1:-1:-1;33655:56:0;-1:-1:-1;33729:20:0;33655:56;;33729:11;:20::i;:::-;33722:27;;;;33593:164;:::o;5079:132::-;5137:7;5164:39;5168:1;5171;5164:39;;;;;;;;;;;;;;;;;:3;:39::i;39114:1195::-;27175:16;:23;;-1:-1:-1;;27175:23:0;;;;;39317:7:::1;:17:::0;39298:6:::1;:16:::0;27175:23;;39317:17;;;::::1;27175:23:::0;39317:17;;::::1;::::0;39298:16;;::::1;::::0;::::1;::::0;39259:36:::1;::::0;27175:23;39278:17;;;::::1;::::0;::::1;::::0;39259:16;;::::1;;:36;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;39258:81;::::0;39338:1:::1;39258:81;:::i;:::-;39415:7;:17:::0;39396:6:::1;:16:::0;39236:103:::1;::::0;;::::1;::::0;-1:-1:-1;39350:32:0::1;::::0;39236:103;;39396:36:::1;::::0;39415:17:::1;::::0;;;::::1;::::0;::::1;::::0;39396:16;;::::1;;:36;:::i;:::-;39386:47;::::0;::::1;;:6:::0;:47:::1;:::i;:::-;39385:63;;;;:::i;:::-;39350:98:::0;-1:-1:-1;39459:14:0::1;39476:33;39350:98:::0;39476:6;:33:::1;:::i;:::-;39459:50:::0;-1:-1:-1;39547:21:0::1;39581:24;39459:50:::0;39581:16:::1;:24::i;:::-;39618:20;39641:38;39665:14:::0;39641:21:::1;:38;:::i;:::-;39762:7;:17:::0;39743:6:::1;:16:::0;39618:61;;-1:-1:-1;39690:19:0::1;::::0;39743:36:::1;::::0;39762:17:::1;;::::0;;;::::1;::::0;::::1;::::0;39743:16;;;::::1;;:36;:::i;:::-;39728:52;::::0;::::1;;:11:::0;:52:::1;:::i;:::-;39712:69;::::0;:12;:69:::1;:::i;:::-;39858:7;:17:::0;39839:6:::1;:16:::0;39690:91;;-1:-1:-1;39792:29:0::1;::::0;39839:36:::1;::::0;39858:17:::1;;::::0;;;::::1;::::0;::::1;::::0;39839:16;;;::::1;;:36;:::i;:::-;39824:52;::::0;::::1;;:11:::0;:52:::1;:::i;:::-;39792:84:::0;-1:-1:-1;39893:25:0;;39889:160:::1;;39976:61;39989:24;40015:21;39976:12;:61::i;:::-;40156:7;:17:::0;40137:6:::1;:16:::0;40095:20:::1;::::0;40137:36:::1;::::0;40156:17:::1;::::0;;;;::::1;::::0;::::1;::::0;40137:16;;::::1;;:36;:::i;:::-;40118:56;;:15;:11:::0;40132:1:::1;40118:15;:::i;:::-;:56;;;;:::i;:::-;40095:79:::0;-1:-1:-1;40200:16:0;;40196:98:::1;;40241:17;::::0;40233:49:::1;::::0;-1:-1:-1;;;;;40241:17:0;;::::1;::::0;40233:49;::::1;;;::::0;40269:12;;40241:17:::1;40233:49:::0;40241:17;40233:49;40269:12;40241:17;40233:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40196:98;-1:-1:-1::0;;27221:16:0;:24;;-1:-1:-1;;27221:24:0;;;-1:-1:-1;;;;;;;39114:1195:0:o;41514:1022::-;41669:7;41665:230;;;41693:14;35653;:18;;-1:-1:-1;;35710:17:0;;;35610:132;41693:14;41736:13;-1:-1:-1;;;;;41726:23:0;:6;-1:-1:-1;;;;;41726:23:0;;41722:72;;35804:6;:17;35787:14;:34;;35804:17;;;;-1:-1:-1;;35832:32:0;;;;;;;35804:17;35848:16;;;;;35832:32;;-1:-1:-1;;35875:32:0;35891:16;;;;;;;;;35875:32;;;;;;;;;41770:8;41825:13;-1:-1:-1;;;;;41812:26:0;:9;-1:-1:-1;;;;;41812:26:0;;41808:76;;35986:7;:18;35969:14;:35;;35986:18;;;;-1:-1:-1;;36015:33:0;;;;;;;35986:18;36031:17;;;;;36015:33;;-1:-1:-1;;36059:33:0;36075:17;;;;;;;;;36059:33;;;;;;;;;41859:9;-1:-1:-1;;;;;41911:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;41935:22:0;;;;;;:11;:22;;;;;;;;41934:23;41911:46;41907:597;;;41974:48;41996:6;42004:9;42015:6;41974:21;:48::i;:::-;41907:597;;;-1:-1:-1;;;;;42045:19:0;;;;;;:11;:19;;;;;;;;42044:20;:46;;;;-1:-1:-1;;;;;;42068:22:0;;;;;;:11;:22;;;;;;;;42044:46;42040:464;;;42107:46;42127:6;42135:9;42146:6;42107:19;:46::i;42040:464::-;-1:-1:-1;;;;;42176:19:0;;;;;;:11;:19;;;;;;;;42175:20;:47;;;;-1:-1:-1;;;;;;42200:22:0;;;;;;:11;:22;;;;;;;;42199:23;42175:47;42171:333;;;42239:44;42257:6;42265:9;42276:6;42239:17;:44::i;42171:333::-;-1:-1:-1;;;;;42305:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42328:22:0;;;;;;:11;:22;;;;;;;;42305:45;42301:203;;;42367:48;42389:6;42397:9;42408:6;42367:21;:48::i;42301:203::-;42448:44;42466:6;42474:9;42485:6;42448:17;:44::i;:::-;42514:14;35653;:18;;-1:-1:-1;;35710:17:0;;;35610:132;42514:14;41514:1022;;;;:::o;33765:605::-;33863:7;;33899;;33816;;;;;33917:338;33941:9;:16;33937:20;;33917:338;;;34025:7;34001;:21;34009:9;34019:1;34009:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34009:12:0;34001:21;;;;;;;;;;;;;:31;;:83;;;34077:7;34053;:21;34061:9;34071:1;34061:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34061:12:0;34053:21;;;;;;;;;;;;;:31;34001:83;33979:146;;;34108:7;;34117;;34100:25;;;;;;;33765:605;;:::o;33979:146::-;34150:34;34162:7;:21;34170:9;34180:1;34170:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34170:12:0;34162:21;;;;;;;;;;;;;34150:7;;:11;:34::i;:::-;34140:44;;34209:34;34221:7;:21;34229:9;34239:1;34229:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34229:12:0;34221:21;;;;;;;;;;;;;34209:7;;:11;:34::i;:::-;34199:44;-1:-1:-1;33959:3:0;;33917:338;;;-1:-1:-1;34291:7:0;;34279;;:20;;:11;:20::i;:::-;34269:7;:30;34265:61;;;34309:7;;34318;;34301:25;;;;;;33765:605;;:::o;34265:61::-;34345:7;;34354;;-1:-1:-1;33765:605:0;-1:-1:-1;33765:605:0:o;5707:312::-;5827:7;5862:12;5855:5;5847:28;;;;-1:-1:-1;;;5847:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5886:9:0;5898:5;5902:1;5898;:5;:::i;40317:589::-;40467:16;;;40481:1;40467:16;;;;;;;;40443:21;;40467:16;;;;;;;;;;-1:-1:-1;40467:16:0;40443:40;;40512:4;40494;40499:1;40494:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;40494:23:0;;;-1:-1:-1;;;;;40494:23:0;;;;;40538:15;-1:-1:-1;;;;;40538:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40528:4;40533:1;40528:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;40528:32:0;;;-1:-1:-1;;;;;40528:32:0;;;;;40573:62;40590:4;40605:15;40623:11;40573:8;:62::i;:::-;40674:224;;-1:-1:-1;;;40674:224:0;;-1:-1:-1;;;;;40674:15:0;:66;;;;:224;;40755:11;;40781:1;;40825:4;;40852;;40872:15;;40674:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40914:519;41062:62;41079:4;41094:15;41112:11;41062:8;:62::i;:::-;41167:258;;-1:-1:-1;;;41167:258:0;;41239:4;41167:258;;;13229:34:1;;;13279:18;;;13272:34;;;41285:1:0;13322:18:1;;;13315:34;;;13365:18;;;13358:34;13408:19;;;13401:44;41399:15:0;13461:19:1;;;13454:35;41167:15:0;-1:-1:-1;;;;;41167:31:0;;;;41206:9;;13163:19:1;;41167:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40914:519;;:::o;44239:863::-;44390:23;44428:12;44455:18;44488:15;44517:20;44529:7;44517:11;:20::i;:::-;44375:162;;;;;;;;44549:15;44566:23;44591:12;44607:135;44633:7;44655:4;44674:10;44699:7;44721:10;:8;:10::i;:::-;44607:11;:135::i;:::-;-1:-1:-1;;;;;44773:15:0;;;;;;:7;:15;;;;;;44548:194;;-1:-1:-1;44548:194:0;;-1:-1:-1;44548:194:0;-1:-1:-1;44773:28:0;;44793:7;44773:19;:28::i;:::-;-1:-1:-1;;;;;44755:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44830:7;:15;;;;:28;;44850:7;44830:19;:28::i;:::-;-1:-1:-1;;;;;44812:15:0;;;;;;;:7;:15;;;;;;:46;;;;44890:18;;;;;;;:39;;44913:15;44890:22;:39::i;:::-;-1:-1:-1;;;;;44869:18:0;;;;;;:7;:18;;;;;:60;44940:26;44955:10;44940:14;:26::i;:::-;44977:23;44992:7;44977:14;:23::i;:::-;45011;45023:4;45029;45011:11;:23::i;:::-;45067:9;-1:-1:-1;;;;;45050:44:0;45059:6;-1:-1:-1;;;;;45050:44:0;;45078:15;45050:44;;;;1848:25:1;;1836:2;1821:18;;1702:177;45050:44:0;;;;;;;;44364:738;;;;;;;44239:863;;;:::o;43356:875::-;43505:23;43543:12;43570:18;43603:15;43632:20;43644:7;43632:11;:20::i;:::-;43490:162;;;;;;;;43664:15;43681:23;43706:12;43722:135;43748:7;43770:4;43789:10;43814:7;43836:10;:8;:10::i;43722:135::-;-1:-1:-1;;;;;43888:15:0;;;;;;:7;:15;;;;;;43663:194;;-1:-1:-1;43663:194:0;;-1:-1:-1;43663:194:0;-1:-1:-1;43888:28:0;;43663:194;43888:19;:28::i;:::-;-1:-1:-1;;;;;43870:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43948:18;;;;;:7;:18;;;;;:39;;43971:15;43948:22;:39::i;:::-;-1:-1:-1;;;;;43927:18:0;;;;;;:7;:18;;;;;;;;:60;;;;44019:7;:18;;;;:39;;44042:15;44019:22;:39::i;42544:802::-;42691:23;42729:12;42756:18;42789:15;42818:20;42830:7;42818:11;:20::i;:::-;42676:162;;;;;;;;42850:15;42867:23;42892:12;42908:135;42934:7;42956:4;42975:10;43000:7;43022:10;:8;:10::i;42908:135::-;-1:-1:-1;;;;;43074:15:0;;;;;;:7;:15;;;;;;42849:194;;-1:-1:-1;42849:194:0;;-1:-1:-1;42849:194:0;-1:-1:-1;43074:28:0;;42849:194;43074:19;:28::i;45110:934::-;45261:23;45299:12;45326:18;45359:15;45388:20;45400:7;45388:11;:20::i;:::-;45246:162;;;;;;;;45420:15;45437:23;45462:12;45478:135;45504:7;45526:4;45545:10;45570:7;45592:10;:8;:10::i;45478:135::-;-1:-1:-1;;;;;45644:15:0;;;;;;:7;:15;;;;;;45419:194;;-1:-1:-1;45419:194:0;;-1:-1:-1;45419:194:0;-1:-1:-1;45644:28:0;;45664:7;45644:19;:28::i;:::-;-1:-1:-1;;;;;45626:15:0;;;;;;:7;:15;;;;;;;;:46;;;;45701:7;:15;;;;:28;;45721:7;3660:136;3718:7;3745:43;3749:1;3752;3745:43;;;;;;;;;;;;;;;;;:3;:43::i;32321:568::-;32422:7;32444;32466;32488;32523:12;32538:31;32561:7;32538:22;:31::i;:::-;32523:46;;32580:18;32601:30;32623:7;32601:21;:30::i;:::-;32580:51;;32642:15;32660:30;32682:7;32660:21;:30::i;:::-;32642:48;-1:-1:-1;32701:23:0;32727:33;32749:10;32727:17;:7;32739:4;32727:11;:17::i;:::-;:21;;:33::i;:::-;32701:59;-1:-1:-1;32789:28:0;32701:59;32809:7;32789:19;:28::i;:::-;32771:46;32855:4;;-1:-1:-1;32861:10:0;;-1:-1:-1;32861:10:0;-1:-1:-1;32321:568:0;;-1:-1:-1;;;32321:568:0:o;32897:688::-;33122:7;;;;33219:24;:7;33231:11;33219;:24::i;:::-;33201:42;-1:-1:-1;33254:12:0;33269:21;:4;33278:11;33269:8;:21::i;:::-;33254:36;-1:-1:-1;33301:18:0;33322:27;:10;33337:11;33322:14;:27::i;:::-;33301:48;-1:-1:-1;33360:15:0;33378:24;:7;33390:11;33378;:24::i;:::-;33360:42;-1:-1:-1;33413:23:0;33439:88;33360:42;33439:61;33489:10;33439:61;:7;33465:4;33439:25;:31::i;:88::-;33546:7;;;;-1:-1:-1;33572:4:0;;-1:-1:-1;32897:688:0;;-1:-1:-1;;;;;;;;;32897:688:0:o;3196:181::-;3254:7;;3286:5;3290:1;3286;:5;:::i;:::-;3274:17;;3315:1;3310;:6;;3302:46;;;;-1:-1:-1;;;3302:46:0;;14013:2:1;3302:46:0;;;13995:21:1;14052:2;14032:18;;;14025:30;14091:29;14071:18;;;14064:57;14138:18;;3302:46:0;13811:351:1;34378:355:0;34441:19;34463:10;:8;:10::i;:::-;34441:32;-1:-1:-1;34484:18:0;34505:27;:10;34441:32;34505:14;:27::i;:::-;34584:4;34568:22;;;;:7;:22;;;;;;34484:48;;-1:-1:-1;34568:38:0;;34484:48;34568:26;:38::i;:::-;34559:4;34543:22;;;;:7;:22;;;;;;;;:63;;;;34621:11;:26;;;;;;34617:108;;;34703:4;34687:22;;;;:7;:22;;;;;;:38;;34714:10;34687:26;:38::i;:::-;34678:4;34662:22;;;;:7;:22;;;;;:63;34617:108;34430:303;;34378:355;:::o;32166:147::-;32244:7;;:17;;32256:4;32244:11;:17::i;:::-;32234:7;:27;32285:10;;:20;;32300:4;32285:14;:20::i;:::-;32272:10;:33;-1:-1:-1;;32166:147:0:o;35089:144::-;35199:14;;35160:7;;35187:38;;35219:5;;35187:27;;:7;;35199:14;;35187:11;:27::i;:::-;:31;;:38::i;35241:174::-;35382:13;;35338:7;;35370:37;;35401:5;;35370:26;;:7;;35382:13;;;;;35370:11;:26::i;35423:174::-;35564:13;;35520:7;;35552:37;;35583:5;;35552:26;;:7;;35564:13;;;;;4584:252;4642:7;4668:1;4673;4668:6;4664:47;;-1:-1:-1;4698:1:0;4691:8;;4664:47;4723:9;4735:5;4739:1;4735;:5;:::i;:::-;4723:17;-1:-1:-1;4768:1:0;4759:5;4763:1;4723:17;4759:5;:::i;:::-;:10;4751:56;;;;-1:-1:-1;;;4751:56:0;;14369:2:1;4751:56:0;;;14351:21:1;14408:2;14388:18;;;14381:30;14447:34;14427:18;;;14420:62;-1:-1:-1;;;14498:18:1;;;14491:31;14539:19;;4751:56:0;14167:397:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2690:160::-;2755:20;;2811:13;;2804:21;2794:32;;2784:60;;2840:1;2837;2830:12;2784:60;2690:160;;;:::o;2855:248::-;2920:6;2928;2981:2;2969:9;2960:7;2956:23;2952:32;2949:52;;;2997:1;2994;2987:12;2949:52;3020:26;3036:9;3020:26;:::i;3108:180::-;3167:6;3220:2;3208:9;3199:7;3195:23;3191:32;3188:52;;;3236:1;3233;3226:12;3188:52;-1:-1:-1;3259:23:1;;3108:180;-1:-1:-1;3108:180:1:o;3950:156::-;4016:20;;4076:4;4065:16;;4055:27;;4045:55;;4096:1;4093;4086:12;4111:535;4203:6;4211;4219;4227;4235;4243;4296:3;4284:9;4275:7;4271:23;4267:33;4264:53;;;4313:1;4310;4303:12;4264:53;4336:27;4353:9;4336:27;:::i;:::-;4326:37;;4382:36;4414:2;4403:9;4399:18;4382:36;:::i;:::-;4372:46;;4437:36;4469:2;4458:9;4454:18;4437:36;:::i;:::-;4427:46;;4492:36;4524:2;4513:9;4509:18;4492:36;:::i;:::-;4482:46;;4547:37;4579:3;4568:9;4564:19;4547:37;:::i;:::-;4537:47;;4603:37;4635:3;4624:9;4620:19;4603:37;:::i;:::-;4593:47;;4111:535;;;;;;;;:::o;4651:180::-;4707:6;4760:2;4748:9;4739:7;4735:23;4731:32;4728:52;;;4776:1;4773;4766:12;4728:52;4799:26;4815:9;4799:26;:::i;5060:388::-;5128:6;5136;5189:2;5177:9;5168:7;5164:23;5160:32;5157:52;;;5205:1;5202;5195:12;5157:52;5244:9;5231:23;5263:31;5288:5;5263:31;:::i;:::-;5313:5;-1:-1:-1;5370:2:1;5355:18;;5342:32;5383:33;5342:32;5383:33;:::i;:::-;5435:7;5425:17;;;5060:388;;;;;:::o;5453:380::-;5532:1;5528:12;;;;5575;;;5596:61;;5650:4;5642:6;5638:17;5628:27;;5596:61;5703:2;5695:6;5692:14;5672:18;5669:38;5666:161;;5749:10;5744:3;5740:20;5737:1;5730:31;5784:4;5781:1;5774:15;5812:4;5809:1;5802:15;5666:161;;5453:380;;;:::o;5838:356::-;6040:2;6022:21;;;6059:18;;;6052:30;6118:34;6113:2;6098:18;;6091:62;6185:2;6170:18;;5838:356::o;9807:127::-;9868:10;9863:3;9859:20;9856:1;9849:31;9899:4;9896:1;9889:15;9923:4;9920:1;9913:15;9939:125;10004:9;;;10025:10;;;10022:36;;;10038:18;;:::i;10472:128::-;10539:9;;;10560:11;;;10557:37;;;10574:18;;:::i;10605:148::-;10693:4;10672:12;;;10686;;;10668:31;;10711:13;;10708:39;;;10727:18;;:::i;10758:225::-;10862:4;10841:12;;;10855;;;10837:31;10888:22;;;;10929:24;;;10919:58;;10957:18;;:::i;:::-;10919:58;10758:225;;;;:::o;10988:168::-;11061:9;;;11092;;11109:15;;;11103:22;;11089:37;11079:71;;11130:18;;:::i;11161:217::-;11201:1;11227;11217:132;;11271:10;11266:3;11262:20;11259:1;11252:31;11306:4;11303:1;11296:15;11334:4;11331:1;11324:15;11217:132;-1:-1:-1;11363:9:1;;11161:217::o;11383:127::-;11444:10;11439:3;11435:20;11432:1;11425:31;11475:4;11472:1;11465:15;11499:4;11496:1;11489:15;11647:251;11717:6;11770:2;11758:9;11749:7;11745:23;11741:32;11738:52;;;11786:1;11783;11776:12;11738:52;11818:9;11812:16;11837:31;11862:5;11837:31;:::i;11903:980::-;12165:4;12213:3;12202:9;12198:19;12244:6;12233:9;12226:25;12270:2;12308:6;12303:2;12292:9;12288:18;12281:34;12351:3;12346:2;12335:9;12331:18;12324:31;12375:6;12410;12404:13;12441:6;12433;12426:22;12479:3;12468:9;12464:19;12457:26;;12518:2;12510:6;12506:15;12492:29;;12539:1;12549:195;12563:6;12560:1;12557:13;12549:195;;;12628:13;;-1:-1:-1;;;;;12624:39:1;12612:52;;12719:15;;;;12684:12;;;;12660:1;12578:9;12549:195;;;-1:-1:-1;;;;;;;12800:32:1;;;;12795:2;12780:18;;12773:60;-1:-1:-1;;;12864:3:1;12849:19;12842:35;12761:3;11903:980;-1:-1:-1;;;11903:980:1:o;13500:306::-;13588:6;13596;13604;13657:2;13645:9;13636:7;13632:23;13628:32;13625:52;;;13673:1;13670;13663:12;13625:52;13702:9;13696:16;13686:26;;13752:2;13741:9;13737:18;13731:25;13721:35;;13796:2;13785:9;13781:18;13775:25;13765:35;;13500:306;;;;;:::o
Swarm Source
ipfs://adb8eb63eb0826baa1eb81ebbf11c31dd8b5e0f6f8b44bc57f1d442a247ff0e6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.