ETH Price: $3,168.54 (+4.34%)

Token

Aladdinu (ALADDINU)
 

Overview

Max Total Supply

200,000,000,000 ALADDINU

Holders

193

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
218,897,419.496733195 ALADDINU

Value
$0.00
0xfcf6a3d7eb8c62a5256a020e48f153c6d5dd6909
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:
Aladdinu

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 2 of 8: Aladdinu.sol
// SPDX-License-Identifier: NOLICENSE

pragma solidity ^0.8.0;

/* 
           _           _     _ _             
     /\   | |         | |   | (_)            
    /  \  | | __ _  __| | __| |_ _ __  _   _ 
   / /\ \ | |/ _` |/ _` |/ _` | | '_ \| | | |
  / ____ \| | (_| | (_| | (_| | | | | | |_| |
 /_/    \_\_|\__,_|\__,_|\__,_|_|_| |_|\__,_

⭐️ The Race Starts Here!

🔸 Launch: 5Th January @ 11:30pm UTC
🔸 Launching on: Uniswap

🌍 Website: wwww.aladdinu.com.
🌍 Telegram: @Aladdinu.
🌍 Twitter: @Aladdinutoken.

🔹 Initial LP 50k USD (of ETH)
🔹 Whitepaper on website.
🔹 Huge marketing and promotion lined up.

Five playable characters at launch + more characters and upgrades to be bought 
on the Agrabah market (NFT In game upgrade store to buy and sell).

🔸 First level video and 3D character published in Telegram group.

*/

import "./Ownable.sol";
import "./IERC20.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Factory.sol";
import "./Address.sol";

