ETH Price: $3,178.74 (-5.16%)
 

Overview

Max Total Supply

2,000,000,000,000,000 TRUMP

Holders

224

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000...000
Balance
1,033,194,545,944,125.375806937251145343 TRUMP

Value
$0.00
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TRUMP

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-14
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.0;
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.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 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.
     *
     * 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) 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 ) {
        return 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.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // 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);
            }
        }
    }
}


interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract TRUMP is Context, IERC20 {
    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) public _isExcludedBal; // list for Max Bal limits
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 2000000000 * 10**6 * 10**18; 
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Trump Inu";
    string private _symbol = "TRUMP";
    uint8 private _decimals = 18;
    
    uint256 public _burnFee = 5;
    uint256 private _previousBurnFee = _burnFee;
    
    uint256 public _taxFee = 5;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 private _liquidityFee = 10;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public _buyFees = 10;
    uint256 public _sellFees = 13;

    address public marketing = 0xe93AF911578BBf16eF08922248d5580DD1d5D7d0;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxBalAmount = _tTotal.mul(20).div(1000);
    uint256 public numTokensSellToAddToLiquidity = 1 * 10**18;
    
    bool public _taxEnabled = true;

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[msg.sender] = _rTotal;
        
        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[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcluded[uniswapV2Pair] = true; // excluded from rewards

        _isExcludedBal[uniswapV2Pair] = true; 
        _isExcludedBal[msg.sender] = true;
        _isExcludedBal[address(this)] = true; 
        _isExcludedBal[address(0)] = true; 
        
        emit Transfer(address(0), msg.sender, _tTotal);
        _transfer(_msgSender(), address(0), _tTotal.div(2));
        
    }

    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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        if(tLiquidity > 0 ) _takeLiquidity(sender, tLiquidity);
        if(tBurn > 0) _burn(sender, tBurn);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }    

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate(), tBurn);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tBurn);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tBurn);
        return (tTransferAmount, tFee, tLiquidity, tBurn);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate, uint256 tBurn) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rBurn);
        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(address sender, 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);
        emit Transfer(sender, address(this), tLiquidity);
        
    }

    function _burn(address sender, uint256 tBurn) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tBurn.mul(currentRate);
        _rOwned[address(0)] = _rOwned[address(0)].add(rLiquidity);
        if(_isExcluded[address(0)])
            _tOwned[address(0)] = _tOwned[address(0)].add(tBurn);
        emit Transfer(sender, address(0), tBurn);

    }
    
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**3);

    }

    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(10**3);

    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 ) return;
    
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[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(amount > 0, "Transfer amount must be greater than zero");
        
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = false;

        if(from == uniswapV2Pair || to == uniswapV2Pair) {
            takeFee = true;
        }

        if(!_taxEnabled || _isExcludedFromFee[from] || _isExcludedFromFee[to]){  //if any account belongs to _isExcludedFromFee account then remove the fee
            takeFee = false;
        }
        if(from == uniswapV2Pair) {
            _liquidityFee = _buyFees;
        }

        if (to == uniswapV2Pair) {
            _liquidityFee = _sellFees;
        }
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {        
        swapTokensForEth(contractTokenBalance); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 Balance = address(this).balance;

        (bool succ, ) = address(marketing).call{value: Balance}("");
        require(succ, "marketing ETH not sent");
        emit SwapAndLiquify(contractTokenBalance, Balance);
    }

    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
        );
    }


    //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 (_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);
        }

        if(!_isExcludedBal[recipient] ) {
            require(balanceOf(recipient)<= _maxBalAmount, "Balance limit reached");
        }        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        if(tBurn > 0) _burn(sender, tBurn);
        if(tLiquidity > 0 ) _takeLiquidity(sender, tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        if(tBurn > 0) _burn(sender, tBurn);
        if(tLiquidity > 0 ) _takeLiquidity(sender, tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        if(tBurn > 0) _burn(sender, tBurn);
        if(tLiquidity > 0 ) _takeLiquidity(sender, tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }   
}

Contract Security Audit

Contract ABI

[{"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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedBal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBalAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","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":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":[],"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"},{"stateMutability":"payable","type":"receive"}]

60806040526d629b8c891b267182b614000000006007819055620000269060001962001a02565b620000349060001962001a2f565b600855604080518082019091526009808252685472756d7020496e7560b81b60209092019182526200006991600a9162001946565b506040805180820190915260058082526405452554d560dc1b60209092019182526200009891600b9162001946565b50600c805460ff191660129081179091556005600d818155600e829055600f829055601091909155600a6011819055918290556013919091556014908155601580546001600160a01b03191673e93af911578bbf16ef08922248d5580dd1d5d7d01790556017805460ff60a81b1916600160a81b17905560075462000149916103e8916200013591620008b66200040f602090811b91909117901c565b620004a360201b620009351790919060201c565b601855670de0b6b3a7640000601955601a805460ff191660011790553480156200017257600080fd5b50600854336000908152602081815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa158015620001d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fe919062001a49565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000272919062001a49565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e6919062001a49565b601780546001600160a01b03199081166001600160a01b0393841617825560168054909116848416179055336000818152600360209081526040808320805460ff19908116600190811790925530808652838620805483168417905587548916865260048552838620805483168417905596549097168452600683528184208054881682179055848452818420805488168217905594835280832080548716861790558280527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8805490961690941790945560075492519283529092909160008051602062003a97833981519152910160405180910390a362000408336000620004026002600754620004a360201b620009351790919060201c565b620004ed565b5062001c04565b60008262000420575060006200049d565b60006200042e838562001a74565b9050826200043d858362001a96565b146200049a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200049a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200070a60201b60201c565b6001600160a01b038316620005535760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840162000491565b60008111620005b75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840162000491565b6000620005c43062000746565b60195490915081108015908190620005e65750601754600160a01b900460ff16155b80156200060157506017546001600160a01b03868116911614155b8015620006175750601754600160a81b900460ff165b1562000628576200062882620007a8565b6017546000906001600160a01b03878116911614806200065557506017546001600160a01b038681169116145b156200065f575060015b601a5460ff1615806200068a57506001600160a01b03861660009081526003602052604090205460ff165b80620006ae57506001600160a01b03851660009081526003602052604090205460ff165b15620006b8575060005b6017546001600160a01b0387811691161415620006d6576013546011555b6017546001600160a01b0386811691161415620006f4576014546011555b6200070286868684620008bc565b505050505050565b600081836200072e5760405162461bcd60e51b815260040162000491919062001aad565b5060006200073d848662001a96565b95945050505050565b6001600160a01b03811660009081526004602052604081205460ff16156200078457506001600160a01b031660009081526001602052604090205490565b6001600160a01b0382166000908152602081905260409020546200049d9062000ad0565b6017805460ff60a01b1916600160a01b179055620007c68162000b68565b60155460405147916000916001600160a01b039091169083908381818185875af1925050503d806000811462000819576040519150601f19603f3d011682016040523d82523d6000602084013e6200081e565b606091505b5050905080620008715760405162461bcd60e51b815260206004820152601660248201527f6d61726b6574696e6720455448206e6f742073656e7400000000000000000000604482015260640162000491565b60408051848152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150506017805460ff60a01b1916905550565b80620008cc57620008cc62000cc9565b6001600160a01b03841660009081526004602052604090205460ff1680156200090e57506001600160a01b03831660009081526004602052604090205460ff16155b1562000927576200092184848462000cf9565b62000a33565b6001600160a01b03841660009081526004602052604090205460ff161580156200096957506001600160a01b03831660009081526004602052604090205460ff165b156200097c576200092184848462000e67565b6001600160a01b03841660009081526004602052604090205460ff16158015620009bf57506001600160a01b03831660009081526004602052604090205460ff16155b15620009d2576200092184848462000f44565b6001600160a01b03841660009081526004602052604090205460ff16801562000a1357506001600160a01b03831660009081526004602052604090205460ff165b1562000a26576200092184848462000fa3565b62000a3384848462000f44565b6001600160a01b03831660009081526006602052604090205460ff1662000ab25760185462000a628462000746565b111562000ab25760405162461bcd60e51b815260206004820152601560248201527f42616c616e6365206c696d697420726561636865640000000000000000000000604482015260640162000491565b8062000aca5762000aca601054600f55601254601155565b50505050565b600060085482111562000b395760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000491565b600062000b45620010fc565b905062000b618184620004a360201b620009351790919060201c565b9392505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811062000ba05762000ba062001b05565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801562000bfa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c20919062001a49565b8160018151811062000c365762000c3662001b05565b6001600160a01b03928316602091820292909201015260165462000c5e91309116846200112f565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac9479062000c9990859060009086903090429060040162001b1b565b600060405180830381600087803b15801562000cb457600080fd5b505af115801562000702573d6000803e3d6000fd5b600f5415801562000cda5750601154155b1562000ce257565b600f80546010556011805460125560009182905555565b600080808080808062000d0c8862001257565b965096509650965096509650965062000d5988600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054620012b960201b620009771790919060201c565b6001600160a01b038b166000908152600160209081526040808320939093558181529190205462000d9591899062000977620012b9821b17901c565b6001600160a01b03808c1660009081526020818152604080832094909455918c168152919091205462000dd3918890620009b962001303821b17901c565b6001600160a01b038a16600090815260208190526040902055801562000dff5762000dff8a8262001366565b811562000e125762000e128a836200148e565b62000e1e85846200156d565b886001600160a01b03168a6001600160a01b031660008051602062003a978339815191528660405162000e5391815260200190565b60405180910390a350505050505050505050565b600080808080808062000e7a8862001257565b965096509650965096509650965062000ec6876000808d6001600160a01b03166001600160a01b0316815260200190815260200160002054620012b960201b620009771790919060201c565b6001600160a01b03808c1660009081526020818152604080832094909455918c16815260018252919091205462000f08918690620009b962001303821b17901c565b6001600160a01b038a166000908152600160209081526040808320939093558181529190205462000dd3918890620009b962001303821b17901c565b600080808080808062000f578862001257565b965096509650965096509650965062000d95876000808d6001600160a01b03166001600160a01b0316815260200190815260200160002054620012b960201b620009771790919060201c565b600080808080808062000fb68862001257565b96509650965096509650965096506200100388600160008d6001600160a01b03166001600160a01b0316815260200190815260200160002054620012b960201b620009771790919060201c565b6001600160a01b038b16600090815260016020908152604080832093909355818152919020546200103f91899062000977620012b9821b17901c565b6001600160a01b03808c1660009081526020818152604080832094909455918c16815260018252919091205462001081918690620009b962001303821b17901c565b6001600160a01b038a1660009081526001602090815260408083209390935581815291902054620010bd918890620009b962001303821b17901c565b6001600160a01b038a166000908152602081905260409020558115620010e957620010e98a836200148e565b801562000e125762000e128a8262001366565b600080806200110a620015b2565b91509150620011288183620004a360201b620009351790919060201c565b9250505090565b6001600160a01b038316620011935760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000491565b6001600160a01b038216620011f65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000491565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000808080808080808080806200126e8c62001770565b93509350935093506000806000620012998f878762001292620010fc60201b60201c565b88620017eb565b919f509d509b509599509397509195509350505050919395979092949650565b60006200049a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620018a260201b60201c565b60008062001312838562001b8e565b9050838110156200049a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000491565b600062001372620010fc565b905060006200139082846200040f60201b620008b61790919060201c565b6000808052602090815260008051602062003ab783398151915254919250620013c591908390620009b962001303821b17901c565b6000805260008051602062003ab78339815191525560046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5460ff16156200145757600080526001602090815260008051602062003a77833981519152546200143c918590620009b962001303821b17901c565b60008052600160205260008051602062003a77833981519152555b6040518381526000906001600160a01b0386169060008051602062003a97833981519152906020015b60405180910390a350505050565b60006200149a620010fc565b90506000620014b882846200040f60201b620008b61790919060201c565b3060009081526020818152604090912054919250620014e391908390620009b962001303821b17901c565b306000908152602081815260408083209390935560049052205460ff16156200154057306000908152600160209081526040909120546200152f918590620009b962001303821b17901c565b306000908152600160205260409020555b60405183815230906001600160a01b0386169060008051602062003a978339815191529060200162001480565b6200158982600854620012b960201b620009771790919060201c565b600881905550620015ab816009546200130360201b620009b91790919060201c565b6009555050565b6008546007546000918291825b60055481101562001730578260008060058481548110620015e457620015e462001b05565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200165357508160016000600584815481106200162c576200162c62001b05565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200166a57600854600754945094505050509091565b620016c06000806005848154811062001687576200168762001b05565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054859162000977620012b9821b17901c565b9250620017196001600060058481548110620016e057620016e062001b05565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054849162000977620012b9821b17901c565b915080620017278162001ba9565b915050620015bf565b506200174f600754600854620004a360201b620009351790919060201c565b82101562001767576008546007549350935050509091565b90939092509050565b6000808080806200178186620018d8565b905060006200179087620018fd565b905060006200179f8862001922565b90506000620017db84620017c784620017c7878e620012b960201b620009771790919060201c565b620012b960201b620009771790919060201c565b9992985090965091945092505050565b6000806000806200180b868a6200040f60201b620008b61790919060201c565b9050600062001829878a6200040f60201b620008b61790919060201c565b9050600062001847888a6200040f60201b620008b61790919060201c565b905060006200186589896200040f60201b620008b61790919060201c565b905060006200188d82620017c785620017c7888a620012b960201b620009771790919060201c565b949d949c50929a509298505050505050505050565b60008184841115620018c95760405162461bcd60e51b815260040162000491919062001aad565b5060006200073d848662001a2f565b60006200049d6103e862000135600d54856200040f60201b620008b61790919060201c565b60006200049d6103e862000135600f54856200040f60201b620008b61790919060201c565b60006200049d606462000135601154856200040f60201b620008b61790919060201c565b828054620019549062001bc7565b90600052602060002090601f016020900481019282620019785760008555620019c3565b82601f106200199357805160ff1916838001178555620019c3565b82800160010185558215620019c3579182015b82811115620019c3578251825591602001919060010190620019a6565b50620019d1929150620019d5565b5090565b5b80821115620019d15760008155600101620019d6565b634e487b7160e01b600052601260045260246000fd5b60008262001a145762001a14620019ec565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562001a445762001a4462001a19565b500390565b60006020828403121562001a5c57600080fd5b81516001600160a01b03811681146200049a57600080fd5b600081600019048311821515161562001a915762001a9162001a19565b500290565b60008262001aa85762001aa8620019ec565b500490565b600060208083528351808285015260005b8181101562001adc5785810183015185820160400152820162001abe565b8181111562001aef576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101562001b6d5784516001600160a01b03168352938301939183019160010162001b46565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111562001ba45762001ba462001a19565b500190565b600060001982141562001bc05762001bc062001a19565b5060010190565b600181811c9082168062001bdc57607f821691505b6020821081141562001bfe57634e487b7160e01b600052602260045260246000fd5b50919050565b611e638062001c146000396000f3fe6080604052600436106101bb5760003560e01c80635342acb4116100ec578063c0b0fda21161008a578063db48598b11610064578063db48598b146104ea578063dd62ed3e1461051a578063de7cf79914610560578063e4d1a8741461057657600080fd5b8063c0b0fda2146104a8578063d12a7688146104be578063d1eae073146104d457600080fd5b806395d89b41116100c657806395d89b4114610439578063966b47c31461044e578063a457c2d714610468578063a9059cbb1461048857600080fd5b80635342acb4146103a757806370a08231146103e057806388f820201461040057600080fd5b80632d838119116101595780633b124fe7116101335780633b124fe7146103305780634549b0391461034657806349bd5a5e146103665780634a74bb021461038657600080fd5b80632d838119146102ce578063313ce567146102ee578063395093511461031057600080fd5b80631694505e116101955780631694505e1461024157806318160ddd1461027957806323b872dd1461028e5780632d3e474a146102ae57600080fd5b806306fdde03146101c7578063095ea7b3146101f257806313114a9d1461022257600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101dc61058c565b6040516101e99190611aed565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004611b5a565b61061e565b60405190151581526020016101e9565b34801561022e57600080fd5b506009545b6040519081526020016101e9565b34801561024d57600080fd5b50601654610261906001600160a01b031681565b6040516001600160a01b0390911681526020016101e9565b34801561028557600080fd5b50600754610233565b34801561029a57600080fd5b506102126102a9366004611b86565b610635565b3480156102ba57600080fd5b50601554610261906001600160a01b031681565b3480156102da57600080fd5b506102336102e9366004611bc7565b61069e565b3480156102fa57600080fd5b50600c5460405160ff90911681526020016101e9565b34801561031c57600080fd5b5061021261032b366004611b5a565b610727565b34801561033c57600080fd5b50610233600f5481565b34801561035257600080fd5b50610233610361366004611be0565b61075d565b34801561037257600080fd5b50601754610261906001600160a01b031681565b34801561039257600080fd5b5060175461021290600160a81b900460ff1681565b3480156103b357600080fd5b506102126103c2366004611c15565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156103ec57600080fd5b506102336103fb366004611c15565b6107ec565b34801561040c57600080fd5b5061021261041b366004611c15565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561044557600080fd5b506101dc61084b565b34801561045a57600080fd5b50601a546102129060ff1681565b34801561047457600080fd5b50610212610483366004611b5a565b61085a565b34801561049457600080fd5b506102126104a3366004611b5a565b6108a9565b3480156104b457600080fd5b50610233600d5481565b3480156104ca57600080fd5b5061023360195481565b3480156104e057600080fd5b5061023360185481565b3480156104f657600080fd5b50610212610505366004611c15565b60066020526000908152604090205460ff1681565b34801561052657600080fd5b50610233610535366004611c32565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561056c57600080fd5b5061023360145481565b34801561058257600080fd5b5061023360135481565b6060600a805461059b90611c60565b80601f01602080910402602001604051908101604052809291908181526020018280546105c790611c60565b80156106145780601f106105e957610100808354040283529160200191610614565b820191906000526020600020905b8154815290600101906020018083116105f757829003601f168201915b5050505050905090565b600061062b338484610a18565b5060015b92915050565b6000610642848484610b3c565b610694843361068f85604051806060016040528060288152602001611de1602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190610d44565b610a18565b5060019392505050565b600060085482111561070a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610714610d7e565b90506107208382610935565b9392505050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161062b91859061068f90866109b9565b60006007548311156107b15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610701565b816107d15760006107c184610da1565b5094965061062f95505050505050565b60006107dc84610da1565b5093965061062f95505050505050565b6001600160a01b03811660009081526004602052604081205460ff161561082957506001600160a01b031660009081526001602052604090205490565b6001600160a01b03821660009081526020819052604090205461062f9061069e565b6060600b805461059b90611c60565b600061062b338461068f85604051806060016040528060258152602001611e09602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190610d44565b600061062b338484610b3c565b6000826108c55750600061062f565b60006108d18385611cb1565b9050826108de8583611cd0565b146107205760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610701565b600061072083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610dfc565b600061072083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d44565b6000806109c68385611cf2565b9050838110156107205760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610701565b6001600160a01b038316610a7a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610701565b6001600160a01b038216610adb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610701565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610ba05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610701565b60008111610c025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610701565b6000610c0d306107ec565b60195490915081108015908190610c2e5750601754600160a01b900460ff16155b8015610c4857506017546001600160a01b03868116911614155b8015610c5d5750601754600160a81b900460ff165b15610c6b57610c6b82610e2a565b6017546000906001600160a01b0387811691161480610c9757506017546001600160a01b038681169116145b15610ca0575060015b601a5460ff161580610cca57506001600160a01b03861660009081526003602052604090205460ff165b80610ced57506001600160a01b03851660009081526003602052604090205460ff165b15610cf6575060005b6017546001600160a01b0387811691161415610d13576013546011555b6017546001600160a01b0386811691161415610d30576014546011555b610d3c86868684610f31565b505050505050565b60008184841115610d685760405162461bcd60e51b81526004016107019190611aed565b506000610d758486611d0a565b95945050505050565b6000806000610d8b611120565b9092509050610d9a8282610935565b9250505090565b6000806000806000806000806000806000610dbb8c6112a0565b93509350935093506000806000610ddc8f8787610dd6610d7e565b886112f5565b919f509d509b509599509397509195509350505050919395979092949650565b60008183610e1d5760405162461bcd60e51b81526004016107019190611aed565b506000610d758486611cd0565b6017805460ff60a01b1916600160a01b179055610e4681611357565b60155460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610e97576040519150601f19603f3d011682016040523d82523d6000602084013e610e9c565b606091505b5050905080610ee65760405162461bcd60e51b81526020600482015260166024820152751b585c9ad95d1a5b99c8115512081b9bdd081cd95b9d60521b6044820152606401610701565b60408051848152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150506017805460ff60a01b1916905550565b80610f3e57610f3e6114a9565b6001600160a01b03841660009081526004602052604090205460ff168015610f7f57506001600160a01b03831660009081526004602052604090205460ff16155b15610f9457610f8f8484846114d7565b611092565b6001600160a01b03841660009081526004602052604090205460ff16158015610fd557506001600160a01b03831660009081526004602052604090205460ff165b15610fe557610f8f84848461162a565b6001600160a01b03841660009081526004602052604090205460ff1615801561102757506001600160a01b03831660009081526004602052604090205460ff16155b1561103757610f8f8484846116e5565b6001600160a01b03841660009081526004602052604090205460ff16801561107757506001600160a01b03831660009081526004602052604090205460ff165b1561108757610f8f84848461173e565b6110928484846116e5565b6001600160a01b03831660009081526006602052604090205460ff16611104576018546110be846107ec565b11156111045760405162461bcd60e51b815260206004820152601560248201527410985b185b98d9481b1a5b5a5d081c995858da1959605a1b6044820152606401610701565b8061111a5761111a601054600f55601254601155565b50505050565b6008546007546000918291825b60055481101561127057826000806005848154811061114e5761114e611d21565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806111b9575081600160006005848154811061119257611192611d21565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156111cf57600854600754945094505050509091565b611214600080600584815481106111e8576111e8611d21565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610977565b925061125c600160006005848154811061123057611230611d21565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610977565b91508061126881611d37565b91505061112d565b5060075460085461128091610935565b821015611297576008546007549350935050509091565b90939092509050565b60008060008060006112b186611861565b905060006112be87611884565b905060006112cb886118a1565b905060006112e5846112df84818d88610977565b90610977565b9992985090965091945092505050565b600080808061130489876108b6565b9050600061131289886108b6565b9050600061132089896108b6565b9050600061132e888a6108b6565b90506000611342826112df85818989610977565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061138c5761138c611d21565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114099190611d52565b8160018151811061141c5761141c611d21565b6001600160a01b0392831660209182029290920101526016546114429130911684610a18565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac9479061147b908590600090869030904290600401611d6f565b600060405180830381600087803b15801561149557600080fd5b505af1158015610d3c573d6000803e3d6000fd5b600f541580156114b95750601154155b156114c057565b600f80546010556011805460125560009182905555565b60008060008060008060006114eb88610da1565b965096509650965096509650965061153188600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461097790919063ffffffff16565b6001600160a01b038b16600090815260016020908152604080832093909355819052205461155f9088610977565b6001600160a01b03808c1660009081526020819052604080822093909355908b168152205461158e90876109b9565b6001600160a01b038a1660009081526020819052604090205580156115b7576115b78a826118bd565b81156115c7576115c78a83611a0a565b6115d18584611ac9565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161161691815260200190565b60405180910390a350505050505050505050565b600080600080600080600061163e88610da1565b9650965096509650965096509650611683876000808d6001600160a01b03166001600160a01b031681526020019081526020016000205461097790919063ffffffff16565b6001600160a01b03808c1660009081526020818152604080832094909455918c168152600190915220546116b790856109b9565b6001600160a01b038a16600090815260016020908152604080832093909355819052205461158e90876109b9565b60008060008060008060006116f988610da1565b965096509650965096509650965061155f876000808d6001600160a01b03166001600160a01b031681526020019081526020016000205461097790919063ffffffff16565b600080600080600080600061175288610da1565b965096509650965096509650965061179888600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461097790919063ffffffff16565b6001600160a01b038b1660009081526001602090815260408083209390935581905220546117c69088610977565b6001600160a01b03808c1660009081526020818152604080832094909455918c168152600190915220546117fa90856109b9565b6001600160a01b038a16600090815260016020908152604080832093909355819052205461182890876109b9565b6001600160a01b038a166000908152602081905260409020558115611851576118518a83611a0a565b80156115c7576115c78a826118bd565b600061062f6103e861187e600d54856108b690919063ffffffff16565b90610935565b600061062f6103e861187e600f54856108b690919063ffffffff16565b600061062f606461187e601154856108b690919063ffffffff16565b60006118c7610d7e565b905060006118d583836108b6565b60008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55490915061190c90826109b9565b600080527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55560046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5460ff16156119c2576000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461199690846109b9565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49555b6040518381526000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350505050565b6000611a14610d7e565b90506000611a2283836108b6565b30600090815260208190526040902054909150611a3f90826109b9565b306000908152602081815260408083209390935560049052205460ff1615611a8c5730600090815260016020526040902054611a7b90846109b9565b306000908152600160205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016119fc565b600854611ad69083610977565b600855600954611ae690826109b9565b6009555050565b600060208083528351808285015260005b81811015611b1a57858101830151858201604001528201611afe565b81811115611b2c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611b5757600080fd5b50565b60008060408385031215611b6d57600080fd5b8235611b7881611b42565b946020939093013593505050565b600080600060608486031215611b9b57600080fd5b8335611ba681611b42565b92506020840135611bb681611b42565b929592945050506040919091013590565b600060208284031215611bd957600080fd5b5035919050565b60008060408385031215611bf357600080fd5b8235915060208301358015158114611c0a57600080fd5b809150509250929050565b600060208284031215611c2757600080fd5b813561072081611b42565b60008060408385031215611c4557600080fd5b8235611c5081611b42565b91506020830135611c0a81611b42565b600181811c90821680611c7457607f821691505b60208210811415611c9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611ccb57611ccb611c9b565b500290565b600082611ced57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611d0557611d05611c9b565b500190565b600082821015611d1c57611d1c611c9b565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611d4b57611d4b611c9b565b5060010190565b600060208284031215611d6457600080fd5b815161072081611b42565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611dbf5784516001600160a01b031683529383019391830191600101611d9a565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201dcdf07ce1a7b351958f12dc954b0a287d3e1e7639fbe3a23e12e6a322b2f91a64736f6c634300080a0033a6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c80635342acb4116100ec578063c0b0fda21161008a578063db48598b11610064578063db48598b146104ea578063dd62ed3e1461051a578063de7cf79914610560578063e4d1a8741461057657600080fd5b8063c0b0fda2146104a8578063d12a7688146104be578063d1eae073146104d457600080fd5b806395d89b41116100c657806395d89b4114610439578063966b47c31461044e578063a457c2d714610468578063a9059cbb1461048857600080fd5b80635342acb4146103a757806370a08231146103e057806388f820201461040057600080fd5b80632d838119116101595780633b124fe7116101335780633b124fe7146103305780634549b0391461034657806349bd5a5e146103665780634a74bb021461038657600080fd5b80632d838119146102ce578063313ce567146102ee578063395093511461031057600080fd5b80631694505e116101955780631694505e1461024157806318160ddd1461027957806323b872dd1461028e5780632d3e474a146102ae57600080fd5b806306fdde03146101c7578063095ea7b3146101f257806313114a9d1461022257600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101dc61058c565b6040516101e99190611aed565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004611b5a565b61061e565b60405190151581526020016101e9565b34801561022e57600080fd5b506009545b6040519081526020016101e9565b34801561024d57600080fd5b50601654610261906001600160a01b031681565b6040516001600160a01b0390911681526020016101e9565b34801561028557600080fd5b50600754610233565b34801561029a57600080fd5b506102126102a9366004611b86565b610635565b3480156102ba57600080fd5b50601554610261906001600160a01b031681565b3480156102da57600080fd5b506102336102e9366004611bc7565b61069e565b3480156102fa57600080fd5b50600c5460405160ff90911681526020016101e9565b34801561031c57600080fd5b5061021261032b366004611b5a565b610727565b34801561033c57600080fd5b50610233600f5481565b34801561035257600080fd5b50610233610361366004611be0565b61075d565b34801561037257600080fd5b50601754610261906001600160a01b031681565b34801561039257600080fd5b5060175461021290600160a81b900460ff1681565b3480156103b357600080fd5b506102126103c2366004611c15565b6001600160a01b031660009081526003602052604090205460ff1690565b3480156103ec57600080fd5b506102336103fb366004611c15565b6107ec565b34801561040c57600080fd5b5061021261041b366004611c15565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561044557600080fd5b506101dc61084b565b34801561045a57600080fd5b50601a546102129060ff1681565b34801561047457600080fd5b50610212610483366004611b5a565b61085a565b34801561049457600080fd5b506102126104a3366004611b5a565b6108a9565b3480156104b457600080fd5b50610233600d5481565b3480156104ca57600080fd5b5061023360195481565b3480156104e057600080fd5b5061023360185481565b3480156104f657600080fd5b50610212610505366004611c15565b60066020526000908152604090205460ff1681565b34801561052657600080fd5b50610233610535366004611c32565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561056c57600080fd5b5061023360145481565b34801561058257600080fd5b5061023360135481565b6060600a805461059b90611c60565b80601f01602080910402602001604051908101604052809291908181526020018280546105c790611c60565b80156106145780601f106105e957610100808354040283529160200191610614565b820191906000526020600020905b8154815290600101906020018083116105f757829003601f168201915b5050505050905090565b600061062b338484610a18565b5060015b92915050565b6000610642848484610b3c565b610694843361068f85604051806060016040528060288152602001611de1602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190610d44565b610a18565b5060019392505050565b600060085482111561070a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610714610d7e565b90506107208382610935565b9392505050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161062b91859061068f90866109b9565b60006007548311156107b15760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610701565b816107d15760006107c184610da1565b5094965061062f95505050505050565b60006107dc84610da1565b5093965061062f95505050505050565b6001600160a01b03811660009081526004602052604081205460ff161561082957506001600160a01b031660009081526001602052604090205490565b6001600160a01b03821660009081526020819052604090205461062f9061069e565b6060600b805461059b90611c60565b600061062b338461068f85604051806060016040528060258152602001611e09602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190610d44565b600061062b338484610b3c565b6000826108c55750600061062f565b60006108d18385611cb1565b9050826108de8583611cd0565b146107205760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610701565b600061072083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610dfc565b600061072083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d44565b6000806109c68385611cf2565b9050838110156107205760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610701565b6001600160a01b038316610a7a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610701565b6001600160a01b038216610adb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610701565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610ba05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610701565b60008111610c025760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610701565b6000610c0d306107ec565b60195490915081108015908190610c2e5750601754600160a01b900460ff16155b8015610c4857506017546001600160a01b03868116911614155b8015610c5d5750601754600160a81b900460ff165b15610c6b57610c6b82610e2a565b6017546000906001600160a01b0387811691161480610c9757506017546001600160a01b038681169116145b15610ca0575060015b601a5460ff161580610cca57506001600160a01b03861660009081526003602052604090205460ff165b80610ced57506001600160a01b03851660009081526003602052604090205460ff165b15610cf6575060005b6017546001600160a01b0387811691161415610d13576013546011555b6017546001600160a01b0386811691161415610d30576014546011555b610d3c86868684610f31565b505050505050565b60008184841115610d685760405162461bcd60e51b81526004016107019190611aed565b506000610d758486611d0a565b95945050505050565b6000806000610d8b611120565b9092509050610d9a8282610935565b9250505090565b6000806000806000806000806000806000610dbb8c6112a0565b93509350935093506000806000610ddc8f8787610dd6610d7e565b886112f5565b919f509d509b509599509397509195509350505050919395979092949650565b60008183610e1d5760405162461bcd60e51b81526004016107019190611aed565b506000610d758486611cd0565b6017805460ff60a01b1916600160a01b179055610e4681611357565b60155460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114610e97576040519150601f19603f3d011682016040523d82523d6000602084013e610e9c565b606091505b5050905080610ee65760405162461bcd60e51b81526020600482015260166024820152751b585c9ad95d1a5b99c8115512081b9bdd081cd95b9d60521b6044820152606401610701565b60408051848152602081018490527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a150506017805460ff60a01b1916905550565b80610f3e57610f3e6114a9565b6001600160a01b03841660009081526004602052604090205460ff168015610f7f57506001600160a01b03831660009081526004602052604090205460ff16155b15610f9457610f8f8484846114d7565b611092565b6001600160a01b03841660009081526004602052604090205460ff16158015610fd557506001600160a01b03831660009081526004602052604090205460ff165b15610fe557610f8f84848461162a565b6001600160a01b03841660009081526004602052604090205460ff1615801561102757506001600160a01b03831660009081526004602052604090205460ff16155b1561103757610f8f8484846116e5565b6001600160a01b03841660009081526004602052604090205460ff16801561107757506001600160a01b03831660009081526004602052604090205460ff165b1561108757610f8f84848461173e565b6110928484846116e5565b6001600160a01b03831660009081526006602052604090205460ff16611104576018546110be846107ec565b11156111045760405162461bcd60e51b815260206004820152601560248201527410985b185b98d9481b1a5b5a5d081c995858da1959605a1b6044820152606401610701565b8061111a5761111a601054600f55601254601155565b50505050565b6008546007546000918291825b60055481101561127057826000806005848154811061114e5761114e611d21565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806111b9575081600160006005848154811061119257611192611d21565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156111cf57600854600754945094505050509091565b611214600080600584815481106111e8576111e8611d21565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610977565b925061125c600160006005848154811061123057611230611d21565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610977565b91508061126881611d37565b91505061112d565b5060075460085461128091610935565b821015611297576008546007549350935050509091565b90939092509050565b60008060008060006112b186611861565b905060006112be87611884565b905060006112cb886118a1565b905060006112e5846112df84818d88610977565b90610977565b9992985090965091945092505050565b600080808061130489876108b6565b9050600061131289886108b6565b9050600061132089896108b6565b9050600061132e888a6108b6565b90506000611342826112df85818989610977565b949d949c50929a509298505050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061138c5761138c611d21565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114099190611d52565b8160018151811061141c5761141c611d21565b6001600160a01b0392831660209182029290920101526016546114429130911684610a18565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac9479061147b908590600090869030904290600401611d6f565b600060405180830381600087803b15801561149557600080fd5b505af1158015610d3c573d6000803e3d6000fd5b600f541580156114b95750601154155b156114c057565b600f80546010556011805460125560009182905555565b60008060008060008060006114eb88610da1565b965096509650965096509650965061153188600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461097790919063ffffffff16565b6001600160a01b038b16600090815260016020908152604080832093909355819052205461155f9088610977565b6001600160a01b03808c1660009081526020819052604080822093909355908b168152205461158e90876109b9565b6001600160a01b038a1660009081526020819052604090205580156115b7576115b78a826118bd565b81156115c7576115c78a83611a0a565b6115d18584611ac9565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161161691815260200190565b60405180910390a350505050505050505050565b600080600080600080600061163e88610da1565b9650965096509650965096509650611683876000808d6001600160a01b03166001600160a01b031681526020019081526020016000205461097790919063ffffffff16565b6001600160a01b03808c1660009081526020818152604080832094909455918c168152600190915220546116b790856109b9565b6001600160a01b038a16600090815260016020908152604080832093909355819052205461158e90876109b9565b60008060008060008060006116f988610da1565b965096509650965096509650965061155f876000808d6001600160a01b03166001600160a01b031681526020019081526020016000205461097790919063ffffffff16565b600080600080600080600061175288610da1565b965096509650965096509650965061179888600160008d6001600160a01b03166001600160a01b031681526020019081526020016000205461097790919063ffffffff16565b6001600160a01b038b1660009081526001602090815260408083209390935581905220546117c69088610977565b6001600160a01b03808c1660009081526020818152604080832094909455918c168152600190915220546117fa90856109b9565b6001600160a01b038a16600090815260016020908152604080832093909355819052205461182890876109b9565b6001600160a01b038a166000908152602081905260409020558115611851576118518a83611a0a565b80156115c7576115c78a826118bd565b600061062f6103e861187e600d54856108b690919063ffffffff16565b90610935565b600061062f6103e861187e600f54856108b690919063ffffffff16565b600061062f606461187e601154856108b690919063ffffffff16565b60006118c7610d7e565b905060006118d583836108b6565b60008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55490915061190c90826109b9565b600080527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb55560046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5460ff16156119c2576000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461199690846109b9565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49555b6040518381526000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350505050565b6000611a14610d7e565b90506000611a2283836108b6565b30600090815260208190526040902054909150611a3f90826109b9565b306000908152602081815260408083209390935560049052205460ff1615611a8c5730600090815260016020526040902054611a7b90846109b9565b306000908152600160205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016119fc565b600854611ad69083610977565b600855600954611ae690826109b9565b6009555050565b600060208083528351808285015260005b81811015611b1a57858101830151858201604001528201611afe565b81811115611b2c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611b5757600080fd5b50565b60008060408385031215611b6d57600080fd5b8235611b7881611b42565b946020939093013593505050565b600080600060608486031215611b9b57600080fd5b8335611ba681611b42565b92506020840135611bb681611b42565b929592945050506040919091013590565b600060208284031215611bd957600080fd5b5035919050565b60008060408385031215611bf357600080fd5b8235915060208301358015158114611c0a57600080fd5b809150509250929050565b600060208284031215611c2757600080fd5b813561072081611b42565b60008060408385031215611c4557600080fd5b8235611c5081611b42565b91506020830135611c0a81611b42565b600181811c90821680611c7457607f821691505b60208210811415611c9557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611ccb57611ccb611c9b565b500290565b600082611ced57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611d0557611d05611c9b565b500190565b600082821015611d1c57611d1c611c9b565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611d4b57611d4b611c9b565b5060010190565b600060208284031215611d6457600080fd5b815161072081611b42565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611dbf5784516001600160a01b031683529383019391830191600101611d9a565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201dcdf07ce1a7b351958f12dc954b0a287d3e1e7639fbe3a23e12e6a322b2f91a64736f6c634300080a0033

Deployed Bytecode Sourcemap

22441:16528:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25326:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26238:161;;;;;;;;;;-1:-1:-1;26238:161:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;26238:161:0;1072:187:1;27359:87:0;;;;;;;;;;-1:-1:-1;27428:10:0;;27359:87;;;1410:25:1;;;1398:2;1383:18;27359:87:0;1264:177:1;23721:41:0;;;;;;;;;;-1:-1:-1;23721:41:0;;;;-1:-1:-1;;;;;23721:41:0;;;;;;-1:-1:-1;;;;;1637:32:1;;;1619:51;;1607:2;1592:18;23721:41:0;1446:230:1;25603:95:0;;;;;;;;;;-1:-1:-1;25683:7:0;;25603:95;;26407:313;;;;;;;;;;-1:-1:-1;26407:313:0;;;;;:::i;:::-;;:::i;23643:69::-;;;;;;;;;;-1:-1:-1;23643:69:0;;;;-1:-1:-1;;;;;23643:69:0;;;27900:253;;;;;;;;;;-1:-1:-1;27900:253:0;;;;;:::i;:::-;;:::i;25512:83::-;;;;;;;;;;-1:-1:-1;25578:9:0;;25512:83;;25578:9;;;;2677:36:1;;2665:2;2650:18;25512:83:0;2535:184:1;26728:218:0;;;;;;;;;;-1:-1:-1;26728:218:0;;;;;:::i;:::-;;:::i;23376:26::-;;;;;;;;;;;;;;;;27454:438;;;;;;;;;;-1:-1:-1;27454:438:0;;;;;:::i;:::-;;:::i;23769:28::-;;;;;;;;;;-1:-1:-1;23769:28:0;;;;-1:-1:-1;;;;;23769:28:0;;;23838:40;;;;;;;;;;-1:-1:-1;23838:40:0;;;;-1:-1:-1;;;23838:40:0;;;;;;33020:123;;;;;;;;;;-1:-1:-1;33020:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;33108:27:0;33084:4;33108:27;;;:18;:27;;;;;;;;;33020:123;25706:198;;;;;;;;;;-1:-1:-1;25706:198:0;;;;;:::i;:::-;;:::i;27231:120::-;;;;;;;;;;-1:-1:-1;27231:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27323:20:0;27299:4;27323:20;;;:11;:20;;;;;;;;;27231:120;25417:87;;;;;;;;;;;;;:::i;24024:30::-;;;;;;;;;;-1:-1:-1;24024:30:0;;;;;;;;26954:269;;;;;;;;;;-1:-1:-1;26954:269:0;;;;;:::i;:::-;;:::i;25912:167::-;;;;;;;;;;-1:-1:-1;25912:167:0;;;;;:::i;:::-;;:::i;23286:27::-;;;;;;;;;;;;;;;;23954:57;;;;;;;;;;;;;;;;23891:56;;;;;;;;;;;;;;;;22878:47;;;;;;;;;;-1:-1:-1;22878:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26087:143;;;;;;;;;;-1:-1:-1;26087:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;26195:18:0;;;26168:7;26195:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26087:143;23605:29;;;;;;;;;;;;;;;;23570:28;;;;;;;;;;;;;;;;25326:83;25363:13;25396:5;25389:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25326:83;:::o;26238:161::-;26313:4;26330:39;8051:10;26353:7;26362:6;26330:8;:39::i;:::-;-1:-1:-1;26387:4:0;26238:161;;;;;:::o;26407:313::-;26505:4;26522:36;26532:6;26540:9;26551:6;26522:9;:36::i;:::-;26569:121;26578:6;8051:10;26600:89;26638:6;26600:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26600:19:0;;;;;;:11;:19;;;;;;;;8051:10;26600:33;;;;;;;;;;:37;:89::i;:::-;26569:8;:121::i;:::-;-1:-1:-1;26708:4:0;26407:313;;;;;:::o;27900:253::-;27966:7;28005;;27994;:18;;27986:73;;;;-1:-1:-1;;;27986:73:0;;4302:2:1;27986:73:0;;;4284:21:1;4341:2;4321:18;;;4314:30;4380:34;4360:18;;;4353:62;-1:-1:-1;;;4431:18:1;;;4424:40;4481:19;;27986:73:0;;;;;;;;;28070:19;28093:10;:8;:10::i;:::-;28070:33;-1:-1:-1;28121:24:0;:7;28070:33;28121:11;:24::i;:::-;28114:31;27900:253;-1:-1:-1;;;27900:253:0:o;26728:218::-;8051:10;26816:4;26865:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26865:34:0;;;;;;;;;;26816:4;;26833:83;;26856:7;;26865:50;;26904:10;26865:38;:50::i;27454:438::-;27544:7;27583;;27572;:18;;27564:62;;;;-1:-1:-1;;;27564:62:0;;4713:2:1;27564:62:0;;;4695:21:1;4752:2;4732:18;;;4725:30;4791:33;4771:18;;;4764:61;4842:18;;27564:62:0;4511:355:1;27564:62:0;27642:17;27637:248;;27677:15;27702:19;27713:7;27702:10;:19::i;:::-;-1:-1:-1;27676:45:0;;-1:-1:-1;27736:14:0;;-1:-1:-1;;;;;;27736:14:0;27637:248;27785:23;27817:19;27828:7;27817:10;:19::i;:::-;-1:-1:-1;27783:53:0;;-1:-1:-1;27851:22:0;;-1:-1:-1;;;;;;27851:22:0;25706:198;-1:-1:-1;;;;;25796:20:0;;25772:7;25796:20;;;:11;:20;;;;;;;;25792:49;;;-1:-1:-1;;;;;;25825:16:0;;;;;:7;:16;;;;;;;25706:198::o;25792:49::-;-1:-1:-1;;;;;25879:16:0;;:7;:16;;;;;;;;;;;25859:37;;:19;:37::i;25417:87::-;25456:13;25489:7;25482:14;;;;;:::i;26954:269::-;27047:4;27064:129;8051:10;27087:7;27096:96;27135:15;27096:96;;;;;;;;;;;;;;;;;8051:10;27096:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;27096:34:0;;;;;;;;;;;;:38;:96::i;25912:167::-;25990:4;26007:42;8051:10;26031:9;26042:6;26007:9;:42::i;4831:471::-;4889:7;5134:6;5130:47;;-1:-1:-1;5164:1:0;5157:8;;5130:47;5189:9;5201:5;5205:1;5201;:5;:::i;:::-;5189:17;-1:-1:-1;5234:1:0;5225:5;5229:1;5189:17;5225:5;:::i;:::-;:10;5217:56;;;;-1:-1:-1;;;5217:56:0;;5600:2:1;5217:56:0;;;5582:21:1;5639:2;5619:18;;;5612:30;5678:34;5658:18;;;5651:62;-1:-1:-1;;;5729:18:1;;;5722:31;5770:19;;5217:56:0;5398:397:1;5778:132:0;5836:7;5863:39;5867:1;5870;5863:39;;;;;;;;;;;;;;;;;:3;:39::i;3941:136::-;3999:7;4026:43;4030:1;4033;4026:43;;;;;;;;;;;;;;;;;:3;:43::i;3477:181::-;3535:7;;3567:5;3571:1;3567;:5;:::i;:::-;3555:17;;3596:1;3591;:6;;3583:46;;;;-1:-1:-1;;;3583:46:0;;6135:2:1;3583:46:0;;;6117:21:1;6174:2;6154:18;;;6147:30;6213:29;6193:18;;;6186:57;6260:18;;3583:46:0;5933:351:1;33151:337:0;-1:-1:-1;;;;;33244:19:0;;33236:68;;;;-1:-1:-1;;;33236:68:0;;6491:2:1;33236:68:0;;;6473:21:1;6530:2;6510:18;;;6503:30;6569:34;6549:18;;;6542:62;-1:-1:-1;;;6620:18:1;;;6613:34;6664:19;;33236:68:0;6289:400:1;33236:68:0;-1:-1:-1;;;;;33323:21:0;;33315:68;;;;-1:-1:-1;;;33315:68:0;;6896:2:1;33315:68:0;;;6878:21:1;6935:2;6915:18;;;6908:30;6974:34;6954:18;;;6947:62;-1:-1:-1;;;7025:18:1;;;7018:32;7067:19;;33315:68:0;6694:398:1;33315:68:0;-1:-1:-1;;;;;33396:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33448:32;;1410:25:1;;;33448:32:0;;1383:18:1;33448:32:0;;;;;;;33151:337;;;:::o;33496:1369::-;-1:-1:-1;;;;;33618:18:0;;33610:68;;;;-1:-1:-1;;;33610:68:0;;7299:2:1;33610:68:0;;;7281:21:1;7338:2;7318:18;;;7311:30;7377:34;7357:18;;;7350:62;-1:-1:-1;;;7428:18:1;;;7421:35;7473:19;;33610:68:0;7097:401:1;33610:68:0;33706:1;33697:6;:10;33689:64;;;;-1:-1:-1;;;33689:64:0;;7705:2:1;33689:64:0;;;7687:21:1;7744:2;7724:18;;;7717:30;7783:34;7763:18;;;7756:62;-1:-1:-1;;;7834:18:1;;;7827:39;7883:19;;33689:64:0;7503:405:1;33689:64:0;33774:28;33805:24;33823:4;33805:9;:24::i;:::-;33901:29;;33774:55;;-1:-1:-1;33877:53:0;;;;;;;33959;;-1:-1:-1;33996:16:0;;-1:-1:-1;;;33996:16:0;;;;33995:17;33959:53;:91;;;;-1:-1:-1;34037:13:0;;-1:-1:-1;;;;;34029:21:0;;;34037:13;;34029:21;;33959:91;:129;;;;-1:-1:-1;34067:21:0;;-1:-1:-1;;;34067:21:0;;;;33959:129;33941:222;;;34115:36;34130:20;34115:14;:36::i;:::-;34288:13;;34244:12;;-1:-1:-1;;;;;34280:21:0;;;34288:13;;34280:21;;:44;;-1:-1:-1;34311:13:0;;-1:-1:-1;;;;;34305:19:0;;;34311:13;;34305:19;34280:44;34277:90;;;-1:-1:-1;34351:4:0;34277:90;34383:11;;;;34382:12;;:40;;-1:-1:-1;;;;;;34398:24:0;;;;;;:18;:24;;;;;;;;34382:40;:66;;;-1:-1:-1;;;;;;34426:22:0;;;;;;:18;:22;;;;;;;;34382:66;34379:188;;;-1:-1:-1;34550:5:0;34379:188;34588:13;;-1:-1:-1;;;;;34580:21:0;;;34588:13;;34580:21;34577:77;;;34634:8;;34618:13;:24;34577:77;34676:13;;-1:-1:-1;;;;;34670:19:0;;;34676:13;;34670:19;34666:77;;;34722:9;;34706:13;:25;34666:77;34819:38;34834:4;34839:2;34842:6;34849:7;34819:14;:38::i;:::-;33599:1266;;;33496:1369;;;:::o;4380:192::-;4466:7;4502:12;4494:6;;;;4486:29;;;;-1:-1:-1;;;4486:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4526:9:0;4538:5;4542:1;4538;:5;:::i;:::-;4526:17;4380:192;-1:-1:-1;;;;;4380:192:0:o;30569:163::-;30610:7;30631:15;30648;30667:19;:17;:19::i;:::-;30630:56;;-1:-1:-1;30630:56:0;-1:-1:-1;30704:20:0;30630:56;;30704:11;:20::i;:::-;30697:27;;;;30569:163;:::o;29154:458::-;29214:7;29223;29232;29241;29250;29259;29268;29289:23;29314:12;29328:18;29348:13;29365:20;29377:7;29365:11;:20::i;:::-;29288:97;;;;;;;;29397:15;29414:23;29439:12;29455:57;29467:7;29476:4;29482:10;29494;:8;:10::i;:::-;29506:5;29455:11;:57::i;:::-;29396:116;;-1:-1:-1;29396:116:0;-1:-1:-1;29396:116:0;-1:-1:-1;29563:15:0;;-1:-1:-1;29580:4:0;;-1:-1:-1;29586:10:0;;-1:-1:-1;29598:5:0;-1:-1:-1;;;;29154:458:0;;;;;;;;;:::o;6406:278::-;6492:7;6527:12;6520:5;6512:28;;;;-1:-1:-1;;;6512:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6551:9:0;6563:5;6567:1;6563;:5;:::i;34873:492::-;24197:16;:23;;-1:-1:-1;;;;24197:23:0;-1:-1:-1;;;24197:23:0;;;34966:38:::1;34983:20:::0;34966:16:::1;:38::i;:::-;35211:9;::::0;35203:43:::1;::::0;35153:21:::1;::::0;35135:15:::1;::::0;-1:-1:-1;;;;;35211:9:0;;::::1;::::0;35153:21;;35135:15;35203:43;35135:15;35203:43;35153:21;35211:9;35203:43:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35187:59;;;35265:4;35257:39;;;::::0;-1:-1:-1;;;35257:39:0;;8455:2:1;35257:39:0::1;::::0;::::1;8437:21:1::0;8494:2;8474:18;;;8467:30;-1:-1:-1;;;8513:18:1;;;8506:52;8575:18;;35257:39:0::1;8253:346:1::0;35257:39:0::1;35312:45;::::0;;8778:25:1;;;8834:2;8819:18;;8812:34;;;35312:45:0::1;::::0;8751:18:1;35312:45:0::1;;;;;;;-1:-1:-1::0;;24243:16:0;:24;;-1:-1:-1;;;;24243:24:0;;;-1:-1:-1;34873:492:0:o;36045:973::-;36156:7;36152:40;;36178:14;:12;:14::i;:::-;-1:-1:-1;;;;;36217:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;36241:22:0;;;;;;:11;:22;;;;;;;;36240:23;36217:46;36213:597;;;36280:48;36302:6;36310:9;36321:6;36280:21;:48::i;:::-;36213:597;;;-1:-1:-1;;;;;36351:19:0;;;;;;:11;:19;;;;;;;;36350:20;:46;;;;-1:-1:-1;;;;;;36374:22:0;;;;;;:11;:22;;;;;;;;36350:46;36346:464;;;36413:46;36433:6;36441:9;36452:6;36413:19;:46::i;36346:464::-;-1:-1:-1;;;;;36482:19:0;;;;;;:11;:19;;;;;;;;36481:20;:47;;;;-1:-1:-1;;;;;;36506:22:0;;;;;;:11;:22;;;;;;;;36505:23;36481:47;36477:333;;;36545:44;36563:6;36571:9;36582:6;36545:17;:44::i;36477:333::-;-1:-1:-1;;;;;36611:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;36634:22:0;;;;;;:11;:22;;;;;;;;36611:45;36607:203;;;36673:48;36695:6;36703:9;36714:6;36673:21;:48::i;36607:203::-;36754:44;36772:6;36780:9;36791:6;36754:17;:44::i;:::-;-1:-1:-1;;;;;36826:25:0;;;;;;:14;:25;;;;;;;;36822:129;;36900:13;;36877:20;36887:9;36877;:20::i;:::-;:36;;36869:70;;;;-1:-1:-1;;;36869:70:0;;9059:2:1;36869:70:0;;;9041:21:1;9098:2;9078:18;;;9071:30;-1:-1:-1;;;9117:18:1;;;9110:51;9178:18;;36869:70:0;8857:345:1;36869:70:0;36973:7;36969:41;;36995:15;32937;;32927:7;:25;32979:21;;32963:13;:37;32883:125;36995:15;36045:973;;;;:::o;30740:561::-;30837:7;;30873;;30790;;;;;30897:289;30921:9;:16;30917:20;;30897:289;;;30987:7;30963;:21;30971:9;30981:1;30971:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30971:12:0;30963:21;;;;;;;;;;;;;:31;;:66;;;31022:7;30998;:21;31006:9;31016:1;31006:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31006:12:0;30998:21;;;;;;;;;;;;;:31;30963:66;30959:97;;;31039:7;;31048;;31031:25;;;;;;;30740:561;;:::o;30959:97::-;31081:34;31093:7;:21;31101:9;31111:1;31101:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31101:12:0;31093:21;;;;;;;;;;;;;31081:7;;:11;:34::i;:::-;31071:44;;31140:34;31152:7;:21;31160:9;31170:1;31160:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31160:12:0;31152:21;;;;;;;;;;;;;31140:7;;:11;:34::i;:::-;31130:44;-1:-1:-1;30939:3:0;;;;:::i;:::-;;;;30897:289;;;-1:-1:-1;31222:7:0;;31210;;:20;;:11;:20::i;:::-;31200:7;:30;31196:61;;;31240:7;;31249;;31232:25;;;;;;30740:561;;:::o;31196:61::-;31276:7;;31285;;-1:-1:-1;30740:561:0;-1:-1:-1;30740:561:0:o;29620:419::-;29680:7;29689;29698;29707;29727:13;29743:25;29760:7;29743:16;:25::i;:::-;29727:41;;29779:12;29794:24;29810:7;29794:15;:24::i;:::-;29779:39;;29829:18;29850:30;29872:7;29850:21;:30::i;:::-;29829:51;-1:-1:-1;29901:23:0;29927:44;29965:5;29927:33;29829:51;29927:33;:7;29939:4;29927:11;:17::i;:::-;:21;;:33::i;:44::-;29901:70;30007:4;;-1:-1:-1;30013:10:0;;-1:-1:-1;30025:5:0;;-1:-1:-1;29620:419:0;-1:-1:-1;;;29620:419:0:o;30047:514::-;30177:7;;;;30233:24;:7;30245:11;30233;:24::i;:::-;30215:42;-1:-1:-1;30268:12:0;30283:21;:4;30292:11;30283:8;:21::i;:::-;30268:36;-1:-1:-1;30315:18:0;30336:27;:10;30351:11;30336:14;:27::i;:::-;30315:48;-1:-1:-1;30374:13:0;30390:22;:5;30400:11;30390:9;:22::i;:::-;30374:38;-1:-1:-1;30433:23:0;30459:44;30374:38;30459:33;30481:10;30459:33;:7;30471:4;30459:11;:17::i;:44::-;30522:7;;;;-1:-1:-1;30548:4:0;;-1:-1:-1;30047:514:0;;-1:-1:-1;;;;;;;;;30047:514:0:o;35373:589::-;35523:16;;;35537:1;35523:16;;;;;;;;35499:21;;35523:16;;;;;;;;;;-1:-1:-1;35523:16:0;35499:40;;35568:4;35550;35555:1;35550:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35550:23:0;;;:7;;;;;;;;;;:23;;;;35594:15;;:22;;;-1:-1:-1;;;35594:22:0;;;;:15;;;;;:20;;:22;;;;;35550:7;;35594:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35584:4;35589:1;35584:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35584:32:0;;;:7;;;;;;;;;:32;35661:15;;35629:62;;35646:4;;35661:15;35679:11;35629:8;:62::i;:::-;35730:15;;:224;;-1:-1:-1;;;35730:224:0;;-1:-1:-1;;;;;35730:15:0;;;;:66;;:224;;35811:11;;35730:15;;35881:4;;35908;;35928:15;;35730:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32624:247;32670:7;;:12;:34;;;;-1:-1:-1;32686:13:0;;:18;32670:34;32667:47;;;32624:247::o;32667:47::-;32748:7;;;32730:15;:25;32790:13;;;32766:21;:37;-1:-1:-1;32824:11:0;;;;32846:17;32624:247::o;38308:655::-;38411:15;38428:23;38453:12;38467:23;38492:12;38506:18;38526:13;38544:19;38555:7;38544:10;:19::i;:::-;38410:153;;;;;;;;;;;;;;38592:28;38612:7;38592;:15;38600:6;-1:-1:-1;;;;;38592:15:0;-1:-1:-1;;;;;38592:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;38574:15:0;;;;;;:7;:15;;;;;;;;:46;;;;38649:15;;;;;:28;;38669:7;38649:19;:28::i;:::-;-1:-1:-1;;;;;38631:15:0;;;:7;:15;;;;;;;;;;;:46;;;;38709:18;;;;;;;:39;;38732:15;38709:22;:39::i;:::-;-1:-1:-1;;;;;38688:18:0;;:7;:18;;;;;;;;;;:60;38765:9;;38762:34;;38776:20;38782:6;38790:5;38776;:20::i;:::-;38810:14;;38807:54;;38827:34;38842:6;38850:10;38827:14;:34::i;:::-;38872:23;38884:4;38890;38872:11;:23::i;:::-;38928:9;-1:-1:-1;;;;;38911:44:0;38920:6;-1:-1:-1;;;;;38911:44:0;;38939:15;38911:44;;;;1410:25:1;;1398:2;1383:18;;1264:177;38911:44:0;;;;;;;;38399:564;;;;;;;38308:655;;;:::o;37625:675::-;37726:15;37743:23;37768:12;37782:23;37807:12;37821:18;37841:13;37859:19;37870:7;37859:10;:19::i;:::-;37725:153;;;;;;;;;;;;;;37907:28;37927:7;37907;:15;37915:6;-1:-1:-1;;;;;37907:15:0;-1:-1:-1;;;;;37907:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;37889:15:0;;;:7;:15;;;;;;;;;;;:46;;;;37967:18;;;;;:7;:18;;;;;:39;;37990:15;37967:22;:39::i;:::-;-1:-1:-1;;;;;37946:18:0;;;;;;:7;:18;;;;;;;;:60;;;;38038:18;;;;;:39;;38061:15;38038:22;:39::i;37026:591::-;37125:15;37142:23;37167:12;37181:23;37206:12;37220:18;37240:13;37258:19;37269:7;37258:10;:19::i;:::-;37124:153;;;;;;;;;;;;;;37306:28;37326:7;37306;:15;37314:6;-1:-1:-1;;;;;37306:15:0;-1:-1:-1;;;;;37306:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;28163:731::-;28266:15;28283:23;28308:12;28322:23;28347:12;28361:18;28381:13;28399:19;28410:7;28399:10;:19::i;:::-;28265:153;;;;;;;;;;;;;;28447:28;28467:7;28447;:15;28455:6;-1:-1:-1;;;;;28447:15:0;-1:-1:-1;;;;;28447:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;28429:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28504:15;;;;;:28;;28524:7;28504:19;:28::i;:::-;-1:-1:-1;;;;;28486:15:0;;;:7;:15;;;;;;;;;;;:46;;;;28564:18;;;;;:7;:18;;;;;:39;;28587:15;28564:22;:39::i;:::-;-1:-1:-1;;;;;28543:18:0;;;;;;:7;:18;;;;;;;;:60;;;;28635:18;;;;;:39;;28658:15;28635:22;:39::i;:::-;-1:-1:-1;;;;;28614:18:0;;:7;:18;;;;;;;;;;:60;28696:14;;28693:54;;28713:34;28728:6;28736:10;28713:14;:34::i;:::-;28761:9;;28758:34;;28772:20;28778:6;28786:5;28772;:20::i;32304:134::-;32369:7;32396:32;32422:5;32396:21;32408:8;;32396:7;:11;;:21;;;;:::i;:::-;:25;;:32::i;32164:132::-;32228:7;32255:31;32280:5;32255:20;32267:7;;32255;:11;;:20;;;;:::i;32446:166::-;32516:7;32543:61;32588:5;32543:26;32555:13;;32543:7;:11;;:26;;;;:::i;31761:385::-;31826:19;31849:10;:8;:10::i;:::-;31826:33;-1:-1:-1;31870:18:0;31891:22;:5;31826:33;31891:9;:22::i;:::-;31946:7;:19;;;;;;;31870:43;;-1:-1:-1;31946:35:0;;31870:43;31946:23;:35::i;:::-;31924:7;:19;;;:57;31995:11;31924:19;31995:23;;;;;31992:93;;;32055:19;;;:7;:19;;;;:30;;32079:5;32055:23;:30::i;:::-;32033:19;;;:7;:19;;;:52;31992:93;32101:35;;1410:25:1;;;32126:1:0;;-1:-1:-1;;;;;32101:35:0;;;;;1398:2:1;1383:18;32101:35:0;;;;;;;;31815:331;;31761:385;;:::o;31313:440::-;31392:19;31415:10;:8;:10::i;:::-;31392:33;-1:-1:-1;31436:18:0;31457:27;:10;31392:33;31457:14;:27::i;:::-;31536:4;31520:7;:22;;;;;;;;;;;31436:48;;-1:-1:-1;31520:38:0;;31436:48;31520:26;:38::i;:::-;31511:4;31495:7;:22;;;;;;;;;;;:63;;;;31572:11;:26;;;;;;31569:107;;;31654:4;31638:22;;;;:7;:22;;;;;;:38;;31665:10;31638:26;:38::i;:::-;31629:4;31613:22;;;;:7;:22;;;;;:63;31569:107;31692:43;;1410:25:1;;;31717:4:0;;-1:-1:-1;;;;;31692:43:0;;;;;1398:2:1;1383:18;31692:43:0;1264:177:1;28999:147:0;29077:7;;:17;;29089:4;29077:11;:17::i;:::-;29067:7;:27;29118:10;;:20;;29133:4;29118:14;:20::i;:::-;29105:10;:33;-1:-1:-1;;28999:147:0:o;14:597:1:-;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;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1681:456::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1882:9;1869:23;1901:31;1926:5;1901:31;:::i;:::-;1951:5;-1:-1:-1;2008:2:1;1993:18;;1980:32;2021:33;1980:32;2021:33;:::i;:::-;1681:456;;2073:7;;-1:-1:-1;;;2127:2:1;2112:18;;;;2099:32;;1681:456::o;2350:180::-;2409:6;2462:2;2450:9;2441:7;2437:23;2433:32;2430:52;;;2478:1;2475;2468:12;2430:52;-1:-1:-1;2501:23:1;;2350:180;-1:-1:-1;2350:180:1:o;2724:341::-;2789:6;2797;2850:2;2838:9;2829:7;2825:23;2821:32;2818:52;;;2866:1;2863;2856:12;2818:52;2902:9;2889:23;2879:33;;2962:2;2951:9;2947:18;2934:32;3009:5;3002:13;2995:21;2988:5;2985:32;2975:60;;3031:1;3028;3021:12;2975:60;3054:5;3044:15;;;2724:341;;;;;:::o;3070:247::-;3129:6;3182:2;3170:9;3161:7;3157:23;3153:32;3150:52;;;3198:1;3195;3188:12;3150:52;3237:9;3224:23;3256:31;3281:5;3256:31;:::i;3322:388::-;3390:6;3398;3451:2;3439:9;3430:7;3426:23;3422:32;3419:52;;;3467:1;3464;3457:12;3419:52;3506:9;3493:23;3525:31;3550:5;3525:31;:::i;:::-;3575:5;-1:-1:-1;3632:2:1;3617:18;;3604:32;3645:33;3604:32;3645:33;:::i;3715:380::-;3794:1;3790:12;;;;3837;;;3858:61;;3912:4;3904:6;3900:17;3890:27;;3858:61;3965:2;3957:6;3954:14;3934:18;3931:38;3928:161;;;4011:10;4006:3;4002:20;3999:1;3992:31;4046:4;4043:1;4036:15;4074:4;4071:1;4064:15;3928:161;;3715:380;;;:::o;4871:127::-;4932:10;4927:3;4923:20;4920:1;4913:31;4963:4;4960:1;4953:15;4987:4;4984:1;4977:15;5003:168;5043:7;5109:1;5105;5101:6;5097:14;5094:1;5091:21;5086:1;5079:9;5072:17;5068:45;5065:71;;;5116:18;;:::i;:::-;-1:-1:-1;5156:9:1;;5003:168::o;5176:217::-;5216:1;5242;5232:132;;5286:10;5281:3;5277:20;5274:1;5267:31;5321:4;5318:1;5311:15;5349:4;5346:1;5339:15;5232:132;-1:-1:-1;5378:9:1;;5176:217::o;5800:128::-;5840:3;5871:1;5867:6;5864:1;5861:13;5858:39;;;5877:18;;:::i;:::-;-1:-1:-1;5913:9:1;;5800:128::o;7913:125::-;7953:4;7981:1;7978;7975:8;7972:34;;;7986:18;;:::i;:::-;-1:-1:-1;8023:9:1;;7913:125::o;9207:127::-;9268:10;9263:3;9259:20;9256:1;9249:31;9299:4;9296:1;9289:15;9323:4;9320:1;9313:15;9339:135;9378:3;-1:-1:-1;;9399:17:1;;9396:43;;;9419:18;;:::i;:::-;-1:-1:-1;9466:1:1;9455:13;;9339:135::o;9611:251::-;9681:6;9734:2;9722:9;9713:7;9709:23;9705:32;9702:52;;;9750:1;9747;9740:12;9702:52;9782:9;9776:16;9801:31;9826:5;9801:31;:::i;9867:980::-;10129:4;10177:3;10166:9;10162:19;10208:6;10197:9;10190:25;10234:2;10272:6;10267:2;10256:9;10252:18;10245:34;10315:3;10310:2;10299:9;10295:18;10288:31;10339:6;10374;10368:13;10405:6;10397;10390:22;10443:3;10432:9;10428:19;10421:26;;10482:2;10474:6;10470:15;10456:29;;10503:1;10513:195;10527:6;10524:1;10521:13;10513:195;;;10592:13;;-1:-1:-1;;;;;10588:39:1;10576:52;;10683:15;;;;10648:12;;;;10624:1;10542:9;10513:195;;;-1:-1:-1;;;;;;;10764:32:1;;;;10759:2;10744:18;;10737:60;-1:-1:-1;;;10828:3:1;10813:19;10806:35;10725:3;9867:980;-1:-1:-1;;;9867:980:1:o

Swarm Source

ipfs://1dcdf07ce1a7b351958f12dc954b0a287d3e1e7639fbe3a23e12e6a322b2f91a
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.