ETH Price: $2,625.25 (+0.94%)
Gas: 1 Gwei

Token

BezosBlastoff (BBB)
 

Overview

Max Total Supply

10,000,000 BBB

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
16,766.509680888 BBB

Value
$0.00
0xe4a715ee4951a2d2ffa354023d7e4d8d39858b73
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:
Gami

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-16
*/

//SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.6.12;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

library SafeMath {
    /**
    * @dev Returns the addition of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `+` operator.
    *
    * Requirements:
    *
    * - Addition cannot overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Returns the multiplication of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `*` operator.
    *
    * Requirements:
    *
    * - Multiplication cannot overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts with custom message when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    *  - an externally-owned account
    *  - a contract in construction
    *  - an address where a contract will be created
    *  - an address where a contract lived, but was destroyed
    * ====
    */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

// Contract implementation
contract Gami is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded; // excluded from reward
    address[] private _excluded;
    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;

    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 10_000_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tBurnTotal;

    string private _name = 'BezosBlastoff';
    string private _symbol = 'BBB';
    uint8 private _decimals = 9;

    uint256 private _burnFee = 0; // 0% burn

    uint256 private _marketingFee = 5; // 5% marketing
    uint256 private _developmentFee = 3; // 3% developer
    uint256 private _buyBackFee = 7; // 7% buy-back and burn

    uint256 private _swapEth = 5000 * 10**9;
    uint256 private _swapImpact = 10;

    uint256 private _previousBurnFee = _burnFee;

    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private _previousDevelopmentFee = _developmentFee;
    uint256 private _previousBuyBackFee = _buyBackFee;

    address payable private _marketingWalletAddress = payable(0xccA3A312a3A6CD0C627D9b084f255118aAc8b2d8);
    address payable private _developmentWalletAddress = payable(0xf55242492c72C115e968111E7Bd4633b8405b248);
    address private immutable _deadWalletAddress = 0x000000000000000000000000000000000000dEaD;
    address private _ContractAddress = 0xa1ab427451F19dF7445a22dEa7073800Ea3b687f;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify = false;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingOpen = false;

    uint256 private _maxTxAmount = _tTotal;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

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

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingWalletAddress] = true;
        _isExcludedFromFee[_developmentWalletAddress] = true;


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

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

    function totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
    }

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

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

    function excludeFromReward(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        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 already 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 addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }

    function removeAllFee() private {
        if(_marketingFee == 0 && _developmentFee == 0 && _burnFee == 0 && _buyBackFee == 0) return;

        _previousMarketingFee = _marketingFee;
        _previousDevelopmentFee = _developmentFee;
        _previousBurnFee = _burnFee;
        _previousBuyBackFee = _buyBackFee;

        _marketingFee = 0;
        _developmentFee = 0;
        _burnFee = 0;
        _buyBackFee = 0;
    }

    function restoreAllFee() private {
        _marketingFee = _previousMarketingFee;
        _developmentFee = _previousDevelopmentFee;
        _burnFee = _previousBurnFee;
        _buyBackFee = _previousBuyBackFee;
    }

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

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlackListedBot[sender], "You have no power here!");
        require(!_isBlackListedBot[recipient], "You have no power here!");
        require(!_isBlackListedBot[tx.origin], "You have no power here!");

        if(sender != owner() && recipient != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            // sorry about that, but sniper bots nowadays are buying multiple times, hope I have something more robust to prevent them to nuke the launch :-(
            if (sender == uniswapV2Pair) {
                require(tradingOpen, "Wait for opened trading");
                require(balanceOf(recipient) <= _maxTxAmount, "Already bought maxTxAmount, wait till check off");
                require(balanceOf(tx.origin) <= _maxTxAmount, "Already bought maxTxAmount, wait till check off");
            }
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && sender != uniswapV2Pair) {
            swapTokens(amount, recipient == uniswapV2Pair);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        //transfer amount, it will take tax and eth fee
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    event SwapAndLiquifyFailed(bytes failErr);

    function swapTokens(uint256 amount, bool isSell) private lockTheSwap {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 contractEthBalance = address(this).balance;
        bool toSwapTokens = contractEthBalance < _swapEth;

        if (toSwapTokens) {
            uint256 maxAddedToSlipPage = amount.mul(_swapImpact).div(100);
            if (isSell && contractTokenBalance > maxAddedToSlipPage) {
                contractTokenBalance = maxAddedToSlipPage;
            }
            swapTokensForEth(contractTokenBalance);
        } else {
            uint256 toTransfer = contractEthBalance.mul(_marketingFee.add(_developmentFee)).div(_marketingFee.add(_developmentFee).add(_buyBackFee));

            sendETHToWallets(toTransfer);
            swapEthForTokens(_ContractAddress, contractEthBalance.sub(toTransfer));
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        ) {
            emit SwapTokensForETH(tokenAmount, path);
        } catch (bytes memory e) {
            emit SwapAndLiquifyFailed(e);
        }
    }

    function swapEthForTokens(address token, uint256 amount) private {
        // generate the uniswap pair path of weth -> token
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = token;

        _approve(address(this), address(uniswapV2Router), amount);

        // make the swap
        try uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            _deadWalletAddress,
            block.timestamp.add(300)
        ) {
            emit SwapETHForTokens(amount, path);
        } catch (bytes memory e) {
            emit SwapAndLiquifyFailed(e);
        }
    }

    function sendETHToWallets(uint256 amount) private {
        uint256 fees = _marketingFee.add(_developmentFee);
        uint256 marketing = amount.mul(_marketingFee).div(fees);
        _marketingWalletAddress.transfer(marketing);
        _developmentWalletAddress.transfer(amount.sub(marketing));
    }

    function openTrading() public onlyOwner {
        tradingOpen = true;
    }

    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() public onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToWallets(contractETHBalance);
    }

    function setSwapAndLiquifyEnabled(bool _swapAndLiquifyEnabled) external onlyOwner(){
        swapAndLiquifyEnabled = _swapAndLiquifyEnabled;
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn, uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllEthFees(tMarketingDevelopmentBuyBack);
        _reflectFee(rBurn, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn, uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllEthFees(tMarketingDevelopmentBuyBack);
        _reflectFee(rBurn, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn, uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllEthFees(tMarketingDevelopmentBuyBack);
        _reflectFee(rBurn, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn, uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllEthFees(tMarketingDevelopmentBuyBack);
        _reflectFee(rBurn, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeAllEthFees(uint256 tMarketingDevelopmentBuyBack) private {
        uint256 currentRate = _getRate();
        uint256 rMarketingDevelopmentBuyBack = tMarketingDevelopmentBuyBack.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingDevelopmentBuyBack);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingDevelopmentBuyBack);
    }

    function _reflectFee(uint256 rBurn, uint256 tBurn) private {
        _rTotal = _rTotal.sub(rBurn);
        _tBurnTotal = _tBurnTotal.add(tBurn);
        _tTotal = _tTotal.sub(tBurn);
    }

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tBurn, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _burnFee, _marketingFee.add(_developmentFee).add(_buyBackFee));
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rBurn) = _getRValues(tAmount, tBurn, tMarketingLiquidityFee, currentRate);
        return (rAmount, rTransferAmount, rBurn, tTransferAmount, tBurn, tMarketingLiquidityFee);
    }

    function _getTValues(uint256 tAmount, uint256 burnFee, uint256 marketingDevelopmentBuyBack) private pure returns (uint256, uint256, uint256) {
        uint256 tBurn = tAmount.mul(burnFee).div(100);
        uint256 tMarketingDevelopmentBuyBack = tAmount.mul(marketingDevelopmentBuyBack).div(100);
        uint256 tTransferAmount = tAmount.sub(tBurn).sub(marketingDevelopmentBuyBack);
        return (tTransferAmount, tBurn, tMarketingDevelopmentBuyBack);
    }

    function _getRValues(uint256 tAmount, uint256 tBurn, uint256 tMarketingDevelopmentBuyBack, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        // thanks myobu for finding bug here, now everybody need to deploy new contracts lmao..
        uint256 rMarketingDevelopmentBuyBack = tMarketingDevelopmentBuyBack.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rBurn).sub(rMarketingDevelopmentBuyBack);
        return (rAmount, rTransferAmount, rBurn);
    }

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

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

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 10**9 , 'maxTxAmount should be greater than total 1e9');
        _maxTxAmount = maxTxAmount;
    }

    function recoverTokens(uint256 tokenAmount) public virtual onlyOwner() {
        _approve(address(this), owner(), tokenAmount);
        _transfer(address(this), owner(), tokenAmount);
    }

    function _setContractAddress(address ContractAddress) external onlyOwner() {
        _ContractAddress = ContractAddress;
    }

    function _setSwapEthLimit(uint256 swapEthLimit) external onlyOwner() {
        _swapEth = swapEthLimit;
    }

    function _setSwapImpact(uint256 swapImpact) external onlyOwner() {
        _swapImpact = swapImpact;
    }
}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"failErr","type":"bytes"}],"name":"SwapAndLiquifyFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ContractAddress","type":"address"}],"name":"_setContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapEthLimit","type":"uint256"}],"name":"_setSwapEthLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapImpact","type":"uint256"}],"name":"_setSwapImpact","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapAndLiquifyEnabled","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":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