contract Aladdinu is Context, IERC20, Ownable {

    using Address for address payable;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isExcludedFromMaxWallet;

    mapping (address => bool) public isBot;

    address[] private _excluded;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 200000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public maxTxAmountBuy = _tTotal/142; 
    uint256 public maxTxAmountSell = _tTotal/200; 
    uint256 public maxWalletAmount = _tTotal/100; 
    
    //antisnipers
    uint256 public liqAddedBlockNumber;
    uint256 public blocksToWait = 2;

    address payable public marketingAddress;

    mapping (address => bool) public isAutomatedMarketMakerPair;

    string private constant _name = "Aladdinu";
    string private constant _symbol = "ALADDINU";

    bool private inSwapAndLiquify;

    IUniswapV2Router02 public UniswapV2Router;
    address public uniswapPair;
    bool public swapAndLiquifyEnabled = true;
    uint256 public numTokensSellToAddToLiquidity = _tTotal/500;

    struct feeRatesStruct {
      uint8 rfi;
      uint8 marketing;
      uint8 autolp;
      uint8 toSwap;
    }

    feeRatesStruct public buyRates = feeRatesStruct(
     {
      rfi: 0,    
      marketing: 7, 
      autolp: 4, 
      toSwap: 11 
    });

    feeRatesStruct public sellRates = feeRatesStruct(
    {
      rfi: 0,   
      marketing: 24,
      autolp: 1, 
      toSwap: 25 
    });

    feeRatesStruct private appliedRates = buyRates;

    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 toSwap;
    }
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rToSwap;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tToSwap;
    }

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ETHReceived, uint256 tokensIntotoSwap);
    event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event BlacklistedUser(address botAddress, bool indexed value);
    event MaxWalletAmountUpdated(uint256 amount);
    event ExcludeFromMaxWallet(address account, bool indexed isExcluded);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {
        
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(_UniswapV2Router.factory())
                            .createPair(address(this), _UniswapV2Router.WETH());
        isAutomatedMarketMakerPair[uniswapPair] = true;
        emit SetAutomatedMarketMakerPair(uniswapPair, true);
        UniswapV2Router = _UniswapV2Router;
        _rOwned[owner()] = _rTotal;
        marketingAddress= payable(msg.sender);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingAddress]=true;
        _isExcludedFromFee[address(this)]=true;
        
        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[marketingAddress]=true;
        _isExcludedFromMaxWallet[address(this)]=true;

        _isExcludedFromMaxWallet[uniswapPair] = true;


        emit Transfer(address(0), owner(), _tTotal);
    }

    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    //override ERC20:
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender]+addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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


    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }

    //@dev kept original RFI naming -> "reward" as in reflection
    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function excludeMultipleAccountsFromMaxWallet(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            require(_isExcludedFromMaxWallet[accounts[i]] != excluded, "_isExcludedFromMaxWallet already set to that value for one wallet");
            _isExcludedFromMaxWallet[accounts[i]] = excluded;
            emit ExcludeFromMaxWallet(accounts[i], excluded);
        }
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    function isExcludedFromMaxWallet(address account) public view returns(bool) {
        return _isExcludedFromMaxWallet[account];
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
      swapAndLiquifyEnabled = _enabled;
      emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    //  @dev receive ETH from UniswapV2Router when swapping
    receive() external payable {}

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -= rRfi;
        totFeesPaid.rfi += tRfi;
    }

    function _takeToSwap(uint256 rToSwap,uint256 tToSwap) private {
        _rOwned[address(this)] +=rToSwap;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] += tToSwap;
        totFeesPaid.toSwap+=tToSwap;
        
    }

    function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rToSwap) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) {

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        s.tRfi = tAmount*appliedRates.rfi/100;
        s.tToSwap = tAmount*appliedRates.toSwap/100;
        s.tTransferAmount = tAmount-s.tRfi-s.tToSwap;
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rToSwap) {
        rAmount = tAmount*currentRate;

        if(!takeFee) {
          return(rAmount, rAmount,0,0);
        }

        rRfi = s.tRfi*currentRate;
        rToSwap = s.tToSwap*currentRate;
        rTransferAmount =  rAmount-rRfi-rToSwap;
        return (rAmount, rTransferAmount, rRfi,rToSwap);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply -=_rOwned[_excluded[i]];
            tSupply -=_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }


    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        if(liqAddedBlockNumber==0 && isAutomatedMarketMakerPair[to] )
        {liqAddedBlockNumber = block.number;
        }

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBot[from], "ERC20: address blacklisted (bot)");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
        bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]);

        if(takeFee)
        {

            if(isAutomatedMarketMakerPair[from])
            {
                if(block.number<liqAddedBlockNumber+blocksToWait)
                {
                isBot[to] = true;
                emit BlacklistedUser(to,true);
                }

                appliedRates = buyRates;
                require(amount<=maxTxAmountBuy, "amount must be <= maxTxAmountBuy");
            }
            else
            {
                appliedRates = sellRates;
                require(amount<=maxTxAmountSell, "amount must be <= maxTxAmountSell");
            }
        }

        if (balanceOf(address(this)) >= numTokensSellToAddToLiquidity  && !inSwapAndLiquify && !isAutomatedMarketMakerPair[from] && swapAndLiquifyEnabled) {
            //add liquidity
            swapAndLiquify(numTokensSellToAddToLiquidity);
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private {
        
        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender]) {
                _tOwned[sender] -= tAmount;
        } 
        if (_isExcluded[recipient]) {
                _tOwned[recipient] += s.tTransferAmount;
        }

        _rOwned[sender] -= s.rAmount;
        _rOwned[recipient] += s.rTransferAmount;
        if(takeFee)
        {
        _reflectRfi(s.rRfi, s.tRfi);
        _takeToSwap(s.rToSwap,s.tToSwap);
        emit Transfer(sender, address(this), s.tToSwap);
        }
        require(_isExcludedFromMaxWallet[recipient] || balanceOf(recipient)<= maxWalletAmount, "Recipient cannot hold more than maxWalletAmount");
        emit Transfer(sender, recipient, s.tTransferAmount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        uint256 denominator = appliedRates.toSwap*2;
        uint256 tokensToAddLiquidityWith = contractTokenBalance*appliedRates.autolp/denominator;
        uint256 toSwap = contractTokenBalance-tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance -initialBalance;
        uint256 ETHToAddLiquidityWith = deltaBalance*appliedRates.autolp/ (denominator- appliedRates.autolp);
        
        // add liquidity to  Uniswap
        addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
        
        marketingAddress.sendValue(address(this).balance); //we give the remaining tax to marketing (5/8 of the toSwap tax)
    }

    function swapTokensForETH(uint256 tokenAmount) private {

        // generate the Pancakeswap pair path of token -> wETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UniswapV2Router.WETH();

        if(allowance(address(this), address(UniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(UniswapV2Router), ~uint256(0));
        }

        // make the swap
        UniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {

        // add the liquidity
        UniswapV2Router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        emit LiquidityAdded(tokenAmount, ETHAmount);
    }

    function setAutomatedMarketMakerPair(address _pair, bool value) external onlyOwner{
        require(isAutomatedMarketMakerPair[_pair] != value, "Automated market maker pair is already set to that value");
        isAutomatedMarketMakerPair[_pair] = value;
        if(value)
        {
        _isExcludedFromMaxWallet[_pair] = true;
        emit ExcludeFromMaxWallet(_pair, value);

        }
        emit SetAutomatedMarketMakerPair(_pair, value);
    }

    function setBuyFees(uint8 _rfi,uint8 _marketing,uint8 _autolp) external onlyOwner
    {
     buyRates.rfi=_rfi;
     buyRates.marketing=_marketing;
     buyRates.autolp=_autolp;
     buyRates.toSwap= _marketing+_autolp;
    }

    function setSellFees(uint8 _rfi,uint8 _marketing,uint8 _autolp) external onlyOwner
    {
     sellRates.rfi=_rfi;
     sellRates.marketing=_marketing;
     sellRates.autolp=_autolp;
     sellRates.toSwap= _marketing+_autolp;
    }

    function setMaxTransactionAmountsPerK(uint256 _maxTxAmountBuyPer10K, uint256 _maxTxAmountSellPer10K) external onlyOwner
    {
     maxTxAmountBuy = _tTotal*_maxTxAmountBuyPer10K/10000;
     maxTxAmountSell = _tTotal*_maxTxAmountSellPer10K/10000;
    }
    
    function setNumTokensSellToAddToLiq(uint256 amountTokens) external onlyOwner
    {
     numTokensSellToAddToLiquidity = amountTokens*10**_decimals;
    }

    function setMarketingAddress(address payable _marketingAddress) external onlyOwner
    {
        marketingAddress = _marketingAddress;
    }

    function manualSwapAndAddToLiq() external onlyOwner
    {
            swapAndLiquify(balanceOf(address(this)));
    }
    
    // Cannot BLACKLIST user manually, the only way to get into the Blacklist is to snipe, buy in block no.1. We give grace here if a genuine user can prove that they did not snipe in block 0 or 1.
    function unblacklistSniper(address botAddress) external onlyOwner
    {   require(!isBot[botAddress] ,"address provided is already not blacklisted");
        isBot[botAddress] = false;
        emit BlacklistedUser(botAddress,false);
    }

    function setMaxWalletAmount(uint256 _maxAmountWalletPer10K) external onlyOwner {
        maxWalletAmount = _tTotal*_maxAmountWalletPer10K/10000;
        emit MaxWalletAmountUpdated(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool excluded) external onlyOwner {
        require(_isExcludedFromMaxWallet[account] != excluded, "_isExcludedFromMaxWallet already set to that value");
        _isExcludedFromMaxWallet[account] = excluded;

        emit ExcludeFromMaxWallet(account, excluded);
    }

}

File 1 of 8: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 8: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 8: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

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

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

File 5 of 8: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

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

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

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

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

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

File 6 of 8: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2;

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

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

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

File 7 of 8: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

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

File 8 of 8: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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":"address","name":"botAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistedUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntotoSwap","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksToWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqAddedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapAndAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"marketing","type":"uint8"},{"internalType":"uint8","name":"autolp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmountBuyPer10K","type":"uint256"},{"internalType":"uint256","name":"_maxTxAmountSellPer10K","type":"uint256"}],"name":"setMaxTransactionAmountsPerK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxAmountWalletPer10K","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_autolp","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"toSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"}],"name":"unblacklistSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200065c565b6200002390642e90edd00062000747565b6009819055620000369060001962000783565b620000449060001962000769565b600a55608e600954620000589190620005f8565b600b5560c86009546200006c9190620005f8565b600c556064600954620000809190620005f8565b600d556002600f556013805460ff60a01b1916600160a01b179055600954620000ad906101f490620005f8565b601455604080516080808201835260008083526007602080850191909152600484860152600b6060948501526015805461ffff199081166107001762ff000019908116620400001763ff00000019908116630b00000017938490558851968701895294865260189386019390935260019685019690965260199390940192909252601680546201000095166118001783168517821663190000001790556017805461ff001960ff80871660ff1990931692909217166101008087048316021790931685850484169095029490941716630100000092839004919091169091021790553480156200019c57600080fd5b50620001b1620001ab62000542565b62000546565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020457600080fd5b505afa15801562000219573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023f9190620005a5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028857600080fd5b505afa1580156200029d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c39190620005a5565b6040518363ffffffff1660e01b8152600401620002e2929190620005d5565b602060405180830381600087803b158015620002fd57600080fd5b505af115801562000312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003389190620005a5565b601380546001600160a01b0319166001600160a01b03928316178082558216600090815260116020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360128054610100600160a81b0319166101006001600160a01b03841602179055600a5460016000620003d162000596565b6001600160a01b031681526020810191909152604001600090812091909155601080546001600160a01b031916331790556001906004906200041262000596565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560105490911681526004909252808220805484166001908117909155308352908220805490931681179092556006906200047962000596565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556010548216815260069093528183208054851660019081179091553084528284208054861682179055601354909116835291208054909216179055620004ec62000596565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620005339190620005ef565b60405180910390a350620007c6565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b600060208284031215620005b7578081fd5b81516001600160a01b0381168114620005ce578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b6000826200060a576200060a620007b0565b500490565b80825b600180861162000623575062000653565b8187048211156200063857620006386200079a565b808616156200064657918102915b9490941c93800262000612565b94509492505050565b6000620005ce60001960ff8516846000826200067b57506001620005ce565b816200068a57506000620005ce565b8160018114620006a35760028114620006ae57620006e2565b6001915050620005ce565b60ff841115620006c257620006c26200079a565b6001841b915084821115620006db57620006db6200079a565b50620005ce565b5060208310610133831016604e8410600b84101617156200071a575081810a838111156200071457620007146200079a565b620005ce565b6200072984848460016200060f565b8086048211156200073e576200073e6200079a565b02949350505050565b60008160001904831182151516156200076457620007646200079a565b500290565b6000828210156200077e576200077e6200079a565b500390565b600082620007955762000795620007b0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61359980620007d66000396000f3fe6080604052600436106102cd5760003560e01c806379eb8d1d11610175578063aa4bde28116100dc578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610827578063e22b62de14610847578063ea2f0b3714610867578063f2fde38b14610887576102d4565b8063d44e586e146107e8578063d6c180bf146107fd578063d8dcac4f14610812576102d4565b8063aa4bde2814610749578063bd94545b1461075e578063c49b9a801461077e578063c816841b1461079e578063d12a7688146107b3578063d2fcc001146107c8576102d4565b806395d89b411161012e57806395d89b411461069c5780639a7a23d6146106b15780639ba5e4d5146106d1578063a457c2d7146106f4578063a5ece94114610714578063a9059cbb14610729576102d4565b806379eb8d1d146105fd57806388f820201461061d5780638a0eef5a1461063d5780638da5cb5b14610652578063906e9dd014610667578063958b0f2014610687576102d4565b80633bbac579116102345780635342acb4116101ed578063713898cd116101c7578063713898cd1461058e578063715018a6146105b357806373cafdc2146105c85780637949a403146105dd576102d4565b80635342acb41461052e5780636dd3d39f1461054e57806370a082311461056e576102d4565b80633bbac57914610479578063437823ec146104995780634549b039146104b95780634a74bb02146104d957806350be7cdb146104ee57806352390c021461050e576102d4565b806323b872dd1161028657806323b872dd146103b757806327a14fc2146103d75780632d838119146103f7578063313ce567146104175780633685d419146104395780633950935114610459576102d4565b806304679780146102d9578063055add0d146102fb57806306fdde0314610326578063095ea7b31461034857806315952f541461037557806318160ddd14610395576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612a91565b6108a7565b005b34801561030757600080fd5b5061031061090b565b60405161031d9190612b55565b60405180910390f35b34801561033257600080fd5b5061033b61091f565b60405161031d9190612baf565b34801561035457600080fd5b506103686103633660046129ce565b610941565b60405161031d9190612ba4565b34801561038157600080fd5b506102f96103903660046128ea565b61095f565b3480156103a157600080fd5b506103aa610a31565b60405161031d9190613290565b3480156103c357600080fd5b506103686103d236600461295a565b610a37565b3480156103e357600080fd5b506102f96103f2366004612a91565b610ac9565b34801561040357600080fd5b506103aa610412366004612a91565b610b61565b34801561042357600080fd5b5061042c610ba4565b60405161031d9190613317565b34801561044557600080fd5b506102f96104543660046128ea565b610ba9565b34801561046557600080fd5b506103686104743660046129ce565b610d7e565b34801561048557600080fd5b506103686104943660046128ea565b610dd2565b3480156104a557600080fd5b506102f96104b43660046128ea565b610de7565b3480156104c557600080fd5b506103aa6104d4366004612aa9565b610e4a565b3480156104e557600080fd5b50610368610ea4565b3480156104fa57600080fd5b506102f9610509366004612b19565b610eb4565b34801561051a57600080fd5b506102f96105293660046128ea565b610f53565b34801561053a57600080fd5b506103686105493660046128ea565b61108b565b34801561055a57600080fd5b506103686105693660046128ea565b6110a9565b34801561057a57600080fd5b506103aa6105893660046128ea565b6110c7565b34801561059a57600080fd5b506105a3611129565b60405161031d9493929190613325565b3480156105bf57600080fd5b506102f961114e565b3480156105d457600080fd5b506105a3611199565b3480156105e957600080fd5b506103686105f83660046128ea565b6111be565b34801561060957600080fd5b506102f9610618366004612acb565b6111d3565b34801561062957600080fd5b506103686106383660046128ea565b611253565b34801561064957600080fd5b506103aa611271565b34801561065e57600080fd5b50610310611277565b34801561067357600080fd5b506102f96106823660046128ea565b611286565b34801561069357600080fd5b506102f96112e7565b3480156106a857600080fd5b5061033b611337565b3480156106bd57600080fd5b506102f96106cc36600461299a565b611359565b3480156106dd57600080fd5b506106e66114a0565b60405161031d929190613309565b34801561070057600080fd5b5061036861070f3660046129ce565b6114a9565b34801561072057600080fd5b50610310611522565b34801561073557600080fd5b506103686107443660046129ce565b611531565b34801561075557600080fd5b506103aa611545565b34801561076a57600080fd5b506102f96107793660046129f9565b61154b565b34801561078a57600080fd5b506102f9610799366004612a77565b6116f6565b3480156107aa57600080fd5b5061031061177c565b3480156107bf57600080fd5b506103aa61178b565b3480156107d457600080fd5b506102f96107e336600461299a565b611791565b3480156107f457600080fd5b506103aa611873565b34801561080957600080fd5b506103aa611879565b34801561081e57600080fd5b506103aa61187f565b34801561083357600080fd5b506103aa610842366004612922565b611885565b34801561085357600080fd5b506102f9610862366004612b19565b6118b0565b34801561087357600080fd5b506102f96108823660046128ea565b61194f565b34801561089357600080fd5b506102f96108a23660046128ea565b6119af565b6108af611a20565b6001600160a01b03166108c0611277565b6001600160a01b0316146108ef5760405162461bcd60e51b81526004016108e6906130f5565b60405180910390fd5b6108fb6009600a6133ed565b61090590826134be565b60145550565b60125461010090046001600160a01b031681565b604080518082019091526008815267416c616464696e7560c01b602082015290565b600061095561094e611a20565b8484611a24565b5060015b92915050565b610967611a20565b6001600160a01b0316610978611277565b6001600160a01b03161461099e5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526007602052604090205460ff16156109d75760405162461bcd60e51b81526004016108e69061302b565b6001600160a01b038116600090815260076020526040808220805460ff19169055517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590610a26908490612b55565b60405180910390a250565b60095490565b6000610a44848484611ad8565b6001600160a01b038416600090815260036020526040812081610a65611a20565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610aa85760405162461bcd60e51b81526004016108e6906130ad565b610abc85610ab4611a20565b858403611a24565b60019150505b9392505050565b610ad1611a20565b6001600160a01b0316610ae2611277565b6001600160a01b031614610b085760405162461bcd60e51b81526004016108e6906130f5565b61271081600954610b1991906134be565b610b239190613387565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b5691613290565b60405180910390a150565b6000600a54821115610b855760405162461bcd60e51b81526004016108e690612cfd565b6000610b8f611e19565b9050610b9b8184613387565b9150505b919050565b600990565b610bb1611a20565b6001600160a01b0316610bc2611277565b6001600160a01b031614610be85760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526005602052604090205460ff16610c205760405162461bcd60e51b81526004016108e690612f88565b60005b600854811015610d7a57816001600160a01b031660088281548110610c5857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d685760088054610c8390600190613506565b81548110610ca157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610cdb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610d4157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610d7a565b80610d728161351d565b915050610c23565b5050565b6000610955610d8b611a20565b848460036000610d99611a20565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610dcd919061334a565b611a24565b60076020526000908152604090205460ff1681565b610def611a20565b6001600160a01b0316610e00611277565b6001600160a01b031614610e265760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610e6e5760405162461bcd60e51b81526004016108e690613076565b81610e8a576000610e80846001611e3c565b5191506109599050565b6000610e97846001611e3c565b6020015191506109599050565b601354600160a01b900460ff1681565b610ebc611a20565b6001600160a01b0316610ecd611277565b6001600160a01b031614610ef35760405162461bcd60e51b81526004016108e6906130f5565b6015805460ff191660ff8581169190911761ff001916610100858316021762ff000019166201000091841691909102179055610f2f8183613362565b6015805460ff9290921663010000000263ff00000019909216919091179055505050565b610f5b611a20565b6001600160a01b0316610f6c611277565b6001600160a01b031614610f925760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526005602052604090205460ff1615610fcb5760405162461bcd60e51b81526004016108e690612ea2565b6001600160a01b03811660009081526001602052604090205415611025576001600160a01b03811660009081526001602052604090205461100b90610b61565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561110757506001600160a01b038116600090815260026020526040902054610b9f565b6001600160a01b03821660009081526001602052604090205461095990610b61565b60165460ff808216916101008104821691620100008204811691630100000090041684565b611156611a20565b6001600160a01b0316611167611277565b6001600160a01b03161461118d5760405162461bcd60e51b81526004016108e6906130f5565b6111976000611e7a565b565b60155460ff808216916101008104821691620100008204811691630100000090041684565b60116020526000908152604090205460ff1681565b6111db611a20565b6001600160a01b03166111ec611277565b6001600160a01b0316146112125760405162461bcd60e51b81526004016108e6906130f5565b6127108260095461122391906134be565b61122d9190613387565b600b55600954612710906112429083906134be565b61124c9190613387565b600c555050565b6001600160a01b031660009081526005602052604090205460ff1690565b600e5481565b6000546001600160a01b031690565b61128e611a20565b6001600160a01b031661129f611277565b6001600160a01b0316146112c55760405162461bcd60e51b81526004016108e6906130f5565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6112ef611a20565b6001600160a01b0316611300611277565b6001600160a01b0316146113265760405162461bcd60e51b81526004016108e6906130f5565b611197611332306110c7565b611eca565b604080518082019091526008815267414c414444494e5560c01b602082015290565b611361611a20565b6001600160a01b0316611372611277565b6001600160a01b0316146113985760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156113d75760405162461bcd60e51b81526004016108e690612dcf565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611464576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29061145b908590612b55565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60185460195482565b600080600360006114b8611a20565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156115045760405162461bcd60e51b81526004016108e69061324b565b61151861150f611a20565b85858403611a24565b5060019392505050565b6010546001600160a01b031681565b600061095561153e611a20565b8484611ad8565b600d5481565b611553611a20565b6001600160a01b0316611564611277565b6001600160a01b03161461158a5760405162461bcd60e51b81526004016108e6906130f5565b60005b828110156116f057811515600660008686858181106115bc57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115d191906128ea565b6001600160a01b0316815260208101919091526040016000205460ff161515141561160e5760405162461bcd60e51b81526004016108e690612c45565b816006600086868581811061163357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061164891906128ea565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106116b457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116c991906128ea565b6040516116d69190612b55565b60405180910390a2806116e88161351d565b91505061158d565b50505050565b6116fe611a20565b6001600160a01b031661170f611277565b6001600160a01b0316146117355760405162461bcd60e51b81526004016108e6906130f5565b6013805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b56908390612ba4565b6013546001600160a01b031681565b60145481565b611799611a20565b6001600160a01b03166117aa611277565b6001600160a01b0316146117d05760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561180f5760405162461bcd60e51b81526004016108e690612ed9565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611867908590612b55565b60405180910390a25050565b600c5481565b600b5481565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6118b8611a20565b6001600160a01b03166118c9611277565b6001600160a01b0316146118ef5760405162461bcd60e51b81526004016108e6906130f5565b6016805460ff191660ff8581169190911761ff001916610100858316021762ff00001916620100009184169190910217905561192b8183613362565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b611957611a20565b6001600160a01b0316611968611277565b6001600160a01b03161461198e5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6119b7611a20565b6001600160a01b03166119c8611277565b6001600160a01b0316146119ee5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b038116611a145760405162461bcd60e51b81526004016108e690612d47565b611a1d81611e7a565b50565b3390565b6001600160a01b038316611a4a5760405162461bcd60e51b81526004016108e690613207565b6001600160a01b038216611a705760405162461bcd60e51b81526004016108e690612d8d565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611acb908590613290565b60405180910390a3505050565b600e54158015611b0057506001600160a01b03821660009081526011602052604090205460ff165b15611b0a5743600e555b6001600160a01b038316611b305760405162461bcd60e51b81526004016108e6906131c2565b6001600160a01b038216611b565760405162461bcd60e51b81526004016108e690612c02565b6001600160a01b03831660009081526007602052604090205460ff1615611b8f5760405162461bcd60e51b81526004016108e690612ff6565b60008111611baf5760405162461bcd60e51b81526004016108e69061312a565b611bb8836110c7565b811115611bd75760405162461bcd60e51b81526004016108e690612cac565b6001600160a01b03831660009081526004602052604081205460ff1680611c1657506001600160a01b03831660009081526004602052604090205460ff165b1590508015611da6576001600160a01b03841660009081526011602052604090205460ff1615611d3157600f54600e54611c50919061334a565b431015611cb7576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611cae908690612b55565b60405180910390a25b6015546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600b54821115611d2c5760405162461bcd60e51b81526004016108e690612e6d565b611da6565b6016546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600c54821115611da65760405162461bcd60e51b81526004016108e690612e2c565b601454611db2306110c7565b10158015611dc3575060125460ff16155b8015611de857506001600160a01b03841660009081526011602052604090205460ff16155b8015611dfd5750601354600160a01b900460ff165b15611e0d57611e0d601454611eca565b6116f084848484611fb4565b6000806000611e266121e6565b9092509050611e358183613387565b9250505090565b611e4461288c565b611e4e83836123a4565b9050611e63818484611e5e611e19565b61242e565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff19166001179055601754600090611ef2906301000000900460ff1660026134dd565b60175460ff91821692506000918391611f13916201000090910416856134be565b611f1d9190613387565b90506000611f2b8285613506565b905047611f3782612499565b6000611f438247613506565b601754909150600090611f5f9062010000900460ff1687613506565b601754611f759062010000900460ff16846134be565b611f7f9190613387565b9050611f8b8582612668565b601054611fa1906001600160a01b031647612740565b50506012805460ff191690555050505050565b6000611fc08383611e3c565b6001600160a01b03861660009081526005602052604090205490915060ff1615612012576001600160a01b0385166000908152600260205260408120805485929061200c908490613506565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156120665760808101516001600160a01b0385166000908152600260205260408120805490919061206090849061334a565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612090908490613506565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916120c490849061334a565b90915550508115612143576120e181604001518260a001516127e1565b6120f381606001518260c00151612816565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161213a9190613290565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806121745750600d54612171856110c7565b11155b6121905760405162461bcd60e51b81526004016108e690613173565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516121d79190613290565b60405180910390a35050505050565b600a546009546000918291825b6008548110156123715782600160006008848154811061222357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229c575081600260006008848154811061227557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b357600a54600954945094505050506123a0565b60016000600883815481106122d857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546123079084613506565b9250600260006008838154811061232e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461235d9083613506565b9150806123698161351d565b9150506121f3565b50600954600a546123829190613387565b82101561239a57600a546009549350935050506123a0565b90925090505b9091565b6123ac61288c565b816123bd5760808101839052610959565b6017546064906123d09060ff16856134be565b6123da9190613387565b60a08201526017546064906123f9906301000000900460ff16856134be565b6124039190613387565b60c0820181905260a08201516124199085613506565b6124239190613506565b608082015292915050565b600080808061243d85886134be565b9350856124525750829150600090508061248e565b848860a0015161246291906134be565b9150848860c0015161247491906134be565b9050806124818386613506565b61248b9190613506565b92505b945094509450949050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124dc57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561254a57600080fd5b505afa15801561255e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125829190612906565b816001815181106125a357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125483916125d091309161010090910416611885565b10156125f5576012546125f590309061010090046001600160a01b0316600019611a24565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612632908590600090869030904290600401613299565b600060405180830381600087803b15801561264c57600080fd5b505af1158015612660573d6000803e3d6000fd5b505050505050565b60125461010090046001600160a01b031663f305d71982308560008061268c611277565b426040518863ffffffff1660e01b81526004016126ae96959493929190612b69565b6060604051808303818588803b1580156126c757600080fd5b505af11580156126db573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127009190612aec565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051612734929190613309565b60405180910390a15050565b804710156127605760405162461bcd60e51b81526004016108e690612fbf565b6000826001600160a01b03168260405161277990612b52565b60006040518083038185875af1925050503d80600081146127b6576040519150601f19603f3d011682016040523d82523d6000602084013e6127bb565b606091505b50509050806127dc5760405162461bcd60e51b81526004016108e690612f2b565b505050565b81600a60008282546127f39190613506565b90915550506018805482919060009061280d90849061334a565b90915550505050565b306000908152600160205260408120805484929061283590849061334a565b90915550503060009081526005602052604090205460ff161561287757306000908152600260205260408120805483929061287190849061334a565b90915550505b806018600101600082825461280d919061334a565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80358015158114610b9f57600080fd5b803560ff81168114610b9f57600080fd5b6000602082840312156128fb578081fd5b8135610ac28161354e565b600060208284031215612917578081fd5b8151610ac28161354e565b60008060408385031215612934578081fd5b823561293f8161354e565b9150602083013561294f8161354e565b809150509250929050565b60008060006060848603121561296e578081fd5b83356129798161354e565b925060208401356129898161354e565b929592945050506040919091013590565b600080604083850312156129ac578182fd5b82356129b78161354e565b91506129c5602084016128c9565b90509250929050565b600080604083850312156129e0578182fd5b82356129eb8161354e565b946020939093013593505050565b600080600060408486031215612a0d578283fd5b833567ffffffffffffffff80821115612a24578485fd5b818601915086601f830112612a37578485fd5b813581811115612a45578586fd5b8760208083028501011115612a58578586fd5b602092830195509350612a6e91860190506128c9565b90509250925092565b600060208284031215612a88578081fd5b610ac2826128c9565b600060208284031215612aa2578081fd5b5035919050565b60008060408385031215612abb578182fd5b823591506129c5602084016128c9565b60008060408385031215612add578182fd5b50508035926020909101359150565b600080600060608486031215612b00578283fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215612b2d578283fd5b612b36846128d9565b9250612b44602085016128d9565b9150612a6e604085016128d9565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612bdb57858101830151858201604001528201612bbf565b81811115612bec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526041908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960408201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656060820152601d60fa1b608082015260a00190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252602b908201527f616464726573732070726f766964656420697320616c7265616479206e6f742060408201526a189b1858dadb1a5cdd195960aa1b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132e85784516001600160a01b0316835293830193918301916001016132c3565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff948516815292841660208401529083166040830152909116606082015260800190565b6000821982111561335d5761335d613538565b500190565b600060ff821660ff84168060ff0382111561337f5761337f613538565b019392505050565b6000826133a257634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116133b957506133e4565b8187048211156133cb576133cb613538565b808616156133d857918102915b9490941c9380026133aa565b94509492505050565b6000610ac260001960ff85168460008261340957506001610ac2565b8161341657506000610ac2565b816001811461342c576002811461343657613463565b6001915050610ac2565b60ff84111561344757613447613538565b6001841b91508482111561345d5761345d613538565b50610ac2565b5060208310610133831016604e8410600b8410161715613496575081810a8381111561349157613491613538565b610ac2565b6134a384848460016133a7565b8086048211156134b5576134b5613538565b02949350505050565b60008160001904831182151516156134d8576134d8613538565b500290565b600060ff821660ff84168160ff04811182151516156134fe576134fe613538565b029392505050565b60008282101561351857613518613538565b500390565b600060001982141561353157613531613538565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a1d57600080fdfea2646970667358221220e4292862330b4f161c33c520f303ede3cf71a0e76206da5a46c8cb1e0457977264736f6c63430008000033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806379eb8d1d11610175578063aa4bde28116100dc578063d44e586e11610095578063dd62ed3e1161006f578063dd62ed3e14610827578063e22b62de14610847578063ea2f0b3714610867578063f2fde38b14610887576102d4565b8063d44e586e146107e8578063d6c180bf146107fd578063d8dcac4f14610812576102d4565b8063aa4bde2814610749578063bd94545b1461075e578063c49b9a801461077e578063c816841b1461079e578063d12a7688146107b3578063d2fcc001146107c8576102d4565b806395d89b411161012e57806395d89b411461069c5780639a7a23d6146106b15780639ba5e4d5146106d1578063a457c2d7146106f4578063a5ece94114610714578063a9059cbb14610729576102d4565b806379eb8d1d146105fd57806388f820201461061d5780638a0eef5a1461063d5780638da5cb5b14610652578063906e9dd014610667578063958b0f2014610687576102d4565b80633bbac579116102345780635342acb4116101ed578063713898cd116101c7578063713898cd1461058e578063715018a6146105b357806373cafdc2146105c85780637949a403146105dd576102d4565b80635342acb41461052e5780636dd3d39f1461054e57806370a082311461056e576102d4565b80633bbac57914610479578063437823ec146104995780634549b039146104b95780634a74bb02146104d957806350be7cdb146104ee57806352390c021461050e576102d4565b806323b872dd1161028657806323b872dd146103b757806327a14fc2146103d75780632d838119146103f7578063313ce567146104175780633685d419146104395780633950935114610459576102d4565b806304679780146102d9578063055add0d146102fb57806306fdde0314610326578063095ea7b31461034857806315952f541461037557806318160ddd14610395576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612a91565b6108a7565b005b34801561030757600080fd5b5061031061090b565b60405161031d9190612b55565b60405180910390f35b34801561033257600080fd5b5061033b61091f565b60405161031d9190612baf565b34801561035457600080fd5b506103686103633660046129ce565b610941565b60405161031d9190612ba4565b34801561038157600080fd5b506102f96103903660046128ea565b61095f565b3480156103a157600080fd5b506103aa610a31565b60405161031d9190613290565b3480156103c357600080fd5b506103686103d236600461295a565b610a37565b3480156103e357600080fd5b506102f96103f2366004612a91565b610ac9565b34801561040357600080fd5b506103aa610412366004612a91565b610b61565b34801561042357600080fd5b5061042c610ba4565b60405161031d9190613317565b34801561044557600080fd5b506102f96104543660046128ea565b610ba9565b34801561046557600080fd5b506103686104743660046129ce565b610d7e565b34801561048557600080fd5b506103686104943660046128ea565b610dd2565b3480156104a557600080fd5b506102f96104b43660046128ea565b610de7565b3480156104c557600080fd5b506103aa6104d4366004612aa9565b610e4a565b3480156104e557600080fd5b50610368610ea4565b3480156104fa57600080fd5b506102f9610509366004612b19565b610eb4565b34801561051a57600080fd5b506102f96105293660046128ea565b610f53565b34801561053a57600080fd5b506103686105493660046128ea565b61108b565b34801561055a57600080fd5b506103686105693660046128ea565b6110a9565b34801561057a57600080fd5b506103aa6105893660046128ea565b6110c7565b34801561059a57600080fd5b506105a3611129565b60405161031d9493929190613325565b3480156105bf57600080fd5b506102f961114e565b3480156105d457600080fd5b506105a3611199565b3480156105e957600080fd5b506103686105f83660046128ea565b6111be565b34801561060957600080fd5b506102f9610618366004612acb565b6111d3565b34801561062957600080fd5b506103686106383660046128ea565b611253565b34801561064957600080fd5b506103aa611271565b34801561065e57600080fd5b50610310611277565b34801561067357600080fd5b506102f96106823660046128ea565b611286565b34801561069357600080fd5b506102f96112e7565b3480156106a857600080fd5b5061033b611337565b3480156106bd57600080fd5b506102f96106cc36600461299a565b611359565b3480156106dd57600080fd5b506106e66114a0565b60405161031d929190613309565b34801561070057600080fd5b5061036861070f3660046129ce565b6114a9565b34801561072057600080fd5b50610310611522565b34801561073557600080fd5b506103686107443660046129ce565b611531565b34801561075557600080fd5b506103aa611545565b34801561076a57600080fd5b506102f96107793660046129f9565b61154b565b34801561078a57600080fd5b506102f9610799366004612a77565b6116f6565b3480156107aa57600080fd5b5061031061177c565b3480156107bf57600080fd5b506103aa61178b565b3480156107d457600080fd5b506102f96107e336600461299a565b611791565b3480156107f457600080fd5b506103aa611873565b34801561080957600080fd5b506103aa611879565b34801561081e57600080fd5b506103aa61187f565b34801561083357600080fd5b506103aa610842366004612922565b611885565b34801561085357600080fd5b506102f9610862366004612b19565b6118b0565b34801561087357600080fd5b506102f96108823660046128ea565b61194f565b34801561089357600080fd5b506102f96108a23660046128ea565b6119af565b6108af611a20565b6001600160a01b03166108c0611277565b6001600160a01b0316146108ef5760405162461bcd60e51b81526004016108e6906130f5565b60405180910390fd5b6108fb6009600a6133ed565b61090590826134be565b60145550565b60125461010090046001600160a01b031681565b604080518082019091526008815267416c616464696e7560c01b602082015290565b600061095561094e611a20565b8484611a24565b5060015b92915050565b610967611a20565b6001600160a01b0316610978611277565b6001600160a01b03161461099e5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526007602052604090205460ff16156109d75760405162461bcd60e51b81526004016108e69061302b565b6001600160a01b038116600090815260076020526040808220805460ff19169055517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590610a26908490612b55565b60405180910390a250565b60095490565b6000610a44848484611ad8565b6001600160a01b038416600090815260036020526040812081610a65611a20565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610aa85760405162461bcd60e51b81526004016108e6906130ad565b610abc85610ab4611a20565b858403611a24565b60019150505b9392505050565b610ad1611a20565b6001600160a01b0316610ae2611277565b6001600160a01b031614610b085760405162461bcd60e51b81526004016108e6906130f5565b61271081600954610b1991906134be565b610b239190613387565b600d8190556040517f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00191610b5691613290565b60405180910390a150565b6000600a54821115610b855760405162461bcd60e51b81526004016108e690612cfd565b6000610b8f611e19565b9050610b9b8184613387565b9150505b919050565b600990565b610bb1611a20565b6001600160a01b0316610bc2611277565b6001600160a01b031614610be85760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526005602052604090205460ff16610c205760405162461bcd60e51b81526004016108e690612f88565b60005b600854811015610d7a57816001600160a01b031660088281548110610c5857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610d685760088054610c8390600190613506565b81548110610ca157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610cdb57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610d4157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610d7a565b80610d728161351d565b915050610c23565b5050565b6000610955610d8b611a20565b848460036000610d99611a20565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610dcd919061334a565b611a24565b60076020526000908152604090205460ff1681565b610def611a20565b6001600160a01b0316610e00611277565b6001600160a01b031614610e265760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000600954831115610e6e5760405162461bcd60e51b81526004016108e690613076565b81610e8a576000610e80846001611e3c565b5191506109599050565b6000610e97846001611e3c565b6020015191506109599050565b601354600160a01b900460ff1681565b610ebc611a20565b6001600160a01b0316610ecd611277565b6001600160a01b031614610ef35760405162461bcd60e51b81526004016108e6906130f5565b6015805460ff191660ff8581169190911761ff001916610100858316021762ff000019166201000091841691909102179055610f2f8183613362565b6015805460ff9290921663010000000263ff00000019909216919091179055505050565b610f5b611a20565b6001600160a01b0316610f6c611277565b6001600160a01b031614610f925760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03811660009081526005602052604090205460ff1615610fcb5760405162461bcd60e51b81526004016108e690612ea2565b6001600160a01b03811660009081526001602052604090205415611025576001600160a01b03811660009081526001602052604090205461100b90610b61565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03811660009081526005602052604081205460ff161561110757506001600160a01b038116600090815260026020526040902054610b9f565b6001600160a01b03821660009081526001602052604090205461095990610b61565b60165460ff808216916101008104821691620100008204811691630100000090041684565b611156611a20565b6001600160a01b0316611167611277565b6001600160a01b03161461118d5760405162461bcd60e51b81526004016108e6906130f5565b6111976000611e7a565b565b60155460ff808216916101008104821691620100008204811691630100000090041684565b60116020526000908152604090205460ff1681565b6111db611a20565b6001600160a01b03166111ec611277565b6001600160a01b0316146112125760405162461bcd60e51b81526004016108e6906130f5565b6127108260095461122391906134be565b61122d9190613387565b600b55600954612710906112429083906134be565b61124c9190613387565b600c555050565b6001600160a01b031660009081526005602052604090205460ff1690565b600e5481565b6000546001600160a01b031690565b61128e611a20565b6001600160a01b031661129f611277565b6001600160a01b0316146112c55760405162461bcd60e51b81526004016108e6906130f5565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6112ef611a20565b6001600160a01b0316611300611277565b6001600160a01b0316146113265760405162461bcd60e51b81526004016108e6906130f5565b611197611332306110c7565b611eca565b604080518082019091526008815267414c414444494e5560c01b602082015290565b611361611a20565b6001600160a01b0316611372611277565b6001600160a01b0316146113985760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03821660009081526011602052604090205460ff16151581151514156113d75760405162461bcd60e51b81526004016108e690612dcf565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155611464576001600160a01b03821660009081526006602052604090819020805460ff1916600117905551811515907f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b29061145b908590612b55565b60405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60185460195482565b600080600360006114b8611a20565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156115045760405162461bcd60e51b81526004016108e69061324b565b61151861150f611a20565b85858403611a24565b5060019392505050565b6010546001600160a01b031681565b600061095561153e611a20565b8484611ad8565b600d5481565b611553611a20565b6001600160a01b0316611564611277565b6001600160a01b03161461158a5760405162461bcd60e51b81526004016108e6906130f5565b60005b828110156116f057811515600660008686858181106115bc57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906115d191906128ea565b6001600160a01b0316815260208101919091526040016000205460ff161515141561160e5760405162461bcd60e51b81526004016108e690612c45565b816006600086868581811061163357634e487b7160e01b600052603260045260246000fd5b905060200201602081019061164891906128ea565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558115157f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b28585848181106116b457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116c991906128ea565b6040516116d69190612b55565b60405180910390a2806116e88161351d565b91505061158d565b50505050565b6116fe611a20565b6001600160a01b031661170f611277565b6001600160a01b0316146117355760405162461bcd60e51b81526004016108e6906130f5565b6013805460ff60a01b1916600160a01b831515021790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610b56908390612ba4565b6013546001600160a01b031681565b60145481565b611799611a20565b6001600160a01b03166117aa611277565b6001600160a01b0316146117d05760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03821660009081526006602052604090205460ff161515811515141561180f5760405162461bcd60e51b81526004016108e690612ed9565b6001600160a01b03821660009081526006602052604090819020805460ff191683151590811790915590517f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b290611867908590612b55565b60405180910390a25050565b600c5481565b600b5481565b600f5481565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6118b8611a20565b6001600160a01b03166118c9611277565b6001600160a01b0316146118ef5760405162461bcd60e51b81526004016108e6906130f5565b6016805460ff191660ff8581169190911761ff001916610100858316021762ff00001916620100009184169190910217905561192b8183613362565b6016805460ff9290921663010000000263ff00000019909216919091179055505050565b611957611a20565b6001600160a01b0316611968611277565b6001600160a01b03161461198e5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6119b7611a20565b6001600160a01b03166119c8611277565b6001600160a01b0316146119ee5760405162461bcd60e51b81526004016108e6906130f5565b6001600160a01b038116611a145760405162461bcd60e51b81526004016108e690612d47565b611a1d81611e7a565b50565b3390565b6001600160a01b038316611a4a5760405162461bcd60e51b81526004016108e690613207565b6001600160a01b038216611a705760405162461bcd60e51b81526004016108e690612d8d565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611acb908590613290565b60405180910390a3505050565b600e54158015611b0057506001600160a01b03821660009081526011602052604090205460ff165b15611b0a5743600e555b6001600160a01b038316611b305760405162461bcd60e51b81526004016108e6906131c2565b6001600160a01b038216611b565760405162461bcd60e51b81526004016108e690612c02565b6001600160a01b03831660009081526007602052604090205460ff1615611b8f5760405162461bcd60e51b81526004016108e690612ff6565b60008111611baf5760405162461bcd60e51b81526004016108e69061312a565b611bb8836110c7565b811115611bd75760405162461bcd60e51b81526004016108e690612cac565b6001600160a01b03831660009081526004602052604081205460ff1680611c1657506001600160a01b03831660009081526004602052604090205460ff165b1590508015611da6576001600160a01b03841660009081526011602052604090205460ff1615611d3157600f54600e54611c50919061334a565b431015611cb7576001600160a01b03831660009081526007602052604090819020805460ff1916600190811790915590517f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b2590611cae908690612b55565b60405180910390a25b6015546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600b54821115611d2c5760405162461bcd60e51b81526004016108e690612e6d565b611da6565b6016546017805460ff80841660ff199092169190911761ff0019166101008085048316021762ff00001916620100008085048316021763ff000000191663010000009384900491909116909202919091179055600c54821115611da65760405162461bcd60e51b81526004016108e690612e2c565b601454611db2306110c7565b10158015611dc3575060125460ff16155b8015611de857506001600160a01b03841660009081526011602052604090205460ff16155b8015611dfd5750601354600160a01b900460ff165b15611e0d57611e0d601454611eca565b6116f084848484611fb4565b6000806000611e266121e6565b9092509050611e358183613387565b9250505090565b611e4461288c565b611e4e83836123a4565b9050611e63818484611e5e611e19565b61242e565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff19166001179055601754600090611ef2906301000000900460ff1660026134dd565b60175460ff91821692506000918391611f13916201000090910416856134be565b611f1d9190613387565b90506000611f2b8285613506565b905047611f3782612499565b6000611f438247613506565b601754909150600090611f5f9062010000900460ff1687613506565b601754611f759062010000900460ff16846134be565b611f7f9190613387565b9050611f8b8582612668565b601054611fa1906001600160a01b031647612740565b50506012805460ff191690555050505050565b6000611fc08383611e3c565b6001600160a01b03861660009081526005602052604090205490915060ff1615612012576001600160a01b0385166000908152600260205260408120805485929061200c908490613506565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156120665760808101516001600160a01b0385166000908152600260205260408120805490919061206090849061334a565b90915550505b80516001600160a01b03861660009081526001602052604081208054909190612090908490613506565b90915550506020808201516001600160a01b03861660009081526001909252604082208054919290916120c490849061334a565b90915550508115612143576120e181604001518260a001516127e1565b6120f381606001518260c00151612816565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161213a9190613290565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806121745750600d54612171856110c7565b11155b6121905760405162461bcd60e51b81526004016108e690613173565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516121d79190613290565b60405180910390a35050505050565b600a546009546000918291825b6008548110156123715782600160006008848154811061222357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061229c575081600260006008848154811061227557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122b357600a54600954945094505050506123a0565b60016000600883815481106122d857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546123079084613506565b9250600260006008838154811061232e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461235d9083613506565b9150806123698161351d565b9150506121f3565b50600954600a546123829190613387565b82101561239a57600a546009549350935050506123a0565b90925090505b9091565b6123ac61288c565b816123bd5760808101839052610959565b6017546064906123d09060ff16856134be565b6123da9190613387565b60a08201526017546064906123f9906301000000900460ff16856134be565b6124039190613387565b60c0820181905260a08201516124199085613506565b6124239190613506565b608082015292915050565b600080808061243d85886134be565b9350856124525750829150600090508061248e565b848860a0015161246291906134be565b9150848860c0015161247491906134be565b9050806124818386613506565b61248b9190613506565b92505b945094509450949050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124dc57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601260019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561254a57600080fd5b505afa15801561255e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125829190612906565b816001815181106125a357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125483916125d091309161010090910416611885565b10156125f5576012546125f590309061010090046001600160a01b0316600019611a24565b60125460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790612632908590600090869030904290600401613299565b600060405180830381600087803b15801561264c57600080fd5b505af1158015612660573d6000803e3d6000fd5b505050505050565b60125461010090046001600160a01b031663f305d71982308560008061268c611277565b426040518863ffffffff1660e01b81526004016126ae96959493929190612b69565b6060604051808303818588803b1580156126c757600080fd5b505af11580156126db573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127009190612aec565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051612734929190613309565b60405180910390a15050565b804710156127605760405162461bcd60e51b81526004016108e690612fbf565b6000826001600160a01b03168260405161277990612b52565b60006040518083038185875af1925050503d80600081146127b6576040519150601f19603f3d011682016040523d82523d6000602084013e6127bb565b606091505b50509050806127dc5760405162461bcd60e51b81526004016108e690612f2b565b505050565b81600a60008282546127f39190613506565b90915550506018805482919060009061280d90849061334a565b90915550505050565b306000908152600160205260408120805484929061283590849061334a565b90915550503060009081526005602052604090205460ff161561287757306000908152600260205260408120805483929061287190849061334a565b90915550505b806018600101600082825461280d919061334a565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80358015158114610b9f57600080fd5b803560ff81168114610b9f57600080fd5b6000602082840312156128fb578081fd5b8135610ac28161354e565b600060208284031215612917578081fd5b8151610ac28161354e565b60008060408385031215612934578081fd5b823561293f8161354e565b9150602083013561294f8161354e565b809150509250929050565b60008060006060848603121561296e578081fd5b83356129798161354e565b925060208401356129898161354e565b929592945050506040919091013590565b600080604083850312156129ac578182fd5b82356129b78161354e565b91506129c5602084016128c9565b90509250929050565b600080604083850312156129e0578182fd5b82356129eb8161354e565b946020939093013593505050565b600080600060408486031215612a0d578283fd5b833567ffffffffffffffff80821115612a24578485fd5b818601915086601f830112612a37578485fd5b813581811115612a45578586fd5b8760208083028501011115612a58578586fd5b602092830195509350612a6e91860190506128c9565b90509250925092565b600060208284031215612a88578081fd5b610ac2826128c9565b600060208284031215612aa2578081fd5b5035919050565b60008060408385031215612abb578182fd5b823591506129c5602084016128c9565b60008060408385031215612add578182fd5b50508035926020909101359150565b600080600060608486031215612b00578283fd5b8351925060208401519150604084015190509250925092565b600080600060608486031215612b2d578283fd5b612b36846128d9565b9250612b44602085016128d9565b9150612a6e604085016128d9565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612bdb57858101830151858201604001528201612bbf565b81811115612bec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526041908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c726561647960408201527f2073657420746f20746861742076616c756520666f72206f6e652077616c6c656060820152601d60fa1b608082015260a00190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160408201527f6c72656164792073657420746f20746861742076616c75650000000000000000606082015260800190565b60208082526021908201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6040820152601b60fa1b606082015260800190565b6020808252818101527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e74427579604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526032908201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796040820152712073657420746f20746861742076616c756560701b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252818101527f45524332303a206164647265737320626c61636b6c69737465642028626f7429604082015260600190565b6020808252602b908201527f616464726573732070726f766964656420697320616c7265616479206e6f742060408201526a189b1858dadb1a5cdd195960aa1b606082015260800190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252602f908201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060408201526e1b585e15d85b1b195d105b5bdd5b9d608a1b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132e85784516001600160a01b0316835293830193918301916001016132c3565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60ff91909116815260200190565b60ff948516815292841660208401529083166040830152909116606082015260800190565b6000821982111561335d5761335d613538565b500190565b600060ff821660ff84168060ff0382111561337f5761337f613538565b019392505050565b6000826133a257634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116133b957506133e4565b8187048211156133cb576133cb613538565b808616156133d857918102915b9490941c9380026133aa565b94509492505050565b6000610ac260001960ff85168460008261340957506001610ac2565b8161341657506000610ac2565b816001811461342c576002811461343657613463565b6001915050610ac2565b60ff84111561344757613447613538565b6001841b91508482111561345d5761345d613538565b50610ac2565b5060208310610133831016604e8410600b8410161715613496575081810a8381111561349157613491613538565b610ac2565b6134a384848460016133a7565b8086048211156134b5576134b5613538565b02949350505050565b60008160001904831182151516156134d8576134d8613538565b500290565b600060ff821660ff84168160ff04811182151516156134fe576134fe613538565b029392505050565b60008282101561351857613518613538565b500390565b600060001982141561353157613531613538565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611a1d57600080fdfea2646970667358221220e4292862330b4f161c33c520f303ede3cf71a0e76206da5a46c8cb1e0457977264736f6c63430008000033

Deployed Bytecode Sourcemap

1038:19052:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18654:156;;;;;;;;;;-1:-1:-1;18654:156:1;;;;;:::i;:::-;;:::i;:::-;;2304:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4949:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5880:161::-;;;;;;;;;;-1:-1:-1;5880:161:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19300:242::-;;;;;;;;;;-1:-1:-1;19300:242:1;;;;;:::i;:::-;;:::i;5245:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6049:450::-;;;;;;;;;;-1:-1:-1;6049:450:1;;;;;:::i;:::-;;:::i;19550:207::-;;;;;;;;;;-1:-1:-1;19550:207:1;;;;;:::i;:::-;;:::i;7743:248::-;;;;;;;;;;-1:-1:-1;7743:248:1;;;;;:::i;:::-;;:::i;5131:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8408:475::-;;;;;;;;;;-1:-1:-1;8408:475:1;;;;;:::i;:::-;;:::i;6507:213::-;;;;;;;;;;-1:-1:-1;6507:213:1;;;;;:::i;:::-;;:::i;1491:38::-;;;;;;;;;;-1:-1:-1;1491:38:1;;;;;:::i;:::-;;:::i;8891:113::-;;;;;;;;;;-1:-1:-1;8891:113:1;;;;;:::i;:::-;;:::i;7277:456::-;;;;;;;;;;-1:-1:-1;7277:456:1;;;;;:::i;:::-;;:::i;2385:40::-;;;;;;;;;;;;;:::i;17904:231::-;;;;;;;;;;-1:-1:-1;17904:231:1;;;;;:::i;:::-;;:::i;8065:335::-;;;;;;;;;;-1:-1:-1;8065:335:1;;;;;:::i;:::-;;:::i;9594:123::-;;;;;;;;;;-1:-1:-1;9594:123:1;;;;;:::i;:::-;;:::i;9723:135::-;;;;;;;;;;-1:-1:-1;9723:135:1;;;;;:::i;:::-;;:::i;5348:198::-;;;;;;;;;;-1:-1:-1;5348:198:1;;;;;:::i;:::-;;:::i;2773:142::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;1650:94:7:-;;;;;;;;;;;;;:::i;2621:143:1:-;;;;;;;;;;;;;:::i;2096:59::-;;;;;;;;;;-1:-1:-1;2096:59:1;;;;;:::i;:::-;;:::i;18387:255::-;;;;;;;;;;-1:-1:-1;18387:255:1;;;;;:::i;:::-;;:::i;7149:120::-;;;;;;;;;;-1:-1:-1;7149:120:1;;;;;:::i;:::-;;:::i;1967:34::-;;;;;;;;;;;;;:::i;999:87:7:-;;;;;;;;;;;;;:::i;18818:143:1:-;;;;;;;;;;-1:-1:-1;18818:143:1;;;;;:::i;:::-;;:::i;18969:120::-;;;;;;;;;;;;;:::i;5038:87::-;;;;;;;;;;;;;:::i;17433:463::-;;;;;;;;;;-1:-1:-1;17433:463:1;;;;;:::i;:::-;;:::i;3064:36::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;6728:413::-;;;;;;;;;;-1:-1:-1;6728:413:1;;;;;:::i;:::-;;:::i;2048:39::-;;;;;;;;;;;;;:::i;5554:167::-;;;;;;;;;;-1:-1:-1;5554:167:1;;;;;:::i;:::-;;:::i;1890:44::-;;;;;;;;;;;;;:::i;9016:450::-;;;;;;;;;;-1:-1:-1;9016:450:1;;;;;:::i;:::-;;:::i;9866:167::-;;;;;;;;;;-1:-1:-1;9866:167:1;;;;;:::i;:::-;;:::i;2352:26::-;;;;;;;;;;;;;:::i;2432:58::-;;;;;;;;;;;;;:::i;19765:320::-;;;;;;;;;;-1:-1:-1;19765:320:1;;;;;:::i;:::-;;:::i;1838:44::-;;;;;;;;;;;;;:::i;1787:43::-;;;;;;;;;;;;;:::i;2008:31::-;;;;;;;;;;;;;:::i;5729:143::-;;;;;;;;;;-1:-1:-1;5729:143:1;;;;;:::i;:::-;;:::i;18143:236::-;;;;;;;;;;-1:-1:-1;18143:236:1;;;;;:::i;:::-;;:::i;9474:112::-;;;;;;;;;;-1:-1:-1;9474:112:1;;;;;:::i;:::-;;:::i;1899:192:7:-;;;;;;;;;;-1:-1:-1;1899:192:7;;;;;:::i;:::-;;:::i;18654:156:1:-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;;;;;;;;;18789:13:1::1;1609:1;18789:2;:13;:::i;:::-;18776:26;::::0;:12;:26:::1;:::i;:::-;18744:29;:58:::0;-1:-1:-1;18654:156:1:o;2304:41::-;;;;;;-1:-1:-1;;;;;2304:41:1;;:::o;4949:83::-;5019:5;;;;;;;;;;;;-1:-1:-1;;;5019:5:1;;;;4949:83;:::o;5880:161::-;5955:4;5972:39;5981:12;:10;:12::i;:::-;5995:7;6004:6;5972:8;:39::i;:::-;-1:-1:-1;6029:4:1;5880:161;;;;;:::o;19300:242::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;19384:17:1;::::1;;::::0;;;:5:::1;:17;::::0;;;;;::::1;;19383:18;19375:74;;;;-1:-1:-1::0;;;19375:74:1::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19460:17:1;::::1;19480:5;19460:17:::0;;;:5:::1;:17;::::0;;;;;:25;;-1:-1:-1;;19460:25:1::1;::::0;;19501:33;::::1;::::0;::::1;::::0;19466:10;;19501:33:::1;:::i;:::-;;;;;;;;19300:242:::0;:::o;5245:95::-;5325:7;;5245:95;:::o;6049:450::-;6147:4;6164:36;6174:6;6182:9;6193:6;6164:9;:36::i;:::-;-1:-1:-1;;;;;6240:19:1;;6213:24;6240:19;;;:11;:19;;;;;6213:24;6260:12;:10;:12::i;:::-;-1:-1:-1;;;;;6240:33:1;-1:-1:-1;;;;;6240:33:1;;;;;;;;;;;;;6213:60;;6312:6;6292:16;:26;;6284:79;;;;-1:-1:-1;;;6284:79:1;;;;;;;:::i;:::-;6399:57;6408:6;6416:12;:10;:12::i;:::-;6449:6;6430:16;:25;6399:8;:57::i;:::-;6487:4;6480:11;;;6049:450;;;;;;:::o;19550:207::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;19689:5:1::1;19666:22;19658:7;;:30;;;;:::i;:::-;:36;;;;:::i;:::-;19640:15;:54:::0;;;19710:39:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;19550:207:::0;:::o;7743:248::-;7809:7;7848;;7837;:18;;7829:73;;;;-1:-1:-1;;;7829:73:1;;;;;;;:::i;:::-;7913:19;7936:10;:8;:10::i;:::-;7913:33;-1:-1:-1;7964:19:1;7913:33;7964:7;:19;:::i;:::-;7957:26;;;7743:248;;;;:::o;5131:83::-;1609:1;5131:83;:::o;8408:475::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8490:20:1;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8482:56;;;;-1:-1:-1::0;;;8482:56:1::1;;;;;;;:::i;:::-;8554:9;8549:327;8573:9;:16:::0;8569:20;::::1;8549:327;;;8631:7;-1:-1:-1::0;;;;;8615:23:1::1;:9;8625:1;8615:12;;;;;;-1:-1:-1::0;;;8615:12:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;8615:12:1::1;:23;8611:254;;;8674:9;8684:16:::0;;:20:::1;::::0;8703:1:::1;::::0;8684:20:::1;:::i;:::-;8674:31;;;;;;-1:-1:-1::0;;;8674:31:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;8659:9:::1;:12:::0;;-1:-1:-1;;;;;8674:31:1;;::::1;::::0;8669:1;;8659:12;::::1;;;-1:-1:-1::0;;;8659:12:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;8659:46:1::1;-1:-1:-1::0;;;;;8659:46:1;;::::1;;::::0;;8724:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;8763:11:::1;:20:::0;;;;:28;;-1:-1:-1;;8763:28:1::1;::::0;;8810:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;8810:15:1::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8810:15:1;;;;;-1:-1:-1;;;;;;8810:15:1::1;::::0;;;;;8844:5:::1;;8611:254;8591:3:::0;::::1;::::0;::::1;:::i;:::-;;;;8549:327;;;;8408:475:::0;:::o;6507:213::-;6595:4;6612:78;6621:12;:10;:12::i;:::-;6635:7;6679:10;6644:11;:25;6656:12;:10;:12::i;:::-;-1:-1:-1;;;;;6644:25:1;;;;;;;;;;;;;;;;;-1:-1:-1;6644:25:1;;;:34;;;;;;;;;;:45;;;;:::i;:::-;6612:8;:78::i;1491:38::-;;;;;;;;;;;;;;;:::o;8891:113::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8962:27:1::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;8962:34:1::1;8992:4;8962:34;::::0;;8891:113::o;7277:456::-;7367:7;7406;;7395;:18;;7387:62;;;;-1:-1:-1;;;7387:62:1;;;;;;;:::i;:::-;7465:17;7460:266;;7499:28;7530:25;7541:7;7550:4;7530:10;:25::i;:::-;7577:9;;-1:-1:-1;7570:16:1;;-1:-1:-1;7570:16:1;7460:266;7619:28;7650:25;7661:7;7670:4;7650:10;:25::i;:::-;7697:17;;;;-1:-1:-1;7690:24:1;;-1:-1:-1;7690:24:1;2385:40;;;-1:-1:-1;;;2385:40:1;;;;;:::o;17904:231::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;17999:8:1::1;:17:::0;;-1:-1:-1;;17999:17:1::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;18024:29:1::1;17999:17;18024:29:::0;;::::1;;;-1:-1:-1::0;;18061:23:1::1;::::0;;;::::1;::::0;;;::::1;;::::0;;18109:18:::1;18061:23:::0;18024:29;18109:18:::1;:::i;:::-;18092:8;:35:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18092:35:1;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;17904:231:1:o;8065:335::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;8150:20:1;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8149:21;8141:61;;;;-1:-1:-1::0;;;8141:61:1::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8216:16:1;::::1;8235:1;8216:16:::0;;;:7:::1;:16;::::0;;;;;:20;8213:108:::1;;-1:-1:-1::0;;;;;8292:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;;8272:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;8253:16:1;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;8213:108:::1;-1:-1:-1::0;;;;;8331:20:1::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;8331:27:1::1;8354:4;8331:27:::0;;::::1;::::0;;;8369:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8369:23:1::1;::::0;;::::1;::::0;;8065:335::o;9594:123::-;-1:-1:-1;;;;;9682:27:1;9658:4;9682:27;;;:18;:27;;;;;;;;;9594:123::o;9723:135::-;-1:-1:-1;;;;;9817:33:1;9793:4;9817:33;;;:24;:33;;;;;;;;;9723:135::o;5348:198::-;-1:-1:-1;;;;;5438:20:1;;5414:7;5438:20;;;:11;:20;;;;;;;;5434:49;;;-1:-1:-1;;;;;;5467:16:1;;;;;;:7;:16;;;;;;5460:23;;5434:49;-1:-1:-1;;;;;5521:16:1;;;;;;:7;:16;;;;;;5501:37;;:19;:37::i;2773:142::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1650:94:7:-;1230:12;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;2621:143:1:-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2096:59::-;;;;;;;;;;;;;;;:::o;18387:255::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18567:5:1::1;18545:21;18537:7;;:29;;;;:::i;:::-;:35;;;;:::i;:::-;18520:14;:52:::0;18598:7:::1;::::0;18629:5:::1;::::0;18598:30:::1;::::0;18606:22;;18598:30:::1;:::i;:::-;:36;;;;:::i;:::-;18580:15;:54:::0;-1:-1:-1;;18387:255:1:o;7149:120::-;-1:-1:-1;;;;;7241:20:1;7217:4;7241:20;;;:11;:20;;;;;;;;;7149:120::o;1967:34::-;;;;:::o;999:87:7:-;1045:7;1072:6;-1:-1:-1;;;;;1072:6:7;999:87;:::o;18818:143:1:-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18917:16:1::1;:36:::0;;-1:-1:-1;;;;;;18917:36:1::1;-1:-1:-1::0;;;;;18917:36:1;;;::::1;::::0;;;::::1;::::0;;18818:143::o;18969:120::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;19041:40:1::1;19056:24;19074:4;19056:9;:24::i;:::-;19041:14;:40::i;5038:87::-:0;5110:7;;;;;;;;;;;;-1:-1:-1;;;5110:7:1;;;;5038:87;:::o;17433:463::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;17534:33:1;::::1;;::::0;;;:26:::1;:33;::::0;;;;;::::1;;:42;;::::0;::::1;;;;17526:111;;;;-1:-1:-1::0;;;17526:111:1::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17648:33:1;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;17648:41:1::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;17700:132:::1;;-1:-1:-1::0;;;;;17730:31:1;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;:38;;-1:-1:-1;;17730:38:1::1;17764:4;17730:38;::::0;;17784:34;;::::1;;::::0;::::1;::::0;::::1;::::0;17755:5;;17784:34:::1;:::i;:::-;;;;;;;;17700:132;17847:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;17847:41:1;::::1;::::0;::::1;::::0;;;::::1;17433:463:::0;;:::o;3064:36::-;;;;;;:::o;6728:413::-;6821:4;6838:24;6865:11;:25;6877:12;:10;:12::i;:::-;-1:-1:-1;;;;;6865:25:1;;;;;;;;;;;;;;;;;-1:-1:-1;6865:25:1;;;:34;;;;;;;;;;;-1:-1:-1;6918:35:1;;;;6910:85;;;;-1:-1:-1;;;6910:85:1;;;;;;;:::i;:::-;7031:67;7040:12;:10;:12::i;:::-;7054:7;7082:15;7063:16;:34;7031:8;:67::i;:::-;-1:-1:-1;7129:4:1;;6728:413;-1:-1:-1;;;6728:413:1:o;2048:39::-;;;-1:-1:-1;;;;;2048:39:1;;:::o;5554:167::-;5632:4;5649:42;5659:12;:10;:12::i;:::-;5673:9;5684:6;5649:9;:42::i;1890:44::-;;;;:::o;9016:450::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;9138:9:1::1;9134:325;9153:19:::0;;::::1;9134:325;;;9243:8;9202:49;;:24;:37;9227:8;;9236:1;9227:11;;;;;-1:-1:-1::0;;;9227:11:1::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9202:37:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9202:37:1;;::::1;;:49;;;;9194:127;;;;-1:-1:-1::0;;;9194:127:1::1;;;;;;;:::i;:::-;9376:8;9336:24;:37;9361:8;;9370:1;9361:11;;;;;-1:-1:-1::0;;;9361:11:1::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9336:37:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;9336:37:1;:48;;-1:-1:-1;;9336:48:1::1;::::0;::::1;;::::0;;;::::1;::::0;;9404:43;::::1;;;9425:8:::0;;9434:1;9425:11;;::::1;;;-1:-1:-1::0;;;9425:11:1::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9404:43;;;;;;:::i;:::-;;;;;;;;9174:3:::0;::::1;::::0;::::1;:::i;:::-;;;;9134:325;;;;9016:450:::0;;;:::o;9866:167::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;9941:21:1::1;:32:::0;;-1:-1:-1;;;;9941:32:1::1;-1:-1:-1::0;;;9941:32:1;::::1;;;;::::0;;9987:38:::1;::::0;::::1;::::0;::::1;::::0;9941:32;;9987:38:::1;:::i;2352:26::-:0;;;-1:-1:-1;;;;;2352:26:1;;:::o;2432:58::-;;;;:::o;19765:320::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;19865:33:1;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;:45;;::::0;::::1;;;;19857:108;;;;-1:-1:-1::0;;;19857:108:1::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19976:33:1;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;:44;;-1:-1:-1;;19976:44:1::1;::::0;::::1;;::::0;;::::1;::::0;;;20038:39;;::::1;::::0;::::1;::::0;19976:33;;20038:39:::1;:::i;:::-;;;;;;;;19765:320:::0;;:::o;1838:44::-;;;;:::o;1787:43::-;;;;:::o;2008:31::-;;;;:::o;5729:143::-;-1:-1:-1;;;;;5837:18:1;;;5810:7;5837:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5729:143::o;18143:236::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;18239:9:1::1;:18:::0;;-1:-1:-1;;18239:18:1::1;;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;18265:30:1::1;18239:18;18265:30:::0;;::::1;;;-1:-1:-1::0;;18303:24:1::1;::::0;;;::::1;::::0;;;::::1;;::::0;;18353:18:::1;18303:24:::0;18265:30;18353:18:::1;:::i;:::-;18335:9;:36:::0;;::::1;::::0;;;::::1;::::0;::::1;-1:-1:-1::0;;18335:36:1;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;18143:236:1:o;9474:112::-;1230:12:7;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;9543:27:1::1;9573:5;9543:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;9543:35:1::1;::::0;;9474:112::o;1899:192:7:-;1230:12;:10;:12::i;:::-;-1:-1:-1;;;;;1219:23:7;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1219:23:7;;1211:68;;;;-1:-1:-1;;;1211:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;1988:22:7;::::1;1980:73;;;;-1:-1:-1::0;;;1980:73:7::1;;;;;;;:::i;:::-;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;601:98:2:-;681:10;601:98;:::o;12496:335:1:-;-1:-1:-1;;;;;12589:19:1;;12581:68;;;;-1:-1:-1;;;12581:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;12668:21:1;;12660:68;;;;-1:-1:-1;;;12660:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;12739:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;12791:32;;;;;12769:6;;12791:32;:::i;:::-;;;;;;;;12496:335;;;:::o;12839:1618::-;12922:19;;:22;:56;;;;-1:-1:-1;;;;;;12948:30:1;;;;;;:26;:30;;;;;;;;12922:56;12919:118;;;13013:12;12991:19;:34;12919:118;-1:-1:-1;;;;;13057:18:1;;13049:68;;;;-1:-1:-1;;;13049:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;13136:16:1;;13128:64;;;;-1:-1:-1;;;13128:64:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;13212:11:1;;;;;;:5;:11;;;;;;;;13211:12;13203:57;;;;-1:-1:-1;;;13203:57:1;;;;;;;:::i;:::-;13288:1;13279:6;:10;13271:64;;;;-1:-1:-1;;;13271:64:1;;;;;;;:::i;:::-;13364:15;13374:4;13364:9;:15::i;:::-;13354:6;:25;;13346:86;;;;-1:-1:-1;;;13346:86:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;13460:24:1;;13443:12;13460:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;13488:22:1;;;;;;:18;:22;;;;;;;;13460:50;13458:53;13443:68;;13527:7;13524:612;;;-1:-1:-1;;;;;13565:32:1;;;;;;:26;:32;;;;;;;;13562:563;;;13667:12;;13647:19;;:32;;;;:::i;:::-;13634:12;:45;13631:170;;;-1:-1:-1;;;;;13717:9:1;;;;;;:5;:9;;;;;;;:16;;-1:-1:-1;;13717:16:1;13729:4;13717:16;;;;;;13757:24;;;;;;13723:2;;13757:24;:::i;:::-;;;;;;;;13631:170;13836:8;13821:23;:12;:23;;;;;;-1:-1:-1;;13821:23:1;;;;;;;-1:-1:-1;;13821:23:1;;;;;;;;;-1:-1:-1;;13821:23:1;;;;;;;;;-1:-1:-1;;13821:23:1;;;;;;;;;;;;;;;;;;;13879:14;;13871:22;;;13863:67;;;;-1:-1:-1;;;13863:67:1;;;;;;;:::i;:::-;13562:563;;;14012:9;13997:24;:12;:24;;;;;;-1:-1:-1;;13997:24:1;;;;;;;-1:-1:-1;;13997:24:1;;;;;;;;;-1:-1:-1;;13997:24:1;;;;;;;;;-1:-1:-1;;13997:24:1;;;;;;;;;;;;;;;;;;;14056:15;;14048:23;;;14040:69;;;;-1:-1:-1;;;14040:69:1;;;;;;;:::i;:::-;14180:29;;14152:24;14170:4;14152:9;:24::i;:::-;:57;;:79;;;;-1:-1:-1;14215:16:1;;;;14214:17;14152:79;:116;;;;-1:-1:-1;;;;;;14236:32:1;;;;;;:26;:32;;;;;;;;14235:33;14152:116;:141;;;;-1:-1:-1;14272:21:1;;-1:-1:-1;;;14272:21:1;;;;14152:141;14148:248;;;14339:45;14354:29;;14339:14;:45::i;:::-;14408:41;14423:4;14429:2;14433:6;14441:7;14408:14;:41::i;11796:158::-;11837:7;11858:15;11875;11894:19;:17;:19::i;:::-;11857:56;;-1:-1:-1;11857:56:1;-1:-1:-1;11931:15:1;11857:56;;11931:15;:::i;:::-;11924:22;;;;11796:158;:::o;10529:345::-;10602:36;;:::i;:::-;10663:29;10675:7;10684;10663:11;:29::i;:::-;10651:41;;10787:52;10799:9;10810:7;10819;10828:10;:8;:10::i;:::-;10787:11;:52::i;:::-;10766:17;;;10703:136;10750:14;;;10703:136;10723:25;;;10703:136;;;10529:345;;;;:::o;2099:173:7:-;2155:16;2174:6;;-1:-1:-1;;;;;2191:17:7;;;-1:-1:-1;;;;;;2191:17:7;;;;;;2224:40;;2174:6;;;;;;;2224:40;;2155:16;2224:40;2099:173;;:::o;15418:876:1:-;3858:16;:23;;-1:-1:-1;;3858:23:1;3877:4;3858:23;;;15527:12:::1;:19:::0;3858:16;;15527:21:::1;::::0;:19;;::::1;3858:23:::0;15527:19:::1;15547:1;15527:21;:::i;:::-;15615:12;:19:::0;15505:43:::1;::::0;;::::1;::::0;-1:-1:-1;15559:32:1::1;::::0;15505:43;;15594:40:::1;::::0;15615:19;;;::::1;;15594:20:::0;:40:::1;:::i;:::-;:52;;;;:::i;:::-;15559:87:::0;-1:-1:-1;15657:14:1::1;15674:45;15559:87:::0;15674:20;:45:::1;:::i;:::-;15657:62:::0;-1:-1:-1;15757:21:1::1;15823:24;15657:62:::0;15823:16:::1;:24::i;:::-;15860:20;15883:37;15906:14:::0;15883:21:::1;:37;:::i;:::-;16011:12;:19:::0;15860:60;;-1:-1:-1;15931:29:1::1;::::0;15998:32:::1;::::0;16011:19;;::::1;;;15998:11:::0;:32:::1;:::i;:::-;15976:12;:19:::0;15963:32:::1;::::0;15976:19;;::::1;;;15963:12:::0;:32:::1;:::i;:::-;:68;;;;:::i;:::-;15931:100;;16090:61;16103:24;16129:21;16090:12;:61::i;:::-;16172:16;::::0;:49:::1;::::0;-1:-1:-1;;;;;16172:16:1::1;16199:21;16172:26;:49::i;:::-;-1:-1:-1::0;;3904:16:1;:24;;-1:-1:-1;;3904:24:1;;;-1:-1:-1;;;;;15418:876:1:o;14538:872::-;14657:28;14688;14699:7;14708;14688:10;:28::i;:::-;-1:-1:-1;;;;;14733:19:1;;;;;;:11;:19;;;;;;14657:59;;-1:-1:-1;14733:19:1;;14729:82;;;-1:-1:-1;;;;;14773:15:1;;;;;;:7;:15;;;;;:26;;14792:7;;14773:15;:26;;14792:7;;14773:26;:::i;:::-;;;;-1:-1:-1;;14729:82:1;-1:-1:-1;;;;;14826:22:1;;;;;;:11;:22;;;;;;;;14822:98;;;14891:17;;;;-1:-1:-1;;;;;14869:18:1;;;;;;:7;:18;;;;;:39;;:18;;;:39;;14891:17;;14869:39;:::i;:::-;;;;-1:-1:-1;;14822:98:1;14951:9;;-1:-1:-1;;;;;14932:15:1;;14951:9;14932:15;;;:7;:15;;;;;:28;;:15;;14951:9;14932:28;;14951:9;;14932:28;:::i;:::-;;;;-1:-1:-1;;14993:17:1;;;;;-1:-1:-1;;;;;14971:18:1;;;;;;:7;:18;;;;;;:39;;14993:17;;14971:18;;:39;;14993:17;;14971:39;:::i;:::-;;;;-1:-1:-1;;15021:172:1;;;;15053:27;15065:1;:6;;;15073:1;:6;;;15053:11;:27::i;:::-;15091:32;15103:1;:9;;;15113:1;:9;;;15091:11;:32::i;:::-;15164:4;-1:-1:-1;;;;;15139:42:1;15148:6;-1:-1:-1;;;;;15139:42:1;;15171:1;:9;;;15139:42;;;;;;:::i;:::-;;;;;;;;15021:172;-1:-1:-1;;;;;15211:35:1;;;;;;:24;:35;;;;;;;;;:77;;;15273:15;;15250:20;15260:9;15250;:20::i;:::-;:38;;15211:77;15203:137;;;;-1:-1:-1;;;15203:137:1;;;;;;;:::i;:::-;15373:9;-1:-1:-1;;;;;15356:46:1;15365:6;-1:-1:-1;;;;;15356:46:1;;15384:1;:17;;;15356:46;;;;;;:::i;:::-;;;;;;;;14538:872;;;;;:::o;11962:524::-;12059:7;;12095;;12012;;;;;12113:263;12137:9;:16;12133:20;;12113:263;;;12203:7;12179;:21;12187:9;12197:1;12187:12;;;;;;-1:-1:-1;;;12187:12:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12187:12:1;12179:21;;;;;;;;;;;;;:31;;:66;;;12238:7;12214;:21;12222:9;12232:1;12222:12;;;;;;-1:-1:-1;;;12222:12:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12222:12:1;12214:21;;;;;;;;;;;;;:31;12179:66;12175:97;;;12255:7;;12264;;12247:25;;;;;;;;;12175:97;12297:7;:21;12305:9;12315:1;12305:12;;;;;;-1:-1:-1;;;12305:12:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12305:12:1;12297:21;;;;;;;;;;;;;12287:31;;;;:::i;:::-;;;12343:7;:21;12351:9;12361:1;12351:12;;;;;;-1:-1:-1;;;12351:12:1;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12351:12:1;12343:21;;;;;;;;;;;;;12333:31;;;;:::i;:::-;;-1:-1:-1;12155:3:1;;;;:::i;:::-;;;;12113:263;;;;12408:7;;12400;;:15;;;;:::i;:::-;12390:7;:25;12386:56;;;12425:7;;12434;;12417:25;;;;;;;;12386:56;12461:7;;-1:-1:-1;12470:7:1;-1:-1:-1;11962:524:1;;;:::o;10882:386::-;10956:28;;:::i;:::-;11003:7;10999:86;;11025:17;;;:27;;;11065:8;;10999:86;11112:12;:16;11129:3;;11104:24;;11112:16;;11104:7;:24;:::i;:::-;:28;;;;:::i;:::-;11095:6;;;:37;11163:12;:19;11183:3;;11155:27;;11163:19;;;;;11155:7;:27;:::i;:::-;:31;;;;:::i;:::-;11143:9;;;:43;;;11225:6;;;;11217:14;;:7;:14;:::i;:::-;:24;;;;:::i;:::-;11197:17;;;:44;10882:386;;;;:::o;11276:512::-;11401:15;;;;11495:19;11503:11;11495:7;:19;:::i;:::-;11485:29;;11531:7;11527:66;;-1:-1:-1;11560:7:1;;-1:-1:-1;11577:1:1;;-1:-1:-1;11577:1:1;11553:28;;11527:66;11619:11;11612:1;:6;;;:18;;;;:::i;:::-;11605:25;;11661:11;11651:1;:9;;;:21;;;;:::i;:::-;11641:31;-1:-1:-1;11641:31:1;11702:12;11710:4;11702:7;:12;:::i;:::-;:20;;;;:::i;:::-;11683:39;;11276:512;;;;;;;;;;:::o;16302:688::-;16458:16;;;16472:1;16458:16;;;;;;;;16434:21;;16458:16;;;;;;;;;;-1:-1:-1;16458:16:1;16434:40;;16503:4;16485;16490:1;16485:7;;;;;;-1:-1:-1;;;16485:7:1;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;16485:23:1;;;-1:-1:-1;;;;;16485:23:1;;;;;16529:15;;;;;;;;;-1:-1:-1;;;;;16529:15:1;-1:-1:-1;;;;;16529:20:1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16519:4;16524:1;16519:7;;;;;;-1:-1:-1;;;16519:7:1;;;;;;;;;-1:-1:-1;;;;;16519:32:1;;;:7;;;;;;;;;:32;16600:15;;16620:11;;16567:50;;16585:4;;16600:15;;;;;16567:9;:50::i;:::-;:64;16564:156;;;16678:15;;16646:62;;16663:4;;16678:15;;;-1:-1:-1;;;;;16678:15:1;-1:-1:-1;;16646:8:1;:62::i;:::-;16758:15;;:224;;-1:-1:-1;;;16758:224:1;;:15;;;;-1:-1:-1;;;;;16758:15:1;;:66;;:224;;16839:11;;16865:1;;16909:4;;16936;;16956:15;;16758:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16302:688;;:::o;16998:427::-;17111:15;;;;;-1:-1:-1;;;;;17111:15:1;:31;17150:9;17183:4;17203:11;17229:1;;17315:7;:5;:7::i;:::-;17337:15;17111:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17379:38;17394:11;17407:9;17379:38;;;;;;;:::i;:::-;;;;;;;;16998:427;;:::o;2065:317:0:-;2180:6;2155:21;:31;;2147:73;;;;-1:-1:-1;;;2147:73:0;;;;;;;:::i;:::-;2234:12;2252:9;-1:-1:-1;;;;;2252:14:0;2274:6;2252:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2233:52;;;2304:7;2296:78;;;;-1:-1:-1;;;2296:78:0;;;;;;;:::i;:::-;2065:317;;;:::o;10139:125:1:-;10218:4;10207:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;10233:11:1;:23;;10252:4;;10233:11;:15;;:23;;10252:4;;10233:23;:::i;:::-;;;;-1:-1:-1;;;;10139:125:1:o;10272:249::-;10361:4;10345:22;;;;:7;:22;;;;;:32;;10370:7;;10345:22;:32;;10370:7;;10345:32;:::i;:::-;;;;-1:-1:-1;;10411:4:1;10391:26;;;;:11;:26;;;;;;;;10388:77;;;10448:4;10432:22;;;;:7;:22;;;;;:33;;10458:7;;10432:22;:33;;10458:7;;10432:33;:::i;:::-;;;;-1:-1:-1;;10388:77:1;10496:7;10476:11;:18;;;:27;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:162:8:-;81:20;;137:13;;130:21;120:32;;110:2;;166:1;163;156:12;181:158;249:20;;309:4;298:16;;288:27;;278:2;;329:1;326;319:12;344:259;;456:2;444:9;435:7;431:23;427:32;424:2;;;477:6;469;462:22;424:2;521:9;508:23;540:33;567:5;540:33;:::i;608:263::-;;731:2;719:9;710:7;706:23;702:32;699:2;;;752:6;744;737:22;699:2;789:9;783:16;808:33;835:5;808:33;:::i;1148:402::-;;;1277:2;1265:9;1256:7;1252:23;1248:32;1245:2;;;1298:6;1290;1283:22;1245:2;1342:9;1329:23;1361:33;1388:5;1361:33;:::i;:::-;1413:5;-1:-1:-1;1470:2:8;1455:18;;1442:32;1483:35;1442:32;1483:35;:::i;:::-;1537:7;1527:17;;;1235:315;;;;;:::o;1555:470::-;;;;1701:2;1689:9;1680:7;1676:23;1672:32;1669:2;;;1722:6;1714;1707:22;1669:2;1766:9;1753:23;1785:33;1812:5;1785:33;:::i;:::-;1837:5;-1:-1:-1;1894:2:8;1879:18;;1866:32;1907:35;1866:32;1907:35;:::i;:::-;1659:366;;1961:7;;-1:-1:-1;;;2015:2:8;2000:18;;;;1987:32;;1659:366::o;2030:329::-;;;2156:2;2144:9;2135:7;2131:23;2127:32;2124:2;;;2177:6;2169;2162:22;2124:2;2221:9;2208:23;2240:33;2267:5;2240:33;:::i;:::-;2292:5;-1:-1:-1;2316:37:8;2349:2;2334:18;;2316:37;:::i;:::-;2306:47;;2114:245;;;;;:::o;2364:327::-;;;2493:2;2481:9;2472:7;2468:23;2464:32;2461:2;;;2514:6;2506;2499:22;2461:2;2558:9;2545:23;2577:33;2604:5;2577:33;:::i;:::-;2629:5;2681:2;2666:18;;;;2653:32;;-1:-1:-1;;;2451:240:8:o;2696:744::-;;;;2857:2;2845:9;2836:7;2832:23;2828:32;2825:2;;;2878:6;2870;2863:22;2825:2;2923:9;2910:23;2952:18;2993:2;2985:6;2982:14;2979:2;;;3014:6;3006;2999:22;2979:2;3057:6;3046:9;3042:22;3032:32;;3102:7;3095:4;3091:2;3087:13;3083:27;3073:2;;3129:6;3121;3114:22;3073:2;3174;3161:16;3200:2;3192:6;3189:14;3186:2;;;3221:6;3213;3206:22;3186:2;3284:7;3277:4;3269;3261:6;3257:17;3253:2;3249:26;3245:37;3242:50;3239:2;;;3310:6;3302;3295:22;3239:2;3346:4;3338:13;;;;-1:-1:-1;3370:6:8;-1:-1:-1;3395:39:8;;3413:20;;;-1:-1:-1;3395:39:8;:::i;:::-;3385:49;;2815:625;;;;;:::o;3445:192::-;;3554:2;3542:9;3533:7;3529:23;3525:32;3522:2;;;3575:6;3567;3560:22;3522:2;3603:28;3621:9;3603:28;:::i;3642:190::-;;3754:2;3742:9;3733:7;3729:23;3725:32;3722:2;;;3775:6;3767;3760:22;3722:2;-1:-1:-1;3803:23:8;;3712:120;-1:-1:-1;3712:120:8:o;3837:260::-;;;3963:2;3951:9;3942:7;3938:23;3934:32;3931:2;;;3984:6;3976;3969:22;3931:2;4025:9;4012:23;4002:33;;4054:37;4087:2;4076:9;4072:18;4054:37;:::i;4102:258::-;;;4231:2;4219:9;4210:7;4206:23;4202:32;4199:2;;;4252:6;4244;4237:22;4199:2;-1:-1:-1;;4280:23:8;;;4350:2;4335:18;;;4322:32;;-1:-1:-1;4189:171:8:o;4365:316::-;;;;4522:2;4510:9;4501:7;4497:23;4493:32;4490:2;;;4543:6;4535;4528:22;4490:2;4577:9;4571:16;4561:26;;4627:2;4616:9;4612:18;4606:25;4596:35;;4671:2;4660:9;4656:18;4650:25;4640:35;;4480:201;;;;;:::o;4686:338::-;;;;4826:2;4814:9;4805:7;4801:23;4797:32;4794:2;;;4847:6;4839;4832:22;4794:2;4875:29;4894:9;4875:29;:::i;:::-;4865:39;;4923:38;4957:2;4946:9;4942:18;4923:38;:::i;:::-;4913:48;;4980:38;5014:2;5003:9;4999:18;4980:38;:::i;5029:205::-;5229:3;5220:14::o;5239:203::-;-1:-1:-1;;;;;5403:32:8;;;;5385:51;;5373:2;5358:18;;5340:102::o;5671:607::-;-1:-1:-1;;;;;6030:15:8;;;6012:34;;6077:2;6062:18;;6055:34;;;;6120:2;6105:18;;6098:34;;;;6163:2;6148:18;;6141:34;;;;6212:15;;;6206:3;6191:19;;6184:44;5992:3;6244:19;;6237:35;;;;5961:3;5946:19;;5928:350::o;6283:187::-;6448:14;;6441:22;6423:41;;6411:2;6396:18;;6378:92::o;6710:603::-;;6851:2;6880;6869:9;6862:21;6912:6;6906:13;6955:6;6950:2;6939:9;6935:18;6928:34;6980:4;6993:140;7007:6;7004:1;7001:13;6993:140;;;7102:14;;;7098:23;;7092:30;7068:17;;;7087:2;7064:26;7057:66;7022:10;;6993:140;;;7151:6;7148:1;7145:13;7142:2;;;7221:4;7216:2;7207:6;7196:9;7192:22;7188:31;7181:45;7142:2;-1:-1:-1;7297:2:8;7276:15;-1:-1:-1;;7272:29:8;7257:45;;;;7304:2;7253:54;;6831:482;-1:-1:-1;;;6831:482:8:o;7318:399::-;7520:2;7502:21;;;7559:2;7539:18;;;7532:30;7598:34;7593:2;7578:18;;7571:62;-1:-1:-1;;;7664:2:8;7649:18;;7642:33;7707:3;7692:19;;7492:225::o;7722:469::-;7924:2;7906:21;;;7963:2;7943:18;;;7936:30;8002:34;7997:2;7982:18;;7975:62;8073:34;8068:2;8053:18;;8046:62;-1:-1:-1;;;8139:3:8;8124:19;;8117:32;8181:3;8166:19;;7896:295::o;8196:413::-;8398:2;8380:21;;;8437:2;8417:18;;;8410:30;8476:34;8471:2;8456:18;;8449:62;-1:-1:-1;;;8542:2:8;8527:18;;8520:47;8599:3;8584:19;;8370:239::o;8614:406::-;8816:2;8798:21;;;8855:2;8835:18;;;8828:30;8894:34;8889:2;8874:18;;8867:62;-1:-1:-1;;;8960:2:8;8945:18;;8938:40;9010:3;8995:19;;8788:232::o;9025:402::-;9227:2;9209:21;;;9266:2;9246:18;;;9239:30;9305:34;9300:2;9285:18;;9278:62;-1:-1:-1;;;9371:2:8;9356:18;;9349:36;9417:3;9402:19;;9199:228::o;9432:398::-;9634:2;9616:21;;;9673:2;9653:18;;;9646:30;9712:34;9707:2;9692:18;;9685:62;-1:-1:-1;;;9778:2:8;9763:18;;9756:32;9820:3;9805:19;;9606:224::o;9835:420::-;10037:2;10019:21;;;10076:2;10056:18;;;10049:30;10115:34;10110:2;10095:18;;10088:62;10186:26;10181:2;10166:18;;10159:54;10245:3;10230:19;;10009:246::o;10260:397::-;10462:2;10444:21;;;10501:2;10481:18;;;10474:30;10540:34;10535:2;10520:18;;10513:62;-1:-1:-1;;;10606:2:8;10591:18;;10584:31;10647:3;10632:19;;10434:223::o;10662:356::-;10864:2;10846:21;;;10883:18;;;10876:30;10942:34;10937:2;10922:18;;10915:62;11009:2;10994:18;;10836:182::o;11023:351::-;11225:2;11207:21;;;11264:2;11244:18;;;11237:30;11303:29;11298:2;11283:18;;11276:57;11365:2;11350:18;;11197:177::o;11379:414::-;11581:2;11563:21;;;11620:2;11600:18;;;11593:30;11659:34;11654:2;11639:18;;11632:62;-1:-1:-1;;;11725:2:8;11710:18;;11703:48;11783:3;11768:19;;11553:240::o;11798:422::-;12000:2;11982:21;;;12039:2;12019:18;;;12012:30;12078:34;12073:2;12058:18;;12051:62;12149:28;12144:2;12129:18;;12122:56;12210:3;12195:19;;11972:248::o;12225:347::-;12427:2;12409:21;;;12466:2;12446:18;;;12439:30;12505:25;12500:2;12485:18;;12478:53;12563:2;12548:18;;12399:173::o;12577:353::-;12779:2;12761:21;;;12818:2;12798:18;;;12791:30;12857:31;12852:2;12837:18;;12830:59;12921:2;12906:18;;12751:179::o;12935:356::-;13137:2;13119:21;;;13156:18;;;13149:30;13215:34;13210:2;13195:18;;13188:62;13282:2;13267:18;;13109:182::o;13296:407::-;13498:2;13480:21;;;13537:2;13517:18;;;13510:30;13576:34;13571:2;13556:18;;13549:62;-1:-1:-1;;;13642:2:8;13627:18;;13620:41;13693:3;13678:19;;13470:233::o;13708:355::-;13910:2;13892:21;;;13949:2;13929:18;;;13922:30;13988:33;13983:2;13968:18;;13961:61;14054:2;14039:18;;13882:181::o;14068:404::-;14270:2;14252:21;;;14309:2;14289:18;;;14282:30;14348:34;14343:2;14328:18;;14321:62;-1:-1:-1;;;14414:2:8;14399:18;;14392:38;14462:3;14447:19;;14242:230::o;14477:356::-;14679:2;14661:21;;;14698:18;;;14691:30;14757:34;14752:2;14737:18;;14730:62;14824:2;14809:18;;14651:182::o;14838:405::-;15040:2;15022:21;;;15079:2;15059:18;;;15052:30;15118:34;15113:2;15098:18;;15091:62;-1:-1:-1;;;15184:2:8;15169:18;;15162:39;15233:3;15218:19;;15012:231::o;15248:411::-;15450:2;15432:21;;;15489:2;15469:18;;;15462:30;15528:34;15523:2;15508:18;;15501:62;-1:-1:-1;;;15594:2:8;15579:18;;15572:45;15649:3;15634:19;;15422:237::o;15664:401::-;15866:2;15848:21;;;15905:2;15885:18;;;15878:30;15944:34;15939:2;15924:18;;15917:62;-1:-1:-1;;;16010:2:8;15995:18;;15988:35;16055:3;16040:19;;15838:227::o;16070:400::-;16272:2;16254:21;;;16311:2;16291:18;;;16284:30;16350:34;16345:2;16330:18;;16323:62;-1:-1:-1;;;16416:2:8;16401:18;;16394:34;16460:3;16445:19;;16244:226::o;16475:401::-;16677:2;16659:21;;;16716:2;16696:18;;;16689:30;16755:34;16750:2;16735:18;;16728:62;-1:-1:-1;;;16821:2:8;16806:18;;16799:35;16866:3;16851:19;;16649:227::o;16881:177::-;17027:25;;;17015:2;17000:18;;16982:76::o;17063:983::-;;17373:3;17362:9;17358:19;17404:6;17393:9;17386:25;17430:2;17468:6;17463:2;17452:9;17448:18;17441:34;17511:3;17506:2;17495:9;17491:18;17484:31;17535:6;17570;17564:13;17601:6;17593;17586:22;17639:3;17628:9;17624:19;17617:26;;17678:2;17670:6;17666:15;17652:29;;17699:4;17712:195;17726:6;17723:1;17720:13;17712:195;;;17791:13;;-1:-1:-1;;;;;17787:39:8;17775:52;;17882:15;;;;17847:12;;;;17823:1;17741:9;17712:195;;;-1:-1:-1;;;;;;;17963:32:8;;;;17958:2;17943:18;;17936:60;-1:-1:-1;;;18027:3:8;18012:19;18005:35;17924:3;17334:712;-1:-1:-1;;;17334:712:8:o;18051:248::-;18225:25;;;18281:2;18266:18;;18259:34;18213:2;18198:18;;18180:119::o;18304:184::-;18476:4;18464:17;;;;18446:36;;18434:2;18419:18;;18401:87::o;18493:419::-;18738:4;18726:17;;;18708:36;;18780:17;;;18775:2;18760:18;;18753:45;18834:17;;;18829:2;18814:18;;18807:45;18888:17;;;18883:2;18868:18;;18861:45;18695:3;18680:19;;18662:250::o;18917:128::-;;18988:1;18984:6;18981:1;18978:13;18975:2;;;18994:18;;:::i;:::-;-1:-1:-1;19030:9:8;;18965:80::o;19050:204::-;;19124:4;19121:1;19117:12;19156:4;19153:1;19149:12;19191:3;19185:4;19181:14;19176:3;19173:23;19170:2;;;19199:18;;:::i;:::-;19235:13;;19096:158;-1:-1:-1;;;19096:158:8:o;19259:217::-;;19325:1;19315:2;;-1:-1:-1;;;19350:31:8;;19404:4;19401:1;19394:15;19432:4;19357:1;19422:15;19315:2;-1:-1:-1;19461:9:8;;19305:171::o;19481:453::-;19577:6;19600:5;19614:314;19663:1;19700:2;19690:8;19687:16;19677:2;;19707:5;;;19677:2;19748:4;19743:3;19739:14;19733:4;19730:24;19727:2;;;19757:18;;:::i;:::-;19807:2;19797:8;19793:17;19790:2;;;19822:16;;;;19790:2;19901:17;;;;;19861:15;;19614:314;;;19558:376;;;;;;;:::o;19939:148::-;;20026:55;-1:-1:-1;;20067:4:8;20053:19;;20047:4;20092:922;20176:8;20166:2;;-1:-1:-1;20217:1:8;20231:5;;20166:2;20265:4;20255:2;;-1:-1:-1;20302:1:8;20316:5;;20255:2;20347:4;20365:1;20360:59;;;;20433:1;20428:183;;;;20340:271;;20360:59;20390:1;20381:10;;20404:5;;;20428:183;20465:3;20455:8;20452:17;20449:2;;;20472:18;;:::i;:::-;20528:1;20518:8;20514:16;20505:25;;20556:3;20549:5;20546:14;20543:2;;;20563:18;;:::i;:::-;20596:5;;;20340:271;;20695:2;20685:8;20682:16;20676:3;20670:4;20667:13;20663:36;20657:2;20647:8;20644:16;20639:2;20633:4;20630:12;20626:35;20623:77;20620:2;;;-1:-1:-1;20732:19:8;;;20767:14;;;20764:2;;;20784:18;;:::i;:::-;20817:5;;20620:2;20864:42;20902:3;20892:8;20886:4;20883:1;20864:42;:::i;:::-;20939:6;20934:3;20930:16;20921:7;20918:29;20915:2;;;20950:18;;:::i;:::-;20988:20;;20156:858;-1:-1:-1;;;;20156:858:8:o;21019:168::-;;21125:1;21121;21117:6;21113:14;21110:1;21107:21;21102:1;21095:9;21088:17;21084:45;21081:2;;;21132:18;;:::i;:::-;-1:-1:-1;21172:9:8;;21071:116::o;21192:238::-;;21270:4;21267:1;21263:12;21302:4;21299:1;21295:12;21362:3;21356:4;21352:14;21347:3;21344:23;21337:3;21330:11;21323:19;21319:49;21316:2;;;21371:18;;:::i;:::-;21411:13;;21242:188;-1:-1:-1;;;21242:188:8:o;21435:125::-;;21503:1;21500;21497:8;21494:2;;;21508:18;;:::i;:::-;-1:-1:-1;21545:9:8;;21484:76::o;21565:135::-;;-1:-1:-1;;21625:17:8;;21622:2;;;21645:18;;:::i;:::-;-1:-1:-1;21692:1:8;21681:13;;21612:88::o;21705:127::-;21766:10;21761:3;21757:20;21754:1;21747:31;21797:4;21794:1;21787:15;21821:4;21818:1;21811:15;21837:133;-1:-1:-1;;;;;21914:31:8;;21904:42;;21894:2;;21960:1;21957;21950:12

Swarm Source

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