662386f26fc10000600b55660e3d2cfe61ffff19600c55610120604052600d60e08190526c2132bd37b9a13630b9ba37b33360991b6101009081526200004991600e919062000473565b506040805180820190915260038082526221212160e91b60209092019182526200007691600f9162000473565b506010805460ff191660091790556000601181905560056012819055600360138190556007601481905565048c27395000601555600a601655601793909355601891909155601955601a55601b80546001600160a01b031990811673cca3a312a3a6cd0c627d9b084f255118aac8b2d817909155601c8054821673f55242492c72c115e968111e7bd4633b8405b2481790556ddead000000000000000000000000608052601d805460ff60b01b1961ffff60a01b199190931673a1ab427451f19df7445a22dea7073800ea3b687f1716600160a81b17919091169055600b54601e553480156200016557600080fd5b5060006200017262000460565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c5460036000620001cd62000460565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024457600080fd5b505afa15801562000259573d6000803e3d6000fd5b505050506040513d60208110156200027057600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620002c157600080fd5b505afa158015620002d6573d6000803e3d6000fd5b505050506040513d6020811015620002ed57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200034057600080fd5b505af115801562000355573d6000803e3d6000fd5b505050506040513d60208110156200036c57600080fd5b50516001600160601b0319606091821b811660c0529082901b1660a0526001600660006200039962000464565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526006909352818320805485166001908117909155601b54821684528284208054861682179055601c549091168352912080549092161790556200040c62000460565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a3506200050f565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004b657805160ff1916838001178555620004e6565b82800160010185558215620004e6579182015b82811115620004e6578251825591602001919060010190620004c9565b50620004f4929150620004f8565b5090565b5b80821115620004f45760008155600101620004f9565b60805160601c60a05160601c60c05160601c61365262000572600039806110f65280611ed6528061202a528061206a5250806109c2528061236b5280612423528061244a5280612c775280612d5b5280612d8a525080612db552506136526000f3fe6080604052600436106102345760003560e01c80635342acb41161012e578063a9059cbb116100ab578063ee78d30a1161006f578063ee78d30a14610867578063f2fde38b1461089a578063f4293890146108cd578063f815a842146108e2578063ffb54a99146108f75761023b565b8063a9059cbb14610777578063af9549e0146107b0578063c49b9a80146107eb578063c9567bf914610817578063dd62ed3e1461082c5761023b565b806388f82020116100f257806388f82020146106b75780638da5cb5b146106ea57806395d89b41146106ff5780639a02ecd514610714578063a457c2d71461073e5761023b565b80635342acb4146105df5780636e19b8971461061257806370a082311461063c578063715018a61461066f5780637ded4d6a146106845761023b565b80633685d419116101bc5780634549b039116101805780634549b0391461053b57806349bd5a5e1461056d5780634a74bb021461058257806351bc3c851461059757806352390c02146105ac5761023b565b80633685d4191461045d57806339509351146104905780633bd5d173146104c95780633c9f861d146104f35780634303443d146105085761023b565b80631bbae6e0116102035780631bbae6e01461036f57806323b872dd1461039b5780632d838119146103de57806330599fc514610408578063313ce567146104325761023b565b806306fdde0314610240578063095ea7b3146102ca5780631694505e1461031757806318160ddd146103485761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028f578181015183820152602001610277565b50505050905090810190601f1680156102bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d657600080fd5b50610303600480360360408110156102ed57600080fd5b506001600160a01b0381351690602001356109a2565b604080519115158252519081900360200190f35b34801561032357600080fd5b5061032c6109c0565b604080516001600160a01b039092168252519081900360200190f35b34801561035457600080fd5b5061035d6109e4565b60408051918252519081900360200190f35b34801561037b57600080fd5b506103996004803603602081101561039257600080fd5b50356109ea565b005b3480156103a757600080fd5b50610303600480360360608110156103be57600080fd5b506001600160a01b03813581169160208101359091169060400135610a8a565b3480156103ea57600080fd5b5061035d6004803603602081101561040157600080fd5b5035610b11565b34801561041457600080fd5b506103996004803603602081101561042b57600080fd5b5035610b73565b34801561043e57600080fd5b50610447610bf2565b6040805160ff9092168252519081900360200190f35b34801561046957600080fd5b506103996004803603602081101561048057600080fd5b50356001600160a01b0316610bfb565b34801561049c57600080fd5b50610303600480360360408110156104b357600080fd5b506001600160a01b038135169060200135610dbc565b3480156104d557600080fd5b50610399600480360360208110156104ec57600080fd5b5035610e0a565b3480156104ff57600080fd5b5061035d610ed4565b34801561051457600080fd5b506103996004803603602081101561052b57600080fd5b50356001600160a01b0316610eda565b34801561054757600080fd5b5061035d6004803603604081101561055e57600080fd5b50803590602001351515611062565b34801561057957600080fd5b5061032c6110f4565b34801561058e57600080fd5b50610303611118565b3480156105a357600080fd5b50610399611128565b3480156105b857600080fd5b50610399600480360360208110156105cf57600080fd5b50356001600160a01b0316611196565b3480156105eb57600080fd5b506103036004803603602081101561060257600080fd5b50356001600160a01b0316611378565b34801561061e57600080fd5b506103996004803603602081101561063557600080fd5b5035611396565b34801561064857600080fd5b5061035d6004803603602081101561065f57600080fd5b50356001600160a01b03166113f3565b34801561067b57600080fd5b50610399611455565b34801561069057600080fd5b50610399600480360360208110156106a757600080fd5b50356001600160a01b03166114f7565b3480156106c357600080fd5b50610303600480360360208110156106da57600080fd5b50356001600160a01b0316611684565b3480156106f657600080fd5b5061032c6116a2565b34801561070b57600080fd5b506102556116b1565b34801561072057600080fd5b506103996004803603602081101561073757600080fd5b5035611712565b34801561074a57600080fd5b506103036004803603604081101561076157600080fd5b506001600160a01b03813516906020013561176f565b34801561078357600080fd5b506103036004803603604081101561079a57600080fd5b506001600160a01b0381351690602001356117d7565b3480156107bc57600080fd5b50610399600480360360408110156107d357600080fd5b506001600160a01b03813516906020013515156117eb565b3480156107f757600080fd5b506103996004803603602081101561080e57600080fd5b5035151561186e565b34801561082357600080fd5b506103996118e4565b34801561083857600080fd5b5061035d6004803603604081101561084f57600080fd5b506001600160a01b0381358116916020013516611951565b34801561087357600080fd5b506103996004803603602081101561088a57600080fd5b50356001600160a01b031661197c565b3480156108a657600080fd5b50610399600480360360208110156108bd57600080fd5b50356001600160a01b03166119f6565b3480156108d957600080fd5b50610399611aee565b3480156108ee57600080fd5b5061035d611b50565b34801561090357600080fd5b50610303611b54565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109985780601f1061096d57610100808354040283529160200191610998565b820191906000526020600020905b81548152906001019060200180831161097b57829003601f168201915b5050505050905090565b60006109b66109af611b64565b8484611b68565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5490565b6109f2611b64565b6000546001600160a01b03908116911614610a42576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b633b9aca00811015610a855760405162461bcd60e51b815260040180806020018281038252602c81526020018061347f602c913960400191505060405180910390fd5b601e55565b6000610a97848484611c54565b610b0784610aa3611b64565b610b02856040518060600160405280602881526020016134cc602891396001600160a01b038a16600090815260056020526040812090610ae1611b64565b6001600160a01b0316815260208101919091526040016000205491906120ff565b611b68565b5060019392505050565b6000600c54821115610b545760405162461bcd60e51b815260040180806020018281038252602a8152602001806133b6602a913960400191505060405180910390fd5b6000610b5e612196565b9050610b6a83826121b9565b9150505b919050565b610b7b611b64565b6000546001600160a01b03908116911614610bcb576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b610bdd30610bd76116a2565b83611b68565b610bef30610be96116a2565b83611c54565b50565b60105460ff1690565b610c03611b64565b6000546001600160a01b03908116911614610c53576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610cc0576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610db857816001600160a01b031660088281548110610ce457fe5b6000918252602090912001546001600160a01b03161415610db057600880546000198101908110610d1157fe5b600091825260209091200154600880546001600160a01b039092169183908110610d3757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d8957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610db8565b600101610cc3565b5050565b60006109b6610dc9611b64565b84610b028560056000610dda611b64565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612202565b6000610e14611b64565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e6f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806135cc602c913960400191505060405180910390fd5b6000610e7a8361225c565b505050506001600160a01b038416600090815260036020526040902054919250610ea6919050826122d9565b6001600160a01b038316600090815260036020526040902055600c54610ecc90826122d9565b600c55505050565b600d5490565b610ee2611b64565b6000546001600160a01b03908116911614610f32576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610f8e5760405162461bcd60e51b815260040180806020018281038252602481526020018061353d6024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615610ffc576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600b548311156110bb576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110da5760006110cb8461225c565b509395506109ba945050505050565b60006110e58461225c565b509295506109ba945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601d54600160a81b900460ff1681565b611130611b64565b6000546001600160a01b03908116911614611180576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b600061118b306113f3565b9050610bef8161231b565b61119e611b64565b6000546001600160a01b039081169116146111ee576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561124a5760405162461bcd60e51b81526004018080602001828103825260228152602001806135aa6022913960400191505060405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16156112b8576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611312576001600160a01b0381166000908152600360205260409020546112f890610b11565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b61139e611b64565b6000546001600160a01b039081169116146113ee576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601555565b6001600160a01b03811660009081526007602052604081205460ff161561143357506001600160a01b038116600090815260046020526040902054610b6e565b6001600160a01b0382166000908152600360205260409020546109ba90610b11565b61145d611b64565b6000546001600160a01b039081169116146114ad576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114ff611b64565b6000546001600160a01b0390811691161461154f576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff166115bc576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600a54811015610db857816001600160a01b0316600a82815481106115e057fe5b6000918252602090912001546001600160a01b0316141561167c57600a8054600019810190811061160d57fe5b600091825260209091200154600a80546001600160a01b03909216918390811061163357fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600a805480610d8957fe5b6001016115bf565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109985780601f1061096d57610100808354040283529160200191610998565b61171a611b64565b6000546001600160a01b0390811691161461176a576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601655565b60006109b661177c611b64565b84610b02856040518060600160405280602581526020016135f860259139600560006117a6611b64565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906120ff565b60006109b66117e4611b64565b8484611c54565b6117f3611b64565b6000546001600160a01b03908116911614611843576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b611876611b64565b6000546001600160a01b039081169116146118c6576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d8054911515600160a81b0260ff60a81b19909216919091179055565b6118ec611b64565b6000546001600160a01b0390811691161461193c576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d805460ff60b01b1916600160b01b179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611984611b64565b6000546001600160a01b039081169116146119d4576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6119fe611b64565b6000546001600160a01b03908116911614611a4e576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b038116611a935760405162461bcd60e51b81526004018080602001828103825260268152602001806133e06026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611af6611b64565b6000546001600160a01b03908116911614611b46576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b47610bef8161267b565b4790565b601d54600160b01b900460ff1681565b3390565b6001600160a01b038316611bad5760405162461bcd60e51b81526004018080602001828103825260248152602001806135866024913960400191505060405180910390fd5b6001600160a01b038216611bf25760405162461bcd60e51b81526004018080602001828103825260228152602001806134066022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611c995760405162461bcd60e51b81526004018080602001828103825260258152602001806135616025913960400191505060405180910390fd5b6001600160a01b038216611cde5760405162461bcd60e51b81526004018080602001828103825260238152602001806133936023913960400191505060405180910390fd5b60008111611d1d5760405162461bcd60e51b81526004018080602001828103825260298152602001806135146029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff1615611d85576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6001600160a01b03821660009081526009602052604090205460ff1615611ded576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b3260009081526009602052604090205460ff1615611e4c576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b611e546116a2565b6001600160a01b0316836001600160a01b031614158015611e8e5750611e786116a2565b6001600160a01b0316826001600160a01b031614155b15611ffe57601e54811115611ed45760405162461bcd60e51b81526004018080602001828103825260288152602001806134576028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161415611ffe57601d54600160b01b900460ff16611f6c576040805162461bcd60e51b815260206004820152601760248201527f5761697420666f72206f70656e65642074726164696e67000000000000000000604482015290519081900360640190fd5b601e54611f78836113f3565b1115611fb55760405162461bcd60e51b815260040180806020018281038252602f815260200180613428602f913960400191505060405180910390fd5b601e54611fc1326113f3565b1115611ffe5760405162461bcd60e51b815260040180806020018281038252602f815260200180613428602f913960400191505060405180910390fd5b601d54600160a01b900460ff161580156120215750601d54600160a81b900460ff165b801561205f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156120a2576120a2817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612734565b6001600160a01b03831660009081526006602052604090205460019060ff16806120e457506001600160a01b03831660009081526006602052604090205460ff165b156120ed575060005b6120f984848484612827565b50505050565b6000818484111561218e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561215357818101518382015260200161213b565b50505050905090810190601f1680156121805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006121a3612995565b90925090506121b282826121b9565b9250505090565b60006121fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af8565b9392505050565b6000828201838110156121fb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006122998a60115461229460145461228e60135460125461220290919063ffffffff16565b90612202565b612b5d565b92509250925060006122a9612196565b905060008060006122bc8e878787612bac565b919e509c509a509598509396509194505050505091939550919395565b60006121fb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120ff565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061234957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c257600080fd5b505afa1580156123d6573d6000803e3d6000fd5b505050506040513d60208110156123ec57600080fd5b50518151829060019081106123fd57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612448307f000000000000000000000000000000000000000000000000000000000000000084611b68565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156124ed5781810151838201526020016124d5565b505050509050019650505050505050600060405180830381600087803b15801561251657600080fd5b505af1925050508015612527575060015b6125fa573d808015612555576040519150601f19603f3d011682016040523d82523d6000602084013e61255a565b606091505b507fc062bf45765a468f8a8d2ac697498f1f0211f1c5ac8a9c51fad14b916351c565816040518080602001828103825283818151815260200191508051906020019080838360005b838110156125ba5781810151838201526020016125a2565b50505050905090810190601f1680156125e75780820380516001836020036101000a031916815260200191505b509250505060405180910390a150610db8565b7f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561266357818101518382015260200161264b565b50505050905001935050505060405180910390a15050565b600061269460135460125461220290919063ffffffff16565b905060006126b7826126b160125486612bfc90919063ffffffff16565b906121b9565b601b546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156126f2573d6000803e3d6000fd5b50601c546001600160a01b03166108fc61270c85846122d9565b6040518115909202916000818181858888f193505050501580156120f9573d6000803e3d6000fd5b601d805460ff60a01b1916600160a01b1790556000612752306113f3565b6015549091504790811080156127a457600061277e60646126b160165489612bfc90919063ffffffff16565b905084801561278c57508084115b15612795578093505b61279e8461231b565b50612813565b60006127e76127c660145461228e60135460125461220290919063ffffffff16565b6126b16127e060135460125461220290919063ffffffff16565b8690612bfc565b90506127f28161267b565b601d54612811906001600160a01b031661280c85846122d9565b612c55565b505b5050601d805460ff60a01b19169055505050565b8061283457612834612fd9565b6001600160a01b03841660009081526007602052604090205460ff16801561287557506001600160a01b03831660009081526007602052604090205460ff16155b1561288a57612885848484613038565b612988565b6001600160a01b03841660009081526007602052604090205460ff161580156128cb57506001600160a01b03831660009081526007602052604090205460ff165b156128db5761288584848461315c565b6001600160a01b03841660009081526007602052604090205460ff1615801561291d57506001600160a01b03831660009081526007602052604090205460ff16155b1561292d57612885848484613205565b6001600160a01b03841660009081526007602052604090205460ff16801561296d57506001600160a01b03831660009081526007602052604090205460ff165b1561297d57612885848484613249565b612988848484613205565b806120f9576120f96132bc565b600c54600b546000918291825b600854811015612ac6578260036000600884815481106129be57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a2357508160046000600884815481106129fc57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a3a57600c54600b5494509450505050612af4565b612a7a6003600060088481548110612a4e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122d9565b9250612abc6004600060088481548110612a9057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122d9565b91506001016129a2565b50600b54600c54612ad6916121b9565b821015612aee57600c54600b54935093505050612af4565b90925090505b9091565b60008183612b475760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561215357818101518382015260200161213b565b506000838581612b5357fe5b0495945050505050565b6000808080612b7160646126b18989612bfc565b90506000612b8460646126b18a89612bfc565b90506000612b9c87612b968b866122d9565b906122d9565b9992985090965090945050505050565b6000808080612bbb8886612bfc565b90506000612bc98887612bfc565b90506000612bd78888612bfc565b90506000612be982612b9686866122d9565b939b939a50919850919650505050505050565b600082612c0b575060006109ba565b82820282848281612c1857fe5b04146121fb5760405162461bcd60e51b81526004018080602001828103825260218152602001806134ab6021913960400191505060405180910390fd5b60408051600280825260608083018452926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612cce57600080fd5b505afa158015612ce2573d6000803e3d6000fd5b505050506040513d6020811015612cf857600080fd5b505181518290600090612d0757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612d3557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612d80307f000000000000000000000000000000000000000000000000000000000000000084611b68565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663b6f9de95836000847f0000000000000000000000000000000000000000000000000000000000000000612de04261012c612202565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612e4a578181015183820152602001612e32565b50505050905001955050505050506000604051808303818588803b158015612e7157600080fd5b505af193505050508015612e83575060015b612f56573d808015612eb1576040519150601f19603f3d011682016040523d82523d6000602084013e612eb6565b606091505b507fc062bf45765a468f8a8d2ac697498f1f0211f1c5ac8a9c51fad14b916351c565816040518080602001828103825283818151815260200191508051906020019080838360005b83811015612f16578181015183820152602001612efe565b50505050905090810190601f168015612f435780820380516001836020036101000a031916815260200191505b509250505060405180910390a150612fd4565b7f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015612fbf578181015183820152602001612fa7565b50505050905001935050505060405180910390a15b505050565b601254158015612fe95750601354155b8015612ff55750601154155b80156130015750601454155b1561300b57613036565b60128054601855601380546019556011805460175560148054601a5560009384905591839055829055555b565b60008060008060008061304a8761225c565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061307c90886122d9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130ab90876122d9565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130da9086612202565b6001600160a01b0389166000908152600360205260409020556130fc816132d6565b613106848361335e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061316e8761225c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131a090876122d9565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131d69084612202565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130da9086612202565b6000806000806000806132178761225c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130ab90876122d9565b60008060008060008061325b8761225c565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061328d90886122d9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131a090876122d9565b601854601255601954601355601754601155601a54601455565b60006132e0612196565b905060006132ee8383612bfc565b3060009081526003602052604090205490915061330b9082612202565b3060009081526003602090815260408083209390935560079052205460ff1615612fd457306000908152600460205260409020546133499084612202565b30600090815260046020526040902055505050565b600c5461336b90836122d9565b600c55600d5461337b9082612202565b600d55600b5461338b90826122d9565b600b55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373416c726561647920626f75676874206d61785478416d6f756e742c20776169742074696c6c20636865636b206f66665472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209bdd07b808d1ad0cf980e8c9a0740d083eb1d7825c5d194e59204b46d1acdc8664736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80635342acb41161012e578063a9059cbb116100ab578063ee78d30a1161006f578063ee78d30a14610867578063f2fde38b1461089a578063f4293890146108cd578063f815a842146108e2578063ffb54a99146108f75761023b565b8063a9059cbb14610777578063af9549e0146107b0578063c49b9a80146107eb578063c9567bf914610817578063dd62ed3e1461082c5761023b565b806388f82020116100f257806388f82020146106b75780638da5cb5b146106ea57806395d89b41146106ff5780639a02ecd514610714578063a457c2d71461073e5761023b565b80635342acb4146105df5780636e19b8971461061257806370a082311461063c578063715018a61461066f5780637ded4d6a146106845761023b565b80633685d419116101bc5780634549b039116101805780634549b0391461053b57806349bd5a5e1461056d5780634a74bb021461058257806351bc3c851461059757806352390c02146105ac5761023b565b80633685d4191461045d57806339509351146104905780633bd5d173146104c95780633c9f861d146104f35780634303443d146105085761023b565b80631bbae6e0116102035780631bbae6e01461036f57806323b872dd1461039b5780632d838119146103de57806330599fc514610408578063313ce567146104325761023b565b806306fdde0314610240578063095ea7b3146102ca5780631694505e1461031757806318160ddd146103485761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028f578181015183820152602001610277565b50505050905090810190601f1680156102bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102d657600080fd5b50610303600480360360408110156102ed57600080fd5b506001600160a01b0381351690602001356109a2565b604080519115158252519081900360200190f35b34801561032357600080fd5b5061032c6109c0565b604080516001600160a01b039092168252519081900360200190f35b34801561035457600080fd5b5061035d6109e4565b60408051918252519081900360200190f35b34801561037b57600080fd5b506103996004803603602081101561039257600080fd5b50356109ea565b005b3480156103a757600080fd5b50610303600480360360608110156103be57600080fd5b506001600160a01b03813581169160208101359091169060400135610a8a565b3480156103ea57600080fd5b5061035d6004803603602081101561040157600080fd5b5035610b11565b34801561041457600080fd5b506103996004803603602081101561042b57600080fd5b5035610b73565b34801561043e57600080fd5b50610447610bf2565b6040805160ff9092168252519081900360200190f35b34801561046957600080fd5b506103996004803603602081101561048057600080fd5b50356001600160a01b0316610bfb565b34801561049c57600080fd5b50610303600480360360408110156104b357600080fd5b506001600160a01b038135169060200135610dbc565b3480156104d557600080fd5b50610399600480360360208110156104ec57600080fd5b5035610e0a565b3480156104ff57600080fd5b5061035d610ed4565b34801561051457600080fd5b506103996004803603602081101561052b57600080fd5b50356001600160a01b0316610eda565b34801561054757600080fd5b5061035d6004803603604081101561055e57600080fd5b50803590602001351515611062565b34801561057957600080fd5b5061032c6110f4565b34801561058e57600080fd5b50610303611118565b3480156105a357600080fd5b50610399611128565b3480156105b857600080fd5b50610399600480360360208110156105cf57600080fd5b50356001600160a01b0316611196565b3480156105eb57600080fd5b506103036004803603602081101561060257600080fd5b50356001600160a01b0316611378565b34801561061e57600080fd5b506103996004803603602081101561063557600080fd5b5035611396565b34801561064857600080fd5b5061035d6004803603602081101561065f57600080fd5b50356001600160a01b03166113f3565b34801561067b57600080fd5b50610399611455565b34801561069057600080fd5b50610399600480360360208110156106a757600080fd5b50356001600160a01b03166114f7565b3480156106c357600080fd5b50610303600480360360208110156106da57600080fd5b50356001600160a01b0316611684565b3480156106f657600080fd5b5061032c6116a2565b34801561070b57600080fd5b506102556116b1565b34801561072057600080fd5b506103996004803603602081101561073757600080fd5b5035611712565b34801561074a57600080fd5b506103036004803603604081101561076157600080fd5b506001600160a01b03813516906020013561176f565b34801561078357600080fd5b506103036004803603604081101561079a57600080fd5b506001600160a01b0381351690602001356117d7565b3480156107bc57600080fd5b50610399600480360360408110156107d357600080fd5b506001600160a01b03813516906020013515156117eb565b3480156107f757600080fd5b506103996004803603602081101561080e57600080fd5b5035151561186e565b34801561082357600080fd5b506103996118e4565b34801561083857600080fd5b5061035d6004803603604081101561084f57600080fd5b506001600160a01b0381358116916020013516611951565b34801561087357600080fd5b506103996004803603602081101561088a57600080fd5b50356001600160a01b031661197c565b3480156108a657600080fd5b50610399600480360360208110156108bd57600080fd5b50356001600160a01b03166119f6565b3480156108d957600080fd5b50610399611aee565b3480156108ee57600080fd5b5061035d611b50565b34801561090357600080fd5b50610303611b54565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109985780601f1061096d57610100808354040283529160200191610998565b820191906000526020600020905b81548152906001019060200180831161097b57829003601f168201915b5050505050905090565b60006109b66109af611b64565b8484611b68565b5060015b92915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b5490565b6109f2611b64565b6000546001600160a01b03908116911614610a42576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b633b9aca00811015610a855760405162461bcd60e51b815260040180806020018281038252602c81526020018061347f602c913960400191505060405180910390fd5b601e55565b6000610a97848484611c54565b610b0784610aa3611b64565b610b02856040518060600160405280602881526020016134cc602891396001600160a01b038a16600090815260056020526040812090610ae1611b64565b6001600160a01b0316815260208101919091526040016000205491906120ff565b611b68565b5060019392505050565b6000600c54821115610b545760405162461bcd60e51b815260040180806020018281038252602a8152602001806133b6602a913960400191505060405180910390fd5b6000610b5e612196565b9050610b6a83826121b9565b9150505b919050565b610b7b611b64565b6000546001600160a01b03908116911614610bcb576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b610bdd30610bd76116a2565b83611b68565b610bef30610be96116a2565b83611c54565b50565b60105460ff1690565b610c03611b64565b6000546001600160a01b03908116911614610c53576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610cc0576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610db857816001600160a01b031660088281548110610ce457fe5b6000918252602090912001546001600160a01b03161415610db057600880546000198101908110610d1157fe5b600091825260209091200154600880546001600160a01b039092169183908110610d3757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610d8957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610db8565b600101610cc3565b5050565b60006109b6610dc9611b64565b84610b028560056000610dda611b64565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612202565b6000610e14611b64565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e6f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806135cc602c913960400191505060405180910390fd5b6000610e7a8361225c565b505050506001600160a01b038416600090815260036020526040902054919250610ea6919050826122d9565b6001600160a01b038316600090815260036020526040902055600c54610ecc90826122d9565b600c55505050565b600d5490565b610ee2611b64565b6000546001600160a01b03908116911614610f32576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610f8e5760405162461bcd60e51b815260040180806020018281038252602481526020018061353d6024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615610ffc576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000600b548311156110bb576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110da5760006110cb8461225c565b509395506109ba945050505050565b60006110e58461225c565b509295506109ba945050505050565b7f000000000000000000000000d8a3e38a13ac26cccae0196107bba29aa3e0e00281565b601d54600160a81b900460ff1681565b611130611b64565b6000546001600160a01b03908116911614611180576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b600061118b306113f3565b9050610bef8161231b565b61119e611b64565b6000546001600160a01b039081169116146111ee576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561124a5760405162461bcd60e51b81526004018080602001828103825260228152602001806135aa6022913960400191505060405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16156112b8576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611312576001600160a01b0381166000908152600360205260409020546112f890610b11565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b61139e611b64565b6000546001600160a01b039081169116146113ee576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601555565b6001600160a01b03811660009081526007602052604081205460ff161561143357506001600160a01b038116600090815260046020526040902054610b6e565b6001600160a01b0382166000908152600360205260409020546109ba90610b11565b61145d611b64565b6000546001600160a01b039081169116146114ad576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114ff611b64565b6000546001600160a01b0390811691161461154f576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff166115bc576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600a54811015610db857816001600160a01b0316600a82815481106115e057fe5b6000918252602090912001546001600160a01b0316141561167c57600a8054600019810190811061160d57fe5b600091825260209091200154600a80546001600160a01b03909216918390811061163357fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600a805480610d8957fe5b6001016115bf565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109985780601f1061096d57610100808354040283529160200191610998565b61171a611b64565b6000546001600160a01b0390811691161461176a576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601655565b60006109b661177c611b64565b84610b02856040518060600160405280602581526020016135f860259139600560006117a6611b64565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906120ff565b60006109b66117e4611b64565b8484611c54565b6117f3611b64565b6000546001600160a01b03908116911614611843576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b611876611b64565b6000546001600160a01b039081169116146118c6576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d8054911515600160a81b0260ff60a81b19909216919091179055565b6118ec611b64565b6000546001600160a01b0390811691161461193c576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d805460ff60b01b1916600160b01b179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611984611b64565b6000546001600160a01b039081169116146119d4576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6119fe611b64565b6000546001600160a01b03908116911614611a4e576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b6001600160a01b038116611a935760405162461bcd60e51b81526004018080602001828103825260268152602001806133e06026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611af6611b64565b6000546001600160a01b03908116911614611b46576040805162461bcd60e51b815260206004820181905260248201526000805160206134f4833981519152604482015290519081900360640190fd5b47610bef8161267b565b4790565b601d54600160b01b900460ff1681565b3390565b6001600160a01b038316611bad5760405162461bcd60e51b81526004018080602001828103825260248152602001806135866024913960400191505060405180910390fd5b6001600160a01b038216611bf25760405162461bcd60e51b81526004018080602001828103825260228152602001806134066022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611c995760405162461bcd60e51b81526004018080602001828103825260258152602001806135616025913960400191505060405180910390fd5b6001600160a01b038216611cde5760405162461bcd60e51b81526004018080602001828103825260238152602001806133936023913960400191505060405180910390fd5b60008111611d1d5760405162461bcd60e51b81526004018080602001828103825260298152602001806135146029913960400191505060405180910390fd5b6001600160a01b03831660009081526009602052604090205460ff1615611d85576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6001600160a01b03821660009081526009602052604090205460ff1615611ded576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b3260009081526009602052604090205460ff1615611e4c576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b611e546116a2565b6001600160a01b0316836001600160a01b031614158015611e8e5750611e786116a2565b6001600160a01b0316826001600160a01b031614155b15611ffe57601e54811115611ed45760405162461bcd60e51b81526004018080602001828103825260288152602001806134576028913960400191505060405180910390fd5b7f000000000000000000000000d8a3e38a13ac26cccae0196107bba29aa3e0e0026001600160a01b0316836001600160a01b03161415611ffe57601d54600160b01b900460ff16611f6c576040805162461bcd60e51b815260206004820152601760248201527f5761697420666f72206f70656e65642074726164696e67000000000000000000604482015290519081900360640190fd5b601e54611f78836113f3565b1115611fb55760405162461bcd60e51b815260040180806020018281038252602f815260200180613428602f913960400191505060405180910390fd5b601e54611fc1326113f3565b1115611ffe5760405162461bcd60e51b815260040180806020018281038252602f815260200180613428602f913960400191505060405180910390fd5b601d54600160a01b900460ff161580156120215750601d54600160a81b900460ff165b801561205f57507f000000000000000000000000d8a3e38a13ac26cccae0196107bba29aa3e0e0026001600160a01b0316836001600160a01b031614155b156120a2576120a2817f000000000000000000000000d8a3e38a13ac26cccae0196107bba29aa3e0e0026001600160a01b0316846001600160a01b031614612734565b6001600160a01b03831660009081526006602052604090205460019060ff16806120e457506001600160a01b03831660009081526006602052604090205460ff165b156120ed575060005b6120f984848484612827565b50505050565b6000818484111561218e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561215357818101518382015260200161213b565b50505050905090810190601f1680156121805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006121a3612995565b90925090506121b282826121b9565b9250505090565b60006121fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af8565b9392505050565b6000828201838110156121fb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006122998a60115461229460145461228e60135460125461220290919063ffffffff16565b90612202565b612b5d565b92509250925060006122a9612196565b905060008060006122bc8e878787612bac565b919e509c509a509598509396509194505050505091939550919395565b60006121fb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120ff565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061234957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c257600080fd5b505afa1580156123d6573d6000803e3d6000fd5b505050506040513d60208110156123ec57600080fd5b50518151829060019081106123fd57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612448307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b68565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156124ed5781810151838201526020016124d5565b505050509050019650505050505050600060405180830381600087803b15801561251657600080fd5b505af1925050508015612527575060015b6125fa573d808015612555576040519150601f19603f3d011682016040523d82523d6000602084013e61255a565b606091505b507fc062bf45765a468f8a8d2ac697498f1f0211f1c5ac8a9c51fad14b916351c565816040518080602001828103825283818151815260200191508051906020019080838360005b838110156125ba5781810151838201526020016125a2565b50505050905090810190601f1680156125e75780820380516001836020036101000a031916815260200191505b509250505060405180910390a150610db8565b7f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b8381101561266357818101518382015260200161264b565b50505050905001935050505060405180910390a15050565b600061269460135460125461220290919063ffffffff16565b905060006126b7826126b160125486612bfc90919063ffffffff16565b906121b9565b601b546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156126f2573d6000803e3d6000fd5b50601c546001600160a01b03166108fc61270c85846122d9565b6040518115909202916000818181858888f193505050501580156120f9573d6000803e3d6000fd5b601d805460ff60a01b1916600160a01b1790556000612752306113f3565b6015549091504790811080156127a457600061277e60646126b160165489612bfc90919063ffffffff16565b905084801561278c57508084115b15612795578093505b61279e8461231b565b50612813565b60006127e76127c660145461228e60135460125461220290919063ffffffff16565b6126b16127e060135460125461220290919063ffffffff16565b8690612bfc565b90506127f28161267b565b601d54612811906001600160a01b031661280c85846122d9565b612c55565b505b5050601d805460ff60a01b19169055505050565b8061283457612834612fd9565b6001600160a01b03841660009081526007602052604090205460ff16801561287557506001600160a01b03831660009081526007602052604090205460ff16155b1561288a57612885848484613038565b612988565b6001600160a01b03841660009081526007602052604090205460ff161580156128cb57506001600160a01b03831660009081526007602052604090205460ff165b156128db5761288584848461315c565b6001600160a01b03841660009081526007602052604090205460ff1615801561291d57506001600160a01b03831660009081526007602052604090205460ff16155b1561292d57612885848484613205565b6001600160a01b03841660009081526007602052604090205460ff16801561296d57506001600160a01b03831660009081526007602052604090205460ff165b1561297d57612885848484613249565b612988848484613205565b806120f9576120f96132bc565b600c54600b546000918291825b600854811015612ac6578260036000600884815481106129be57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a2357508160046000600884815481106129fc57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a3a57600c54600b5494509450505050612af4565b612a7a6003600060088481548110612a4e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906122d9565b9250612abc6004600060088481548110612a9057fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906122d9565b91506001016129a2565b50600b54600c54612ad6916121b9565b821015612aee57600c54600b54935093505050612af4565b90925090505b9091565b60008183612b475760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561215357818101518382015260200161213b565b506000838581612b5357fe5b0495945050505050565b6000808080612b7160646126b18989612bfc565b90506000612b8460646126b18a89612bfc565b90506000612b9c87612b968b866122d9565b906122d9565b9992985090965090945050505050565b6000808080612bbb8886612bfc565b90506000612bc98887612bfc565b90506000612bd78888612bfc565b90506000612be982612b9686866122d9565b939b939a50919850919650505050505050565b600082612c0b575060006109ba565b82820282848281612c1857fe5b04146121fb5760405162461bcd60e51b81526004018080602001828103825260218152602001806134ab6021913960400191505060405180910390fd5b60408051600280825260608083018452926020830190803683370190505090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612cce57600080fd5b505afa158015612ce2573d6000803e3d6000fd5b505050506040513d6020811015612cf857600080fd5b505181518290600090612d0757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612d3557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612d80307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b68565b6001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead612de04261012c612202565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015612e4a578181015183820152602001612e32565b50505050905001955050505050506000604051808303818588803b158015612e7157600080fd5b505af193505050508015612e83575060015b612f56573d808015612eb1576040519150601f19603f3d011682016040523d82523d6000602084013e612eb6565b606091505b507fc062bf45765a468f8a8d2ac697498f1f0211f1c5ac8a9c51fad14b916351c565816040518080602001828103825283818151815260200191508051906020019080838360005b83811015612f16578181015183820152602001612efe565b50505050905090810190601f168015612f435780820380516001836020036101000a031916815260200191505b509250505060405180910390a150612fd4565b7f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015612fbf578181015183820152602001612fa7565b50505050905001935050505060405180910390a15b505050565b601254158015612fe95750601354155b8015612ff55750601154155b80156130015750601454155b1561300b57613036565b60128054601855601380546019556011805460175560148054601a5560009384905591839055829055555b565b60008060008060008061304a8761225c565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061307c90886122d9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546130ab90876122d9565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546130da9086612202565b6001600160a01b0389166000908152600360205260409020556130fc816132d6565b613106848361335e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061316e8761225c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131a090876122d9565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546131d69084612202565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546130da9086612202565b6000806000806000806132178761225c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506130ab90876122d9565b60008060008060008061325b8761225c565b6001600160a01b038f16600090815260046020526040902054959b5093995091975095509350915061328d90886122d9565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131a090876122d9565b601854601255601954601355601754601155601a54601455565b60006132e0612196565b905060006132ee8383612bfc565b3060009081526003602052604090205490915061330b9082612202565b3060009081526003602090815260408083209390935560079052205460ff1615612fd457306000908152600460205260409020546133499084612202565b30600090815260046020526040902055505050565b600c5461336b90836122d9565b600c55600d5461337b9082612202565b600d55600b5461338b90826122d9565b600b55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373416c726561647920626f75676874206d61785478416d6f756e742c20776169742074696c6c20636865636b206f66665472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e6d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209bdd07b808d1ad0cf980e8c9a0740d083eb1d7825c5d194e59204b46d1acdc8664736f6c634300060c0033

Deployed Bytecode Sourcemap

23292:22692:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26731:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27643:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27643:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;25119:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;25119:51:0;;;;;;;;;;;;;;27008:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;45209:201;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45209:201:0;;:::i;:::-;;27812:313;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27812:313:0;;;;;;;;;;;;;;;;;:::i;29787:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29787:253:0;;:::i;45418:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45418:192:0;;:::i;26917:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30502:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30502:479:0;-1:-1:-1;;;;;30502:479:0;;:::i;28133:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28133:218:0;;;;;;;;:::i;29005:330::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29005:330:0;;:::i;28909:88::-;;;;;;;;;;;;;:::i;30989:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30989:352:0;-1:-1:-1;;;;;30989:352:0;;:::i;29343:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29343:436:0;;;;;;;;;:::i;25177:38::-;;;;;;;;;;;;;:::i;25260:40::-;;;;;;;;;;;;;:::i;38067:156::-;;;;;;;;;;;;;:::i;30048:446::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30048:446:0;-1:-1:-1;;;;;30048:446:0;;:::i;32530:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32530:123:0;-1:-1:-1;;;;;32530:123:0;;:::i;45754:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45754:111:0;;:::i;27111:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27111:198:0;-1:-1:-1;;;;;27111:198:0;;:::i;14919:148::-;;;;;;;;;;;;;:::i;31349:500::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31349:500:0;-1:-1:-1;;;;;31349:500:0;;:::i;28636:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28636:120:0;-1:-1:-1;;;;;28636:120:0;;:::i;14285:79::-;;;;;;;;;;;;;:::i;26822:87::-;;;;;;;;;;;;;:::i;45873:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45873:108:0;;:::i;28359:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28359:269:0;;;;;;;;:::i;27317:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27317:167:0;;;;;;;;:::i;28764:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28764:137:0;;;;;;;;;;:::i;38396:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38396:148:0;;;;:::i;37840:77::-;;;;;;;;;;;;;:::i;27492:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27492:143:0;;;;;;;;;;:::i;45618:128::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45618:128:0;-1:-1:-1;;;;;45618:128:0;;:::i;15219:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15219:244:0;-1:-1:-1;;;;;15219:244:0;;:::i;38231:157::-;;;;;;;;;;;;;:::i;45091:110::-;;;;;;;;;;;;;:::i;25307:31::-;;;;;;;;;;;;;:::i;26731:83::-;26801:5;26794:12;;;;;;;;-1:-1:-1;;26794:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26768:13;;26794:12;;26801:5;;26794:12;;26801:5;26794:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26731:83;:::o;27643:161::-;27718:4;27735:39;27744:12;:10;:12::i;:::-;27758:7;27767:6;27735:8;:39::i;:::-;-1:-1:-1;27792:4:0;27643:161;;;;;:::o;25119:51::-;;;:::o;27008:95::-;27088:7;;27008:95;:::o;45209:201::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;45310:5:::1;45295:11;:20;;45287:78;;;;-1:-1:-1::0;;;45287:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45376:12;:26:::0;45209:201::o;27812:313::-;27910:4;27927:36;27937:6;27945:9;27956:6;27927:9;:36::i;:::-;27974:121;27983:6;27991:12;:10;:12::i;:::-;28005:89;28043:6;28005:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28005:19:0;;;;;;:11;:19;;;;;;28025:12;:10;:12::i;:::-;-1:-1:-1;;;;;28005:33:0;;;;;;;;;;;;-1:-1:-1;28005:33:0;;;:89;:37;:89::i;:::-;27974:8;:121::i;:::-;-1:-1:-1;28113:4:0;27812:313;;;;;:::o;29787:253::-;29853:7;29892;;29881;:18;;29873:73;;;;-1:-1:-1;;;29873:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29957:19;29980:10;:8;:10::i;:::-;29957:33;-1:-1:-1;30008:24:0;:7;29957:33;30008:11;:24::i;:::-;30001:31;;;29787:253;;;;:::o;45418:192::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;45500:45:::1;45517:4;45524:7;:5;:7::i;:::-;45533:11;45500:8;:45::i;:::-;45556:46;45574:4;45581:7;:5;:7::i;:::-;45590:11;45556:9;:46::i;:::-;45418:192:::0;:::o;26917:83::-;26983:9;;;;26917:83;:::o;30502:479::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30584:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30576:60;;;::::0;;-1:-1:-1;;;30576:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30652:9;30647:327;30671:9;:16:::0;30667:20;::::1;30647:327;;;30729:7;-1:-1:-1::0;;;;;30713:23:0::1;:9;30723:1;30713:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30713:12:0::1;:23;30709:254;;;30772:9;30782:16:::0;;-1:-1:-1;;30782:20:0;;;30772:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;30757:9:::1;:12:::0;;-1:-1:-1;;;;;30772:31:0;;::::1;::::0;30767:1;;30757:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;30757:46:0::1;-1:-1:-1::0;;;;;30757:46:0;;::::1;;::::0;;30822:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30861:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30861:28:0::1;::::0;;30908:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30908:15:0;;;;;-1:-1:-1;;;;;;30908:15:0::1;::::0;;;;;30942:5:::1;;30709:254;30689:3;;30647:327;;;;30502:479:::0;:::o;28133:218::-;28221:4;28238:83;28247:12;:10;:12::i;:::-;28261:7;28270:50;28309:10;28270:11;:25;28282:12;:10;:12::i;:::-;-1:-1:-1;;;;;28270:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;28270:25:0;;;:34;;;;;;;;;;;:38;:50::i;29005:330::-;29057:14;29074:12;:10;:12::i;:::-;-1:-1:-1;;;;;29106:19:0;;;;;;:11;:19;;;;;;29057:29;;-1:-1:-1;29106:19:0;;29105:20;29097:77;;;;-1:-1:-1;;;29097:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29186:15;29210:19;29221:7;29210:10;:19::i;:::-;-1:-1:-1;;;;;;;;;29258:15:0;;;;;;:7;:15;;;;;;29185:44;;-1:-1:-1;29258:28:0;;:15;-1:-1:-1;29185:44:0;29258:19;:28::i;:::-;-1:-1:-1;;;;;29240:15:0;;;;;;:7;:15;;;;;:46;29307:7;;:20;;29319:7;29307:11;:20::i;:::-;29297:7;:30;-1:-1:-1;;;29005:330:0:o;28909:88::-;28978:11;;28909:88;:::o;30989:352::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;31084:42:::1;-1:-1:-1::0;;;;;31073:53:0;::::1;;;31065:102;;;;-1:-1:-1::0;;;31065:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31187:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;31186:27;31178:70;;;::::0;;-1:-1:-1;;;31178:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;31259:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;31259:33:0::1;31288:4;31259:33:::0;;::::1;::::0;;;31303:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;31303:30:0::1;::::0;;::::1;::::0;;30989:352::o;29343:436::-;29433:7;29472;;29461;:18;;29453:62;;;;;-1:-1:-1;;;29453:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29531:17;29526:246;;29566:15;29590:19;29601:7;29590:10;:19::i;:::-;-1:-1:-1;29565:44:0;;-1:-1:-1;29624:14:0;;-1:-1:-1;;;;;29624:14:0;29526:246;29673:23;29704:19;29715:7;29704:10;:19::i;:::-;-1:-1:-1;29671:52:0;;-1:-1:-1;29738:22:0;;-1:-1:-1;;;;;29738:22:0;25177:38;;;:::o;25260:40::-;;;-1:-1:-1;;;25260:40:0;;;;;:::o;38067:156::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;38121:23:::1;38147:24;38165:4;38147:9;:24::i;:::-;38121:50;;38182:33;38199:15;38182:16;:33::i;30048:446::-:0;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;30143:42:::1;-1:-1:-1::0;;;;;30132:53:0;::::1;;;30124:100;;;;-1:-1:-1::0;;;30124:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;30244:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30243:21;30235:61;;;::::0;;-1:-1:-1;;;30235:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;30310:16:0;::::1;30329:1;30310:16:::0;;;:7:::1;:16;::::0;;;;;:20;30307:108:::1;;-1:-1:-1::0;;;;;30386:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;30366:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;30347:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;30307:108:::1;-1:-1:-1::0;;;;;30425:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;30425:27:0::1;30448:4;30425:27:::0;;::::1;::::0;;;30463:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30463:23:0::1;::::0;;::::1;::::0;;30048:446::o;32530:123::-;-1:-1:-1;;;;;32618:27:0;32594:4;32618:27;;;:18;:27;;;;;;;;;32530:123::o;45754:111::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;45834:8:::1;:23:::0;45754:111::o;27111:198::-;-1:-1:-1;;;;;27201:20:0;;27177:7;27201:20;;;:11;:20;;;;;;;;27197:49;;;-1:-1:-1;;;;;;27230:16:0;;;;;;:7;:16;;;;;;27223:23;;27197:49;-1:-1:-1;;;;;27284:16:0;;;;;;:7;:16;;;;;;27264:37;;:19;:37::i;14919:148::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;15026:1:::1;15010:6:::0;;14989:40:::1;::::0;-1:-1:-1;;;;;15010:6:0;;::::1;::::0;14989:40:::1;::::0;15026:1;;14989:40:::1;15057:1;15040:19:::0;;-1:-1:-1;;;;;;15040:19:0::1;::::0;;14919:148::o;31349:500::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31438:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;31430:65;;;::::0;;-1:-1:-1;;;31430:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31511:9;31506:336;31530:16;:23:::0;31526:27;::::1;31506:336;;;31602:7;-1:-1:-1::0;;;;;31579:30:0::1;:16;31596:1;31579:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31579:19:0::1;:30;31575:256;;;31652:16;31669:23:::0;;-1:-1:-1;;31669:27:0;;;31652:45;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;31630:16:::1;:19:::0;;-1:-1:-1;;;;;31652:45:0;;::::1;::::0;31647:1;;31630:19;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;31630:67:0::1;-1:-1:-1::0;;;;;31630:67:0;;::::1;;::::0;;31716:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;31716:34:0::1;::::0;;31769:16:::1;:22:::0;;;::::1;;;31575:256;31555:3;;31506:336;;28636:120:::0;-1:-1:-1;;;;;28728:20:0;28704:4;28728:20;;;:11;:20;;;;;;;;;28636:120::o;14285:79::-;14323:7;14350:6;-1:-1:-1;;;;;14350:6:0;14285:79;:::o;26822:87::-;26894:7;26887:14;;;;;;;;-1:-1:-1;;26887:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26861:13;;26887:14;;26894:7;;26887:14;;26894:7;26887:14;;;;;;;;;;;;;;;;;;;;;;;;45873:108;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;45949:11:::1;:24:::0;45873:108::o;28359:269::-;28452:4;28469:129;28478:12;:10;:12::i;:::-;28492:7;28501:96;28540:15;28501:96;;;;;;;;;;;;;;;;;:11;:25;28513:12;:10;:12::i;:::-;-1:-1:-1;;;;;28501:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;28501:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;27317:167::-;27395:4;27412:42;27422:12;:10;:12::i;:::-;27436:9;27447:6;27412:9;:42::i;28764:137::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28855:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;28855:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28764:137::o;38396:148::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;38490:21:::1;:46:::0;;;::::1;;-1:-1:-1::0;;;38490:46:0::1;-1:-1:-1::0;;;;38490:46:0;;::::1;::::0;;;::::1;::::0;;38396:148::o;37840:77::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;37891:11:::1;:18:::0;;-1:-1:-1;;;;37891:18:0::1;-1:-1:-1::0;;;37891:18:0::1;::::0;;37840:77::o;27492:143::-;-1:-1:-1;;;;;27600:18:0;;;27573:7;27600:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27492:143::o;45618:128::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;45704:16:::1;:34:::0;;-1:-1:-1;;;;;;45704:34:0::1;-1:-1:-1::0;;;;;45704:34:0;;;::::1;::::0;;;::::1;::::0;;45618:128::o;15219:244::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15308:22:0;::::1;15300:73;;;;-1:-1:-1::0;;;15300:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15410:6;::::0;;15389:38:::1;::::0;-1:-1:-1;;;;;15389:38:0;;::::1;::::0;15410:6;::::1;::::0;15389:38:::1;::::0;::::1;15438:6;:17:::0;;-1:-1:-1;;;;;;15438:17:0::1;-1:-1:-1::0;;;;;15438:17:0;;;::::1;::::0;;;::::1;::::0;;15219:244::o;38231:157::-;14505:12;:10;:12::i;:::-;14495:6;;-1:-1:-1;;;;;14495:6:0;;;:22;;;14487:67;;;;;-1:-1:-1;;;14487:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14487:67:0;;;;;;;;;;;;;;;38312:21:::1;38344:36;38312:21:::0;38344:16:::1;:36::i;45091:110::-:0;45172:21;45091:110;:::o;25307:31::-;;;-1:-1:-1;;;25307:31:0;;;;;:::o;106:106::-;194:10;106:106;:::o;32661:337::-;-1:-1:-1;;;;;32754:19:0;;32746:68;;;;-1:-1:-1;;;32746:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32833:21:0;;32825:68;;;;-1:-1:-1;;;32825:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32906:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32958:32;;;;;;;;;;;;;;;;;32661:337;;;:::o;33006:2081::-;-1:-1:-1;;;;;33103:20:0;;33095:70;;;;-1:-1:-1;;;33095:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33184:23:0;;33176:71;;;;-1:-1:-1;;;33176:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33275:1;33266:6;:10;33258:64;;;;-1:-1:-1;;;33258:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33342:25:0;;;;;;:17;:25;;;;;;;;33341:26;33333:62;;;;;-1:-1:-1;;;33333:62:0;;;;;;;;;;;;-1:-1:-1;;;33333:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33415:28:0;;;;;;:17;:28;;;;;;;;33414:29;33406:65;;;;;-1:-1:-1;;;33406:65:0;;;;;;;;;;;;-1:-1:-1;;;33406:65:0;;;;;;;;;;;;;;;33509:9;33491:28;;;;:17;:28;;;;;;;;33490:29;33482:65;;;;;-1:-1:-1;;;33482:65:0;;;;;;;;;;;;-1:-1:-1;;;33482:65:0;;;;;;;;;;;;;;;33573:7;:5;:7::i;:::-;-1:-1:-1;;;;;33563:17:0;:6;-1:-1:-1;;;;;33563:17:0;;;:41;;;;;33597:7;:5;:7::i;:::-;-1:-1:-1;;;;;33584:20:0;:9;-1:-1:-1;;;;;33584:20:0;;;33563:41;33560:662;;;33639:12;;33629:6;:22;;33621:75;;;;-1:-1:-1;;;33621:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33884:13;-1:-1:-1;;;;;33874:23:0;:6;-1:-1:-1;;;;;33874:23:0;;33870:341;;;33926:11;;-1:-1:-1;;;33926:11:0;;;;33918:47;;;;;-1:-1:-1;;;33918:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34016:12;;33992:20;34002:9;33992;:20::i;:::-;:36;;33984:96;;;;-1:-1:-1;;;33984:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34131:12;;34107:20;34117:9;34107;:20::i;:::-;:36;;34099:96;;;;-1:-1:-1;;;34099:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34523:16;;-1:-1:-1;;;34523:16:0;;;;34522:17;:42;;;;-1:-1:-1;34543:21:0;;-1:-1:-1;;;34543:21:0;;;;34522:42;:69;;;;;34578:13;-1:-1:-1;;;;;34568:23:0;:6;-1:-1:-1;;;;;34568:23:0;;;34522:69;34518:148;;;34608:46;34619:6;34640:13;-1:-1:-1;;;;;34627:26:0;:9;-1:-1:-1;;;;;34627:26:0;;34608:10;:46::i;:::-;-1:-1:-1;;;;;34858:26:0;;34739:12;34858:26;;;:18;:26;;;;;;34754:4;;34858:26;;;:59;;-1:-1:-1;;;;;;34888:29:0;;;;;;:18;:29;;;;;;;;34858:59;34855:105;;;-1:-1:-1;34943:5:0;34855:105;35029:50;35044:6;35052:9;35063:6;35071:7;35029:14;:50::i;:::-;33006:2081;;;;:::o;4193:192::-;4279:7;4315:12;4307:6;;;;4299:29;;;;-1:-1:-1;;;4299:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4351:5:0;;;4193:192::o;44254:163::-;44295:7;44316:15;44333;44352:19;:17;:19::i;:::-;44315:56;;-1:-1:-1;44315:56:0;-1:-1:-1;44389:20:0;44315:56;;44389:11;:20::i;:::-;44382:27;;;;44254:163;:::o;5571:132::-;5629:7;5656:39;5660:1;5663;5656:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5649:46;5571:132;-1:-1:-1;;;5571:132:0:o;3308:181::-;3366:7;3398:5;;;3422:6;;;;3414:46;;;;;-1:-1:-1;;;3414:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;42596:567;42655:7;42664;42673;42682;42691;42700;42721:23;42746:13;42761:30;42795:83;42807:7;42816:8;;42826:51;42865:11;;42826:34;42844:15;;42826:13;;:17;;:34;;;;:::i;:::-;:38;;:51::i;:::-;42795:11;:83::i;:::-;42720:158;;;;;;42889:19;42911:10;:8;:10::i;:::-;42889:32;;42933:15;42950:23;42975:13;42992:64;43004:7;43013:5;43020:22;43044:11;42992;:64::i;:::-;42932:124;;-1:-1:-1;42932:124:0;-1:-1:-1;42932:124:0;-1:-1:-1;43108:15:0;;-1:-1:-1;43125:5:0;;-1:-1:-1;43132:22:0;;-1:-1:-1;;;;;42596:567:0;;;;;;;:::o;3763:136::-;3821:7;3848:43;3852:1;3855;3848:43;;;;;;;;;;;;;;;;;:3;:43::i;36034:739::-;36184:16;;;36198:1;36184:16;;;36160:21;36184:16;;;;;36160:21;36184:16;;;;;;;;;;-1:-1:-1;36184:16:0;36160:40;;36229:4;36211;36216:1;36211:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;36211:23:0;;;-1:-1:-1;;;;;36211:23:0;;;;;36255:15;-1:-1:-1;;;;;36255:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36255:22:0;36245:7;;:4;;36250:1;;36245:7;;;;;;;;;;;:32;-1:-1:-1;;;;;36245:32:0;;;-1:-1:-1;;;;;36245:32:0;;;;;36290:62;36307:4;36322:15;36340:11;36290:8;:62::i;:::-;36395:15;-1:-1:-1;;;;;36395:66:0;;36476:11;36502:1;36546:4;36573;36593:15;36395:224;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36395:224:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36391:375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36731:23;36752:1;36731:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36688:78;36391:375;;;36640:35;36657:11;36670:4;36640:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36034:739;;:::o;37526:306::-;37587:12;37602:34;37620:15;;37602:13;;:17;;:34;;;;:::i;:::-;37587:49;;37647:17;37667:35;37697:4;37667:25;37678:13;;37667:6;:10;;:25;;;;:::i;:::-;:29;;:35::i;:::-;37713:23;;:43;;37647:55;;-1:-1:-1;;;;;;37713:23:0;;:43;;;;;37647:55;;37713:23;:43;:23;:43;37647:55;37713:23;:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37767:25:0;;-1:-1:-1;;;;;37767:25:0;:57;37802:21;:6;37813:9;37802:10;:21::i;:::-;37767:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35145:881;25796:16;:23;;-1:-1:-1;;;;25796:23:0;-1:-1:-1;;;25796:23:0;;;;35256:24:::1;35274:4;35256:9;:24::i;:::-;35393:8;::::0;35225:55;;-1:-1:-1;35320:21:0::1;::::0;35372:29;::::1;35414:605:::0;::::1;;;35447:26;35476:32;35504:3;35476:23;35487:11;;35476:6;:10;;:23;;;;:::i;:32::-;35447:61;;35527:6;:51;;;;;35560:18;35537:20;:41;35527:51;35523:133;;;35622:18;35599:41;;35523:133;35670:38;35687:20;35670:16;:38::i;:::-;35414:605;;;;35741:18;35762:115;35825:51;35864:11;;35825:34;35843:15;;35825:13;;:17;;:34;;;;:::i;:51::-;35762:58;35785:34;35803:15;;35785:13;;:17;;:34;;;;:::i;:::-;35762:18:::0;;:22:::1;:58::i;:115::-;35741:136;;35894:28;35911:10;35894:16;:28::i;:::-;35954:16;::::0;35937:70:::1;::::0;-1:-1:-1;;;;;35954:16:0::1;35972:34;:18:::0;35995:10;35972:22:::1;:34::i;:::-;35937:16;:70::i;:::-;35414:605;;-1:-1:-1::0;;25842:16:0;:24;;-1:-1:-1;;;;25842:24:0;;;-1:-1:-1;;;35145:881:0:o;38552:819::-;38664:7;38660:40;;38686:14;:12;:14::i;:::-;-1:-1:-1;;;;;38717:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;38741:22:0;;;;;;:11;:22;;;;;;;;38740:23;38717:46;38713:597;;;38780:48;38802:6;38810:9;38821:6;38780:21;:48::i;:::-;38713:597;;;-1:-1:-1;;;;;38851:19:0;;;;;;:11;:19;;;;;;;;38850:20;:46;;;;-1:-1:-1;;;;;;38874:22:0;;;;;;:11;:22;;;;;;;;38850:46;38846:464;;;38913:46;38933:6;38941:9;38952:6;38913:19;:46::i;38846:464::-;-1:-1:-1;;;;;38982:19:0;;;;;;:11;:19;;;;;;;;38981:20;:47;;;;-1:-1:-1;;;;;;39006:22:0;;;;;;:11;:22;;;;;;;;39005:23;38981:47;38977:333;;;39045:44;39063:6;39071:9;39082:6;39045:17;:44::i;38977:333::-;-1:-1:-1;;;;;39111:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;39134:22:0;;;;;;:11;:22;;;;;;;;39111:45;39107:203;;;39173:48;39195:6;39203:9;39214:6;39173:21;:48::i;39107:203::-;39254:44;39272:6;39280:9;39291:6;39254:17;:44::i;:::-;39326:7;39322:41;;39348:15;:13;:15::i;44425:555::-;44522:7;;44558;;44475;;;;;44576:289;44600:9;:16;44596:20;;44576:289;;;44666:7;44642;:21;44650:9;44660:1;44650:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44650:12:0;44642:21;;;;;;;;;;;;;:31;;:66;;;44701:7;44677;:21;44685:9;44695:1;44685:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44685:12:0;44677:21;;;;;;;;;;;;;:31;44642:66;44638:97;;;44718:7;;44727;;44710:25;;;;;;;;;44638:97;44760:34;44772:7;:21;44780:9;44790:1;44780:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44780:12:0;44772:21;;;;;;;;;;;;;44760:7;;:11;:34::i;:::-;44750:44;;44819:34;44831:7;:21;44839:9;44849:1;44839:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44839:12:0;44831:21;;;;;;;;;;;;;44819:7;;:11;:34::i;:::-;44809:44;-1:-1:-1;44618:3:0;;44576:289;;;-1:-1:-1;44901:7:0;;44889;;:20;;:11;:20::i;:::-;44879:7;:30;44875:61;;;44919:7;;44928;;44911:25;;;;;;;;44875:61;44955:7;;-1:-1:-1;44964:7:0;-1:-1:-1;44425:555:0;;;:::o;6188:278::-;6274:7;6309:12;6302:5;6294:28;;;;-1:-1:-1;;;6294:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6333:9;6349:1;6345;:5;;;;;;;6188:278;-1:-1:-1;;;;;6188:278:0:o;43171:464::-;43285:7;;;;43339:29;43364:3;43339:20;:7;43351;43339:11;:20::i;:29::-;43323:45;-1:-1:-1;43379:36:0;43418:49;43463:3;43418:40;:7;43430:27;43418:11;:40::i;:49::-;43379:88;-1:-1:-1;43478:23:0;43504:51;43527:27;43504:18;:7;43516:5;43504:11;:18::i;:::-;:22;;:51::i;:::-;43478:77;43591:5;;-1:-1:-1;43598:28:0;;-1:-1:-1;43171:464:0;;-1:-1:-1;;;;;43171:464:0:o;43643:603::-;43777:7;;;;43833:24;:7;43845:11;43833;:24::i;:::-;43815:42;-1:-1:-1;43868:13:0;43884:22;:5;43894:11;43884:9;:22::i;:::-;43868:38;-1:-1:-1;44014:36:0;44053:45;:28;44086:11;44053:32;:45::i;:::-;44014:84;-1:-1:-1;44109:23:0;44135:52;44014:84;44135:18;:7;44147:5;44135:11;:18::i;:52::-;44206:7;;;;-1:-1:-1;44232:5:0;;-1:-1:-1;43643:603:0;;-1:-1:-1;;;;;;;43643:603:0:o;4635:471::-;4693:7;4938:6;4934:47;;-1:-1:-1;4968:1:0;4961:8;;4934:47;5005:5;;;5009:1;5005;:5;:1;5029:5;;;;;:10;5021:56;;;;-1:-1:-1;;;5021:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36781:737;36941:16;;;36955:1;36941:16;;;36917:21;36941:16;;;;;36917:21;36941:16;;;;;;;;;;-1:-1:-1;36941:16:0;36917:40;;36978:15;-1:-1:-1;;;;;36978:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36978:22:0;36968:7;;:4;;36973:1;;36968:7;;;;;;;;;:32;-1:-1:-1;;;;;36968:32:0;;;-1:-1:-1;;;;;36968:32:0;;;;;37021:5;37011:4;37016:1;37011:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;37011:15:0;;;-1:-1:-1;;;;;37011:15:0;;;;;37039:57;37056:4;37071:15;37089:6;37039:8;:57::i;:::-;-1:-1:-1;;;;;37139:15:0;:66;;37213:6;37235:1;37282:4;37301:18;37334:24;:15;37354:3;37334:19;:24::i;:::-;37139:230;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37139:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37135:376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37476:23;37497:1;37476:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37433:78;37135:376;;;37390:30;37407:6;37415:4;37390:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37135:376;36781:737;;;:::o;31857:434::-;31903:13;;:18;:42;;;;-1:-1:-1;31925:15:0;;:20;31903:42;:59;;;;-1:-1:-1;31949:8:0;;:13;31903:59;:79;;;;-1:-1:-1;31966:11:0;;:16;31903:79;31900:91;;;31984:7;;31900:91;32027:13;;;32003:21;:37;32077:15;;;32051:23;:41;32122:8;;;32103:16;:27;32163:11;;;32141:19;:33;-1:-1:-1;32187:17:0;;;;32215:19;;;;32245:12;;;32268:15;31857:434;:::o;40554:604::-;40657:15;40674:23;40699:13;40714:23;40739:13;40754:36;40794:19;40805:7;40794:10;:19::i;:::-;-1:-1:-1;;;;;40842:15:0;;;;;;:7;:15;;;;;;40656:157;;-1:-1:-1;40656:157:0;;-1:-1:-1;40656:157:0;;-1:-1:-1;40656:157:0;-1:-1:-1;40656:157:0;-1:-1:-1;40656:157:0;-1:-1:-1;40842:28:0;;40862:7;40842:19;:28::i;:::-;-1:-1:-1;;;;;40824:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40899:7;:15;;;;:28;;40919:7;40899:19;:28::i;:::-;-1:-1:-1;;;;;40881:15:0;;;;;;;:7;:15;;;;;;:46;;;;40959:18;;;;;;;:39;;40982:15;40959:22;:39::i;:::-;-1:-1:-1;;;;;40938:18:0;;;;;;:7;:18;;;;;:60;41009:45;41025:28;41009:15;:45::i;:::-;41065:25;41077:5;41084;41065:11;:25::i;:::-;41123:9;-1:-1:-1;;;;;41106:44:0;41115:6;-1:-1:-1;;;;;41106:44:0;;41134:15;41106:44;;;;;;;;;;;;;;;;;;40554:604;;;;;;;;;:::o;39930:616::-;40031:15;40048:23;40073:13;40088:23;40113:13;40128:36;40168:19;40179:7;40168:10;:19::i;:::-;-1:-1:-1;;;;;40216:15:0;;;;;;:7;:15;;;;;;40030:157;;-1:-1:-1;40030:157:0;;-1:-1:-1;40030:157:0;;-1:-1:-1;40030:157:0;-1:-1:-1;40030:157:0;-1:-1:-1;40030:157:0;-1:-1:-1;40216:28:0;;40030:157;40216:19;:28::i;:::-;-1:-1:-1;;;;;40198:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;40276:18;;;;;:7;:18;;;;;:39;;40299:15;40276:22;:39::i;:::-;-1:-1:-1;;;;;40255:18:0;;;;;;:7;:18;;;;;;;;:60;;;;40347:7;:18;;;;:39;;40370:15;40347:22;:39::i;39379:543::-;39478:15;39495:23;39520:13;39535:23;39560:13;39575:36;39615:19;39626:7;39615:10;:19::i;:::-;-1:-1:-1;;;;;39663:15:0;;;;;;:7;:15;;;;;;39477:157;;-1:-1:-1;39477:157:0;;-1:-1:-1;39477:157:0;;-1:-1:-1;39477:157:0;-1:-1:-1;39477:157:0;-1:-1:-1;39477:157:0;-1:-1:-1;39663:28:0;;39477:157;39663:19;:28::i;41166:675::-;41269:15;41286:23;41311:13;41326:23;41351:13;41366:36;41406:19;41417:7;41406:10;:19::i;:::-;-1:-1:-1;;;;;41454:15:0;;;;;;:7;:15;;;;;;41268:157;;-1:-1:-1;41268:157:0;;-1:-1:-1;41268:157:0;;-1:-1:-1;41268:157:0;-1:-1:-1;41268:157:0;-1:-1:-1;41268:157:0;-1:-1:-1;41454:28:0;;41474:7;41454:19;:28::i;:::-;-1:-1:-1;;;;;41436:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41511:7;:15;;;;:28;;41531:7;41511:19;:28::i;32299:223::-;32359:21;;32343:13;:37;32409:23;;32391:15;:41;32454:16;;32443:8;:27;32495:19;;32481:11;:33;32299:223::o;41849:445::-;41931:19;41953:10;:8;:10::i;:::-;41931:32;-1:-1:-1;41974:36:0;42013:45;:28;41931:32;42013;:45::i;:::-;42110:4;42094:22;;;;:7;:22;;;;;;41974:84;;-1:-1:-1;42094:56:0;;41974:84;42094:26;:56::i;:::-;42085:4;42069:22;;;;:7;:22;;;;;;;;:81;;;;42164:11;:26;;;;;;42161:125;;;42246:4;42230:22;;;;:7;:22;;;;;;:56;;42257:28;42230:26;:56::i;:::-;42221:4;42205:22;;;;:7;:22;;;;;:81;41849:445;;;:::o;42302:192::-;42382:7;;:18;;42394:5;42382:11;:18::i;:::-;42372:7;:28;42425:11;;:22;;42441:5;42425:15;:22::i;:::-;42411:11;:36;42468:7;;:18;;42480:5;42468:11;:18::i;:::-;42458:7;:28;-1:-1:-1;;42302:192:0:o

Swarm Source

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