ETH Price: $3,454.48 (-0.66%)
Gas: 13 Gwei

Token

BullRun (BRL)
 

Overview

Max Total Supply

974,320.73015939113323078 BRL

Holders

227

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
26.421315235367993702 BRL

Value
$0.00
0x9f8ff7F5Ec6AD10cD87988E47c8857Ab8A68763D
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:
BullRun

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-03
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.9;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
//  MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}
//  MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}
//  MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity >=0.6.2;

pragma solidity >=0.6.2;

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

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

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

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;
}
pragma solidity >=0.5.0;

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

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

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

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

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

contract BullRunFeeHandler is Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    IERC20 public usdc;
    IERC20 public brlToken;

    address public marketingWallet;
    address public opsWallet;
    address public farmWallet;

    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived,uint256 tokensIntoLiqudity);

    constructor(address _brlToken, address _marketingWallet, address _opsWallet, address _farmWallet) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

        brlToken = IERC20(_brlToken);
        marketingWallet = _marketingWallet;
        opsWallet = _opsWallet;
        farmWallet = _farmWallet;

        usdc = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
        IERC20(usdc).approve(address(_uniswapV2Router), type(uint256).max);

    }

    function processFees(uint256 liquidityTokens, uint256 opsTokens, uint256 marketingTokens, uint256 farmTokens) external onlyOwner {

        uint256 half = liquidityTokens / 2;
        uint256 otherHalf = liquidityTokens - half;

        uint256 total = half + opsTokens + marketingTokens + farmTokens;

        IERC20(brlToken).approve(address(uniswapV2Router), total + otherHalf);

        address[] memory path = new address[](2);
        path[0] = address(brlToken);
        path[1] = address(usdc);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            total,
            0, // accept any amount of USDC
            path,
            address(this),
            block.timestamp
        );

        uint256 usdcBalance = IERC20(usdc).balanceOf(address(this));
        uint256 liquidity = usdcBalance * half / total;
        uint256 marketing = usdcBalance * marketingTokens / total;
        uint256 ops = usdcBalance * opsTokens / total;
        uint256 farm = usdcBalance - liquidity - marketing - ops;

        uniswapV2Router.addLiquidity(
            address(brlToken),
            address(usdc),
            otherHalf,
            liquidity,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

        emit SwapAndLiquify(half, liquidity, otherHalf);

        usdc.transfer(marketingWallet, marketing);
        usdc.transfer(opsWallet, ops);
        usdc.transfer(farmWallet, farm);

    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateOpsWallet(address newWallet) external onlyOwner {
        opsWallet = newWallet;
    }

    function updateFarmWallet(address newWallet) external onlyOwner {
        farmWallet = newWallet;
    }

}

error InsufficientAllowance();
error InvalidInput();
error InvalidTransfer(address from, address to);
error TransferDelayEnabled(uint256 currentBlock, uint256 enabledBlock);
error ExceedsMaxTxAmount(uint256 attempt, uint256 max);
error ExceedsMaxWalletAmount(uint256 attempt, uint256 max);
error InvalidPairAddress();
error InvalidConfiguration();

contract BullRun is Context, IERC20, Ownable {
    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 _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10**6 * 10**18; //1 million
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "BullRun";
    string private _symbol = "BRL";
    uint8 private _decimals = 18;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    BullRunFeeHandler public brlFeeHandler;

    mapping (address => bool) public automatedMarketMakerPairs;

    IERC20 public usdc;

    bool private swapping;
    bool public swapEnabled;

    uint256 public tokensForLiquidity;
    uint256 public tokensForOps;
    uint256 public tokensForMarketing;
    uint256 public tokensForFarmRewards;

    mapping(address => uint256) private _holderLastTransferTimestamp;

    uint256 public maxTransactionAmount = 5000 * 10**18; //0.5% of total supply
    uint256 public swapTokensAtAmount = 500 * 10**18; //0.05% of total supply
    uint256 public maxWallet = 10000 * 10**18; //1% of total supply;

    uint256 public delay = 5;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event UpdateFeeHandler(address indexed newAddress, address indexed oldAddress);

    constructor (address _marketingWallet, address _opsWallet, address _farmWallet) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        usdc = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), address(usdc));

        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        brlFeeHandler = new BullRunFeeHandler(address(this), _marketingWallet, _opsWallet, _farmWallet);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(brlFeeHandler)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(brlFeeHandler)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        _rOwned[_msgSender()] = _rTotal;

        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) {
        address spender = _msgSender();
        uint256 currentAllowance = _allowances[sender][spender];
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < amount) {
                revert InsufficientAllowance();
            }
            unchecked {
                _approve(sender, spender, currentAllowance - amount);
            }
        }
        _transfer(sender, recipient, amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        if (currentAllowance < subtractedValue) {
            revert InvalidInput();
        }
        unchecked {
          _approve(owner, spender, currentAllowance - subtractedValue);
        }
        return true;
    }

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

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        if (rAmount > _rTotal) {
            revert InvalidInput();
        }
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

    function excludeFromReward(address account) public onlyOwner() {
        if (_isExcluded[account]) {
            revert InvalidInput();
        }
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner() {
        if (!_isExcluded[account]) {
            revert InvalidInput();
        }
        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 excludeFromFees(address account) public onlyOwner {
        _isExcludedFromFees[account] = true;
    }

    function includeInFees(address account) public onlyOwner {
        _isExcludedFromFees[account] = false;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        maxTransactionAmount = _tTotal * maxTxPercent / 100;
    }

    function setMaxWalletSize(uint256 maxWalletPercent) external onlyOwner() {
        maxWallet = _tTotal * maxWalletPercent / 100;
    }

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

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

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

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        if (owner == address(0) || spender == address(0)) {
            revert InvalidInput();
        }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        if (from == address(0) || to == address(0)) {
            revert InvalidTransfer(from, to);
        }

        if(amount == 0) {
           emit Transfer(from, to, amount);
           return;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping
        ){

            if (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]) {
                uint256 delayedUntil = _holderLastTransferTimestamp[tx.origin];
                if (delayedUntil > block.number) {
                    revert TransferDelayEnabled(block.number, delayedUntil);
                }
                _holderLastTransferTimestamp[tx.origin] = block.number + delay;
            }

            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { //buys
                if (amount > maxTransactionAmount) {
                    revert ExceedsMaxTxAmount(amount, maxTransactionAmount);
                }
                uint256 potentialBalance = amount + balanceOf(to);
                if (potentialBalance > maxWallet) {
                    revert ExceedsMaxWalletAmount(potentialBalance, maxWallet);
                }

            } else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { //sells
                if (amount > maxTransactionAmount) {
                    revert ExceedsMaxTxAmount(amount, maxTransactionAmount);
                }
            } else if(!_isExcludedMaxTransactionAmount[to]){
                uint256 potentialBalance = amount + balanceOf(to);
                if (potentialBalance > maxWallet) {
                    revert ExceedsMaxWalletAmount(potentialBalance, maxWallet);
                }
            }
        }

        bool canSwap = balanceOf(address(brlFeeHandler)) >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            swapEnabled &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            brlFeeHandler.processFees(tokensForLiquidity, tokensForOps, tokensForMarketing, tokensForFarmRewards);

            tokensForLiquidity = 0;
            tokensForMarketing = 0;
            tokensForOps = 0;
            tokensForFarmRewards = 0;

            swapping = false;

        }

        uint256 currentRate = _getRate();
        uint256 rAmount = amount * currentRate;
        uint256 rTransferAmount = rAmount;
        uint256 tTransferAmount = amount;

        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 rBurn;
            uint256 rRewards;

            uint256 tRewards;
            uint256 tBurn;
            uint256 tRemainingFees;

            if (automatedMarketMakerPairs[to]) { //sell
                tRewards = amount / 25;
                tBurn = amount / 25;
                tRemainingFees = amount * 2 / 25;
                tokensForLiquidity += tRemainingFees / 4;
                tokensForOps += tRemainingFees * 3 / 8;
                tokensForMarketing += tRemainingFees / 4;
                tokensForFarmRewards += tRemainingFees / 8;

            } else if (automatedMarketMakerPairs[from]) { //buy
                tRewards = amount * 3 / 100;
                tBurn = amount * 3 / 100;
                tRemainingFees = amount * 3 / 50;
                tokensForLiquidity += tRemainingFees / 6;
                tokensForOps += tRemainingFees / 3;
                tokensForMarketing += tRemainingFees / 3;
                tokensForFarmRewards += tRemainingFees / 6;
            }

            if (tRemainingFees > 0) {

                //platform fees
                uint256 rRemainingFees = tRemainingFees * currentRate;
                _rOwned[address(brlFeeHandler)] += rRemainingFees;
                if(_isExcluded[address(brlFeeHandler)])
                    _tOwned[address(brlFeeHandler)] += tRemainingFees;

                emit Transfer(from, address(brlFeeHandler), tRemainingFees);

                //burn fee
                rBurn = tBurn * currentRate;
                _rTotal -= rBurn;
                _tTotal -= tBurn;

                emit Transfer(from, address(0xdead), tBurn);

                rRewards = tRewards * _getRate();
                _rTotal -= rRewards;
                _tFeeTotal += tRewards;
                rTransferAmount -= (rRewards + rBurn + rRemainingFees);
                tTransferAmount -= (tRewards + tBurn + tRemainingFees);

            }

        }

        _rOwned[from] -= rAmount;
        _rOwned[to] += rTransferAmount;

        if (_isExcluded[from]) {
            _tOwned[from] -= amount;
        }
        if (_isExcluded[to]) {
            _tOwned[to] += tTransferAmount;
        }

        emit Transfer(from, to, tTransferAmount);

    }

    function updateDelayTime(uint256 newNum) external onlyOwner{
        delay = newNum;
    }

    function setSwapAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        brlFeeHandler.updateMarketingWallet(newWallet);
    }

    function updateOpsWallet(address newWallet) external onlyOwner {
        brlFeeHandler.updateOpsWallet(newWallet);
    }

    function updateFarmWallet(address newWallet) external onlyOwner {
        brlFeeHandler.updateFarmWallet(newWallet);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        if (pair == uniswapV2Pair) {
            revert InvalidPairAddress();
        }

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        if (value) excludeFromReward(pair);
        else includeInReward(pair);
        _isExcludedMaxTransactionAmount[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateFeeHandler(address newAddress) public onlyOwner {
        if (newAddress == address(brlFeeHandler)) {
            revert InvalidConfiguration();
        }

        BullRunFeeHandler newFeeHandler = BullRunFeeHandler(payable(newAddress));

        if (newFeeHandler.owner() != address(this)) {
            revert InvalidConfiguration();
        }

        excludeFromMaxTransaction(address(newFeeHandler), true);
        excludeFromFees(address(newFeeHandler));

        brlFeeHandler = newFeeHandler;

        emit UpdateFeeHandler(newAddress, address(brlFeeHandler));
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_opsWallet","type":"address"},{"internalType":"address","name":"_farmWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"attempt","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ExceedsMaxTxAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"attempt","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ExceedsMaxWalletAmount","type":"error"},{"inputs":[],"name":"InsufficientAllowance","type":"error"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[],"name":"InvalidInput","type":"error"},{"inputs":[],"name":"InvalidPairAddress","type":"error"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"InvalidTransfer","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentBlock","type":"uint256"},{"internalType":"uint256","name":"enabledBlock","type":"uint256"}],"name":"TransferDelayEnabled","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateFeeHandler","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"brlFeeHandler","outputs":[{"internalType":"contract BullRunFeeHandler","name":"","type":"address"}],"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":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"includeInFees","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":"isExcludedFromFees","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":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletPercent","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"tokensForFarmRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateDelayTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFarmWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateFeeHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c060405269d3c21bcecceda10000006008819055620000229060001962000bbd565b620000309060001962000bea565b60095560408051808201909152600780825266213ab636293ab760c91b60209092019182526200006391600b9162000af3565b506040805180820190915260038082526210949360ea1b60209092019182526200009091600c9162000af3565b50600d805460ff1916601217905569010f0cf064dd59200000601555681b1ae4d6e2ef50000060165569021e19e0c9bab24000006017556005601855348015620000d957600080fd5b5060405162003c4138038062003c41833981016040819052620000fc9162000c21565b620001073362000444565b737a250d5630b4cf539739df2c5dacb4c659f2488d6200012981600162000494565b6001600160a01b0381166080819052600f80546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200019557600080fd5b505afa158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d0919062000c6b565b600f546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c6539690604401602060405180830381600087803b1580156200021d57600080fd5b505af115801562000232573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000258919062000c6b565b6001600160a01b031660a08190526200027390600162000494565b60a05162000283906001620004c9565b30848484604051620002959062000b82565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015620002da573d6000803e3d6000fd5b50600d8054610100600160a81b0319166101006001600160a01b0393841681029190911782556000805484168152600460209081526040808320805460ff19908116600190811790925530808652838620805483168417905587548790048916865283862080548316841790557f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd80548316841790558554891686526005909452828520805482168317905583855282852080548216831790559554949094049095168252938120805484168317905561dead90527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba8054909216179055608051620003ea919060001962000567565b600954336000818152600160209081526040808320949094556008549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505062000d27565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200049e62000605565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0382166000908152600e60205260409020805460ff191682158015919091179091556200050857620005028262000666565b62000513565b62000513826200076e565b6001600160a01b038216600081815260056020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831615806200058557506001600160a01b038216155b15620005a45760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314620006645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b6200067062000605565b6001600160a01b03811660009081526006602052604090205460ff1615620006ab5760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b0381166000908152600160205260409020541562000708576001600160a01b038116600090815260016020526040902054620006ee90620008ea565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6200077862000605565b6001600160a01b03811660009081526006602052604090205460ff16620007b25760405163b4fa3fb360e01b815260040160405180910390fd5b60005b600754811015620008e657816001600160a01b031660078281548110620007e057620007e062000c89565b6000918252602090912001546001600160a01b03161415620008d157600780546200080e9060019062000bea565b8154811062000821576200082162000c89565b600091825260209091200154600780546001600160a01b03909216918390811062000850576200085062000c89565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480620008ab57620008ab62000c9f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80620008dd8162000cb5565b915050620007b5565b5050565b6000600954821115620009105760405163b4fa3fb360e01b815260040160405180910390fd5b60006200091c62000931565b90506200092a818462000cd3565b9392505050565b600080806200093f62000957565b909250905062000950818362000cd3565b9250505090565b6009546008546000918291825b60075481101562000abf578260016000600784815481106200098a576200098a62000c89565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620009f95750816002600060078481548110620009d257620009d262000c89565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000a1057600954600854945094505050509091565b600160006007838154811062000a2a5762000a2a62000c89565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000a5b908462000bea565b9250600260006007838154811062000a775762000a7762000c89565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000aa8908362000bea565b91508062000ab68162000cb5565b91505062000964565b5060085460095462000ad2919062000cd3565b82101562000aea576009546008549350935050509091565b90939092509050565b82805462000b019062000cea565b90600052602060002090601f01602090048101928262000b25576000855562000b70565b82601f1062000b4057805160ff191683800117855562000b70565b8280016001018555821562000b70579182015b8281111562000b7057825182559160200191906001019062000b53565b5062000b7e92915062000b90565b5090565b610de88062002e5983390190565b5b8082111562000b7e576000815560010162000b91565b634e487b7160e01b600052601260045260246000fd5b60008262000bcf5762000bcf62000ba7565b500690565b634e487b7160e01b600052601160045260246000fd5b60008282101562000bff5762000bff62000bd4565b500390565b80516001600160a01b038116811462000c1c57600080fd5b919050565b60008060006060848603121562000c3757600080fd5b62000c428462000c04565b925062000c526020850162000c04565b915062000c626040850162000c04565b90509250925092565b60006020828403121562000c7e57600080fd5b6200092a8262000c04565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000ccc5762000ccc62000bd4565b5060010190565b60008262000ce55762000ce562000ba7565b500490565b600181811c9082168062000cff57607f821691505b6020821081141562000d2157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161210562000d54600039600081816104490152610d9e0152600061032001526121056000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c80636a42b8f811610167578063b62496f5116100ce578063dd62ed3e11610087578063dd62ed3e1461061a578063e2f4560514610653578063e57f14e11461065c578063ea1644d51461066f578063f2fde38b14610682578063f8b45b051461069557600080fd5b8063b62496f5146105ac578063c49b9a80146105cf578063c8c8ebe4146105e2578063d3f1a78c146105eb578063d543dbeb146105fe578063d5dd9b171461061157600080fd5b80638da5cb5b116101205780638da5cb5b1461054757806395d89b41146105585780639a7a23d614610560578063a457c2d714610573578063a9059cbb14610586578063aacebbe31461059957600080fd5b80636a42b8f8146104d05780636ddd1713146104d957806370a08231146104ed578063715018a6146105005780637571336a1461050857806388f820201461051b57600080fd5b806323b872dd1161020b5780633e413bee116101c45780633e413bee1461043157806349bd5a5e146104445780634fbee1931461046b57806352390c021461049757806363f580ea146104aa5780636402511e146104bd57600080fd5b806323b872dd146103bd57806329988b04146103d05780632d838119146103e3578063313ce567146103f65780633685d4191461040b578063395093511461041e57600080fd5b806318160ddd1161025d57806318160ddd1461036f5780631a8145bb146103775780631c3909e6146103805780631f3fed8f1461039357806320889a0d1461039c578063234cee1e146103a557600080fd5b806306fdde03146102a5578063095ea7b3146102c357806310d5de53146102e657806313114a9d146103095780631694505e1461031b57806316a2f82a1461035a575b600080fd5b6102ad61069e565b6040516102ba9190611ddf565b60405180910390f35b6102d66102d1366004611e49565b610730565b60405190151581526020016102ba565b6102d66102f4366004611e75565b60056020526000908152604090205460ff1681565b600a545b6040519081526020016102ba565b6103427f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ba565b61036d610368366004611e75565b610746565b005b60085461030d565b61030d60105481565b61036d61038e366004611e75565b61076f565b61030d60125481565b61030d60135481565b600d546103429061010090046001600160a01b031681565b6102d66103cb366004611e92565b6107e0565b61036d6103de366004611e75565b610852565b61030d6103f1366004611ed3565b6109a6565b600d5460405160ff90911681526020016102ba565b61036d610419366004611e75565b6109e8565b6102d661042c366004611e49565b610b4e565b600f54610342906001600160a01b031681565b6103427f000000000000000000000000000000000000000000000000000000000000000081565b6102d6610479366004611e75565b6001600160a01b031660009081526004602052604090205460ff1690565b61036d6104a5366004611e75565b610b8a565b61036d6104b8366004611e75565b610c8c565b61036d6104cb366004611ed3565b610ccc565b61030d60185481565b600f546102d690600160a81b900460ff1681565b61030d6104fb366004611e75565b610cd9565b61036d610d3e565b61036d610516366004611f01565b610d52565b6102d6610529366004611e75565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b0316610342565b6102ad610d85565b61036d61056e366004611f01565b610d94565b6102d6610581366004611e49565b610df9565b6102d6610594366004611e49565b610e59565b61036d6105a7366004611e75565b610e66565b6102d66105ba366004611e75565b600e6020526000908152604090205460ff1681565b61036d6105dd366004611f36565b610ea6565b61030d60155481565b61036d6105f9366004611ed3565b610f06565b61036d61060c366004611ed3565b610f13565b61030d60115481565b61030d610628366004611f51565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61030d60165481565b61036d61066a366004611e75565b610f3b565b61036d61067d366004611ed3565b610f67565b61036d610690366004611e75565b610f8f565b61030d60175481565b6060600b80546106ad90611f8a565b80601f01602080910402602001604051908101604052809291908181526020018280546106d990611f8a565b80156107265780601f106106fb57610100808354040283529160200191610726565b820191906000526020600020905b81548152906001019060200180831161070957829003601f168201915b5050505050905090565b600061073d33848461100d565b50600192915050565b61074e6110aa565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6107776110aa565b600d54604051630e1c84f360e11b81526001600160a01b03838116600483015261010090920490911690631c3909e6906024015b600060405180830381600087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b5050505050565b6001600160a01b0383166000908152600360209081526040808320338085529252822054600019811461083b578381101561082e576040516313be252b60e01b815260040160405180910390fd5b61083b868386840361100d565b610846868686611104565b50600195945050505050565b61085a6110aa565b600d546001600160a01b0382811661010090920416141561088e5760405163c52a9bd360e01b815260040160405180910390fd5b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108d657600080fd5b505afa1580156108ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090e9190611fc5565b6001600160a01b0316146109355760405163c52a9bd360e01b815260040160405180910390fd5b610940816001610d52565b61094981610f3b565b600d8054610100600160a81b0319166101006001600160a01b03848116820292909217928390556040519204811691908416907fc6a663dfd3d64dce542f49c3119b9e2ded1311d56c163cc6da28cd0e72d9c24990600090a35050565b60006009548211156109cb5760405163b4fa3fb360e01b815260040160405180910390fd5b60006109d5611b51565b90506109e18184611ff8565b9392505050565b6109f06110aa565b6001600160a01b03811660009081526006602052604090205460ff16610a295760405163b4fa3fb360e01b815260040160405180910390fd5b60005b600754811015610b4a57816001600160a01b031660078281548110610a5357610a5361201a565b6000918252602090912001546001600160a01b03161415610b385760078054610a7e90600190612030565b81548110610a8e57610a8e61201a565b600091825260209091200154600780546001600160a01b039092169183908110610aba57610aba61201a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610b1257610b12612047565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b428161205d565b915050610a2c565b5050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161073d918590610b85908690612078565b61100d565b610b926110aa565b6001600160a01b03811660009081526006602052604090205460ff1615610bcc5760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b03811660009081526001602052604090205415610c26576001600160a01b038116600090815260016020526040902054610c0c906109a6565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b610c946110aa565b600d546040516331fac07560e11b81526001600160a01b038381166004830152610100909204909116906363f580ea906024016107ab565b610cd46110aa565b601655565b6001600160a01b03811660009081526006602052604081205460ff1615610d1657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d38906109a6565b92915050565b610d466110aa565b610d506000611b74565b565b610d5a6110aa565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6060600c80546106ad90611f8a565b610d9c6110aa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610def5760405163157a7c9760e11b815260040160405180910390fd5b610b4a8282611bc4565b3360008181526003602090815260408083206001600160a01b038716845290915281205490919083811015610e415760405163b4fa3fb360e01b815260040160405180910390fd5b610e4e828686840361100d565b506001949350505050565b600061073d338484611104565b610e6e6110aa565b600d5460405163aacebbe360e01b81526001600160a01b0383811660048301526101009092049091169063aacebbe3906024016107ab565b610eae6110aa565b600f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610efb90831515815260200190565b60405180910390a150565b610f0e6110aa565b601855565b610f1b6110aa565b606481600854610f2b9190612090565b610f359190611ff8565b60155550565b610f436110aa565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610f6f6110aa565b606481600854610f7f9190612090565b610f899190611ff8565b60175550565b610f976110aa565b6001600160a01b0381166110015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61100a81611b74565b50565b6001600160a01b038316158061102a57506001600160a01b038216155b156110485760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610d505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ff8565b6001600160a01b038316158061112157506001600160a01b038216155b156111525760405163709ac01760e01b81526001600160a01b03808516600483015283166024820152604401610ff8565b8061118a57816001600160a01b0316836001600160a01b03166000805160206120b08339815191528360405161109d91815260200190565b6000546001600160a01b038481169116148015906111b657506000546001600160a01b03838116911614155b80156111ca57506001600160a01b03821615155b80156111e157506001600160a01b03821661dead14155b80156111f75750600f54600160a01b900460ff16155b15611444576001600160a01b0383166000908152600e602052604090205460ff168061123b57506001600160a01b0382166000908152600e602052604090205460ff165b1561129957326000908152601460205260409020544381111561127a5760405163251279e960e11b815243600482015260248101829052604401610ff8565b6018546112879043612078565b32600090815260146020526040902055505b6001600160a01b0383166000908152600e602052604090205460ff1680156112da57506001600160a01b03821660009081526005602052604090205460ff16155b1561135e5760155481111561131057601554604051631154203560e11b8152610ff8918391600401918252602082015260400190565b600061131b83610cd9565b6113259083612078565b9050601754811115611358576017546040516310ca5eef60e11b8152610ff8918391600401918252602082015260400190565b50611444565b6001600160a01b0382166000908152600e602052604090205460ff16801561139f57506001600160a01b03831660009081526005602052604090205460ff16155b156113da576015548111156113d557601554604051631154203560e11b8152610ff8918391600401918252602082015260400190565b611444565b6001600160a01b03821660009081526005602052604090205460ff1661144457600061140583610cd9565b61140f9083612078565b9050601754811115611442576017546040516310ca5eef60e11b8152610ff8918391600401918252602082015260400190565b505b6000601654611467600d60019054906101000a90046001600160a01b0316610cd9565b101590508080156114825750600f54600160a01b900460ff16155b80156114975750600f54600160a81b900460ff165b80156114bc57506001600160a01b0384166000908152600e602052604090205460ff16155b80156114e157506001600160a01b03841660009081526004602052604090205460ff16155b801561150657506001600160a01b03831660009081526004602052604090205460ff16155b156115c357600f8054600160a01b60ff60a01b19909116179055600d54601054601154601254601354604051631771912f60e31b815260048101949094526024840192909252604483015260648201526101009091046001600160a01b03169063bb8c897890608401600060405180830381600087803b15801561158957600080fd5b505af115801561159d573d6000803e3d6000fd5b505060006010819055601281905560118190556013555050600f805460ff60a01b191690555b60006115cd611b51565b905060006115db8285612090565b6001600160a01b0387166000908152600460205260409020549091508190859060ff1615801561162457506001600160a01b03871660009081526004602052604090205460ff16155b15611a14576001600160a01b0387166000908152600e6020526040812054819081908190819060ff161561171e5761165d60198c611ff8565b925061166a60198c611ff8565b915060196116798c6002612090565b6116839190611ff8565b9050611690600482611ff8565b601060008282546116a19190612078565b90915550600890506116b4826003612090565b6116be9190611ff8565b601160008282546116cf9190612078565b909155506116e09050600482611ff8565b601260008282546116f19190612078565b909155506117029050600882611ff8565b601360008282546117139190612078565b909155506118129050565b6001600160a01b038d166000908152600e602052604090205460ff161561181257606461174c8c6003612090565b6117569190611ff8565b925060646117658c6003612090565b61176f9190611ff8565b9150603261177e8c6003612090565b6117889190611ff8565b9050611795600682611ff8565b601060008282546117a69190612078565b909155506117b79050600382611ff8565b601160008282546117c89190612078565b909155506117d99050600382611ff8565b601260008282546117ea9190612078565b909155506117fb9050600682611ff8565b6013600082825461180c9190612078565b90915550505b8015611a0e5760006118248a83612090565b600d5461010090046001600160a01b0316600090815260016020526040812080549293508392909190611858908490612078565b9091555050600d5461010090046001600160a01b031660009081526006602052604090205460ff16156118ba57600d5461010090046001600160a01b0316600090815260026020526040812080548492906118b4908490612078565b90915550505b600d60019054906101000a90046001600160a01b03166001600160a01b03168e6001600160a01b03166000805160206120b08339815191528460405161190291815260200190565b60405180910390a36119148a84612090565b955085600960008282546119289190612030565b9250508190555082600860008282546119419190612030565b9250508190555061dead6001600160a01b03168e6001600160a01b03166000805160206120b08339815191528560405161197d91815260200190565b60405180910390a361198d611b51565b6119979085612090565b945084600960008282546119ab9190612030565b9250508190555083600a60008282546119c49190612078565b909155508190506119d58787612078565b6119df9190612078565b6119e99089612030565b9750816119f68486612078565b611a009190612078565b611a0a9088612030565b9650505b50505050505b6001600160a01b03881660009081526001602052604081208054859290611a3c908490612030565b90915550506001600160a01b03871660009081526001602052604081208054849290611a69908490612078565b90915550506001600160a01b03881660009081526006602052604090205460ff1615611abd576001600160a01b03881660009081526002602052604081208054889290611ab7908490612030565b90915550505b6001600160a01b03871660009081526006602052604090205460ff1615611b0c576001600160a01b03871660009081526002602052604081208054839290611b06908490612078565b90915550505b866001600160a01b0316886001600160a01b03166000805160206120b083398151915283604051611b3f91815260200190565b60405180910390a35050505050505050565b6000806000611b5e611c5c565b9092509050611b6d8183611ff8565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000908152600e60205260409020805460ff19168215801591909117909155611bff57611bfa82610b8a565b611c08565b611c08826109e8565b6001600160a01b038216600081815260056020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6009546008546000918291825b600754811015611dae57826001600060078481548110611c8b57611c8b61201a565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611cf65750816002600060078481548110611ccf57611ccf61201a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d0c57600954600854945094505050509091565b6001600060078381548110611d2357611d2361201a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d529084612030565b92506002600060078381548110611d6b57611d6b61201a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d9a9083612030565b915080611da68161205d565b915050611c69565b50600854600954611dbf9190611ff8565b821015611dd6576009546008549350935050509091565b90939092509050565b600060208083528351808285015260005b81811015611e0c57858101830151858201604001528201611df0565b81811115611e1e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461100a57600080fd5b60008060408385031215611e5c57600080fd5b8235611e6781611e34565b946020939093013593505050565b600060208284031215611e8757600080fd5b81356109e181611e34565b600080600060608486031215611ea757600080fd5b8335611eb281611e34565b92506020840135611ec281611e34565b929592945050506040919091013590565b600060208284031215611ee557600080fd5b5035919050565b80358015158114611efc57600080fd5b919050565b60008060408385031215611f1457600080fd5b8235611f1f81611e34565b9150611f2d60208401611eec565b90509250929050565b600060208284031215611f4857600080fd5b6109e182611eec565b60008060408385031215611f6457600080fd5b8235611f6f81611e34565b91506020830135611f7f81611e34565b809150509250929050565b600181811c90821680611f9e57607f821691505b60208210811415611fbf57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611fd757600080fd5b81516109e181611e34565b634e487b7160e01b600052601160045260246000fd5b60008261201557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60008282101561204257612042611fe2565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561207157612071611fe2565b5060010190565b6000821982111561208b5761208b611fe2565b500190565b60008160001904831182151516156120aa576120aa611fe2565b50029056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220bc733aeae3bb04a213a26a99f757a02d1529c3c069473ab1b6592c3b62378a3164736f6c6343000809003360a06040523480156200001157600080fd5b5060405162000de838038062000de88339810160408190526200003491620001b6565b6200003f3362000149565b737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052600280546001600160a01b03199081166001600160a01b0388811691909117909255600380548216878416179055600480548216868416178155600580548316938616939093179092556001805473a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4892168217905560405163095ea7b360e01b815291820183905260001960248301529063095ea7b390604401602060405180830381600087803b1580156200010257600080fd5b505af115801562000117573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013d919062000213565b5050505050506200023e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001b157600080fd5b919050565b60008060008060808587031215620001cd57600080fd5b620001d88562000199565b9350620001e86020860162000199565b9250620001f86040860162000199565b9150620002086060860162000199565b905092959194509250565b6000602082840312156200022657600080fd5b815180151581146200023757600080fd5b9392505050565b608051610b7a6200026e6000396000818160d9015281816102df0152818161041d01526105d50152610b7a6000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806375f0a8741161008c578063aacebbe311610066578063aacebbe3146101a4578063affaee30146101b7578063bb8c8978146101ca578063f2fde38b146101dd57600080fd5b806375f0a8741461016d5780638da5cb5b14610180578063a9545a101461019157600080fd5b80631694505e146100d45780631c3909e6146101175780633e413bee1461012c57806363f580ea1461013f57806368db925a14610152578063715018a614610165575b600080fd5b6100fb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61012a61012536600461096c565b6101f0565b005b6001546100fb906001600160a01b031681565b61012a61014d36600461096c565b61021a565b6004546100fb906001600160a01b031681565b61012a610244565b6003546100fb906001600160a01b031681565b6000546001600160a01b03166100fb565b6002546100fb906001600160a01b031681565b61012a6101b236600461096c565b610258565b6005546100fb906001600160a01b031681565b61012a6101d836600461099c565b610282565b61012a6101eb36600461096c565b610844565b6101f86108c2565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6102226108c2565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b61024c6108c2565b610256600061091c565b565b6102606108c2565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61028a6108c2565b60006102976002866109e4565b905060006102a58287610a06565b9050600083856102b58886610a1d565b6102bf9190610a1d565b6102c99190610a1d565b6002549091506001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006103088585610a1d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561034e57600080fd5b505af1158015610362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103869190610a35565b50604080516002808252606082018352600092602083019080368337505060025482519293506001600160a01b0316918391506000906103c8576103c8610a57565b6001600160a01b03928316602091820292909201015260018054835192169183919081106103f8576103f8610a57565b6001600160a01b039283166020918202929092010152604051635c11d79560e01b81527f000000000000000000000000000000000000000000000000000000000000000090911690635c11d7959061045d908590600090869030904290600401610a6d565b600060405180830381600087803b15801561047757600080fd5b505af115801561048b573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a082319060240160206040518083038186803b1580156104d557600080fd5b505afa1580156104e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050d9190610ade565b905060008361051c8784610af7565b61052691906109e4565b90506000846105358a85610af7565b61053f91906109e4565b905060008561054e8c86610af7565b61055891906109e4565b9050600081836105688688610a06565b6105729190610a06565b61057c9190610a06565b60025460015460405162e8e33760e81b81526001600160a01b0392831660048201529082166024820152604481018b90526064810187905260006084820181905260a482015261dead60c48201524260e48201529192507f0000000000000000000000000000000000000000000000000000000000000000169063e8e337009061010401606060405180830381600087803b15801561061a57600080fd5b505af115801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610b16565b5050604080518b8152602081018790529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a160015460035460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810186905291169063a9059cbb90604401602060405180830381600087803b1580156106e657600080fd5b505af11580156106fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071e9190610a35565b506001546004805460405163a9059cbb60e01b81526001600160a01b0391821692810192909252602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561077357600080fd5b505af1158015610787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ab9190610a35565b5060015460055460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb90604401602060405180830381600087803b1580156107fc57600080fd5b505af1158015610810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108349190610a35565b5050505050505050505050505050565b61084c6108c2565b6001600160a01b0381166108b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6108bf8161091c565b50565b6000546001600160a01b031633146102565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ad565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561097e57600080fd5b81356001600160a01b038116811461099557600080fd5b9392505050565b600080600080608085870312156109b257600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600082610a0157634e487b7160e01b600052601260045260246000fd5b500490565b600082821015610a1857610a186109ce565b500390565b60008219821115610a3057610a306109ce565b500190565b600060208284031215610a4757600080fd5b8151801515811461099557600080fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015610abd5784516001600160a01b031683529383019391830191600101610a98565b50506001600160a01b03969096166060850152505050608001529392505050565b600060208284031215610af057600080fd5b5051919050565b6000816000190483118215151615610b1157610b116109ce565b500290565b600080600060608486031215610b2b57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122015fccbb2475236374de6b77def91c864aa0669258376e22b9119f7db2c8ca6f864736f6c63430008090033000000000000000000000000be1a270361736573152fce0163c0d169ce6e9890000000000000000000000000ffd0b4f9dbe6f61571cfd8a58099ba3fb6a4e10a0000000000000000000000001d0646ebe12ab71d209c8a0bd347a7c39ae6c647

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102a05760003560e01c80636a42b8f811610167578063b62496f5116100ce578063dd62ed3e11610087578063dd62ed3e1461061a578063e2f4560514610653578063e57f14e11461065c578063ea1644d51461066f578063f2fde38b14610682578063f8b45b051461069557600080fd5b8063b62496f5146105ac578063c49b9a80146105cf578063c8c8ebe4146105e2578063d3f1a78c146105eb578063d543dbeb146105fe578063d5dd9b171461061157600080fd5b80638da5cb5b116101205780638da5cb5b1461054757806395d89b41146105585780639a7a23d614610560578063a457c2d714610573578063a9059cbb14610586578063aacebbe31461059957600080fd5b80636a42b8f8146104d05780636ddd1713146104d957806370a08231146104ed578063715018a6146105005780637571336a1461050857806388f820201461051b57600080fd5b806323b872dd1161020b5780633e413bee116101c45780633e413bee1461043157806349bd5a5e146104445780634fbee1931461046b57806352390c021461049757806363f580ea146104aa5780636402511e146104bd57600080fd5b806323b872dd146103bd57806329988b04146103d05780632d838119146103e3578063313ce567146103f65780633685d4191461040b578063395093511461041e57600080fd5b806318160ddd1161025d57806318160ddd1461036f5780631a8145bb146103775780631c3909e6146103805780631f3fed8f1461039357806320889a0d1461039c578063234cee1e146103a557600080fd5b806306fdde03146102a5578063095ea7b3146102c357806310d5de53146102e657806313114a9d146103095780631694505e1461031b57806316a2f82a1461035a575b600080fd5b6102ad61069e565b6040516102ba9190611ddf565b60405180910390f35b6102d66102d1366004611e49565b610730565b60405190151581526020016102ba565b6102d66102f4366004611e75565b60056020526000908152604090205460ff1681565b600a545b6040519081526020016102ba565b6103427f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102ba565b61036d610368366004611e75565b610746565b005b60085461030d565b61030d60105481565b61036d61038e366004611e75565b61076f565b61030d60125481565b61030d60135481565b600d546103429061010090046001600160a01b031681565b6102d66103cb366004611e92565b6107e0565b61036d6103de366004611e75565b610852565b61030d6103f1366004611ed3565b6109a6565b600d5460405160ff90911681526020016102ba565b61036d610419366004611e75565b6109e8565b6102d661042c366004611e49565b610b4e565b600f54610342906001600160a01b031681565b6103427f00000000000000000000000092c9a27d21bb5f27b1ec0555b5be71b3253ada6781565b6102d6610479366004611e75565b6001600160a01b031660009081526004602052604090205460ff1690565b61036d6104a5366004611e75565b610b8a565b61036d6104b8366004611e75565b610c8c565b61036d6104cb366004611ed3565b610ccc565b61030d60185481565b600f546102d690600160a81b900460ff1681565b61030d6104fb366004611e75565b610cd9565b61036d610d3e565b61036d610516366004611f01565b610d52565b6102d6610529366004611e75565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b0316610342565b6102ad610d85565b61036d61056e366004611f01565b610d94565b6102d6610581366004611e49565b610df9565b6102d6610594366004611e49565b610e59565b61036d6105a7366004611e75565b610e66565b6102d66105ba366004611e75565b600e6020526000908152604090205460ff1681565b61036d6105dd366004611f36565b610ea6565b61030d60155481565b61036d6105f9366004611ed3565b610f06565b61036d61060c366004611ed3565b610f13565b61030d60115481565b61030d610628366004611f51565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61030d60165481565b61036d61066a366004611e75565b610f3b565b61036d61067d366004611ed3565b610f67565b61036d610690366004611e75565b610f8f565b61030d60175481565b6060600b80546106ad90611f8a565b80601f01602080910402602001604051908101604052809291908181526020018280546106d990611f8a565b80156107265780601f106106fb57610100808354040283529160200191610726565b820191906000526020600020905b81548152906001019060200180831161070957829003601f168201915b5050505050905090565b600061073d33848461100d565b50600192915050565b61074e6110aa565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6107776110aa565b600d54604051630e1c84f360e11b81526001600160a01b03838116600483015261010090920490911690631c3909e6906024015b600060405180830381600087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b5050505050565b6001600160a01b0383166000908152600360209081526040808320338085529252822054600019811461083b578381101561082e576040516313be252b60e01b815260040160405180910390fd5b61083b868386840361100d565b610846868686611104565b50600195945050505050565b61085a6110aa565b600d546001600160a01b0382811661010090920416141561088e5760405163c52a9bd360e01b815260040160405180910390fd5b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108d657600080fd5b505afa1580156108ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090e9190611fc5565b6001600160a01b0316146109355760405163c52a9bd360e01b815260040160405180910390fd5b610940816001610d52565b61094981610f3b565b600d8054610100600160a81b0319166101006001600160a01b03848116820292909217928390556040519204811691908416907fc6a663dfd3d64dce542f49c3119b9e2ded1311d56c163cc6da28cd0e72d9c24990600090a35050565b60006009548211156109cb5760405163b4fa3fb360e01b815260040160405180910390fd5b60006109d5611b51565b90506109e18184611ff8565b9392505050565b6109f06110aa565b6001600160a01b03811660009081526006602052604090205460ff16610a295760405163b4fa3fb360e01b815260040160405180910390fd5b60005b600754811015610b4a57816001600160a01b031660078281548110610a5357610a5361201a565b6000918252602090912001546001600160a01b03161415610b385760078054610a7e90600190612030565b81548110610a8e57610a8e61201a565b600091825260209091200154600780546001600160a01b039092169183908110610aba57610aba61201a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610b1257610b12612047565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610b428161205d565b915050610a2c565b5050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161073d918590610b85908690612078565b61100d565b610b926110aa565b6001600160a01b03811660009081526006602052604090205460ff1615610bcc5760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b03811660009081526001602052604090205415610c26576001600160a01b038116600090815260016020526040902054610c0c906109a6565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b610c946110aa565b600d546040516331fac07560e11b81526001600160a01b038381166004830152610100909204909116906363f580ea906024016107ab565b610cd46110aa565b601655565b6001600160a01b03811660009081526006602052604081205460ff1615610d1657506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d38906109a6565b92915050565b610d466110aa565b610d506000611b74565b565b610d5a6110aa565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6060600c80546106ad90611f8a565b610d9c6110aa565b7f00000000000000000000000092c9a27d21bb5f27b1ec0555b5be71b3253ada676001600160a01b0316826001600160a01b03161415610def5760405163157a7c9760e11b815260040160405180910390fd5b610b4a8282611bc4565b3360008181526003602090815260408083206001600160a01b038716845290915281205490919083811015610e415760405163b4fa3fb360e01b815260040160405180910390fd5b610e4e828686840361100d565b506001949350505050565b600061073d338484611104565b610e6e6110aa565b600d5460405163aacebbe360e01b81526001600160a01b0383811660048301526101009092049091169063aacebbe3906024016107ab565b610eae6110aa565b600f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610efb90831515815260200190565b60405180910390a150565b610f0e6110aa565b601855565b610f1b6110aa565b606481600854610f2b9190612090565b610f359190611ff8565b60155550565b610f436110aa565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610f6f6110aa565b606481600854610f7f9190612090565b610f899190611ff8565b60175550565b610f976110aa565b6001600160a01b0381166110015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61100a81611b74565b50565b6001600160a01b038316158061102a57506001600160a01b038216155b156110485760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b03163314610d505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ff8565b6001600160a01b038316158061112157506001600160a01b038216155b156111525760405163709ac01760e01b81526001600160a01b03808516600483015283166024820152604401610ff8565b8061118a57816001600160a01b0316836001600160a01b03166000805160206120b08339815191528360405161109d91815260200190565b6000546001600160a01b038481169116148015906111b657506000546001600160a01b03838116911614155b80156111ca57506001600160a01b03821615155b80156111e157506001600160a01b03821661dead14155b80156111f75750600f54600160a01b900460ff16155b15611444576001600160a01b0383166000908152600e602052604090205460ff168061123b57506001600160a01b0382166000908152600e602052604090205460ff165b1561129957326000908152601460205260409020544381111561127a5760405163251279e960e11b815243600482015260248101829052604401610ff8565b6018546112879043612078565b32600090815260146020526040902055505b6001600160a01b0383166000908152600e602052604090205460ff1680156112da57506001600160a01b03821660009081526005602052604090205460ff16155b1561135e5760155481111561131057601554604051631154203560e11b8152610ff8918391600401918252602082015260400190565b600061131b83610cd9565b6113259083612078565b9050601754811115611358576017546040516310ca5eef60e11b8152610ff8918391600401918252602082015260400190565b50611444565b6001600160a01b0382166000908152600e602052604090205460ff16801561139f57506001600160a01b03831660009081526005602052604090205460ff16155b156113da576015548111156113d557601554604051631154203560e11b8152610ff8918391600401918252602082015260400190565b611444565b6001600160a01b03821660009081526005602052604090205460ff1661144457600061140583610cd9565b61140f9083612078565b9050601754811115611442576017546040516310ca5eef60e11b8152610ff8918391600401918252602082015260400190565b505b6000601654611467600d60019054906101000a90046001600160a01b0316610cd9565b101590508080156114825750600f54600160a01b900460ff16155b80156114975750600f54600160a81b900460ff165b80156114bc57506001600160a01b0384166000908152600e602052604090205460ff16155b80156114e157506001600160a01b03841660009081526004602052604090205460ff16155b801561150657506001600160a01b03831660009081526004602052604090205460ff16155b156115c357600f8054600160a01b60ff60a01b19909116179055600d54601054601154601254601354604051631771912f60e31b815260048101949094526024840192909252604483015260648201526101009091046001600160a01b03169063bb8c897890608401600060405180830381600087803b15801561158957600080fd5b505af115801561159d573d6000803e3d6000fd5b505060006010819055601281905560118190556013555050600f805460ff60a01b191690555b60006115cd611b51565b905060006115db8285612090565b6001600160a01b0387166000908152600460205260409020549091508190859060ff1615801561162457506001600160a01b03871660009081526004602052604090205460ff16155b15611a14576001600160a01b0387166000908152600e6020526040812054819081908190819060ff161561171e5761165d60198c611ff8565b925061166a60198c611ff8565b915060196116798c6002612090565b6116839190611ff8565b9050611690600482611ff8565b601060008282546116a19190612078565b90915550600890506116b4826003612090565b6116be9190611ff8565b601160008282546116cf9190612078565b909155506116e09050600482611ff8565b601260008282546116f19190612078565b909155506117029050600882611ff8565b601360008282546117139190612078565b909155506118129050565b6001600160a01b038d166000908152600e602052604090205460ff161561181257606461174c8c6003612090565b6117569190611ff8565b925060646117658c6003612090565b61176f9190611ff8565b9150603261177e8c6003612090565b6117889190611ff8565b9050611795600682611ff8565b601060008282546117a69190612078565b909155506117b79050600382611ff8565b601160008282546117c89190612078565b909155506117d99050600382611ff8565b601260008282546117ea9190612078565b909155506117fb9050600682611ff8565b6013600082825461180c9190612078565b90915550505b8015611a0e5760006118248a83612090565b600d5461010090046001600160a01b0316600090815260016020526040812080549293508392909190611858908490612078565b9091555050600d5461010090046001600160a01b031660009081526006602052604090205460ff16156118ba57600d5461010090046001600160a01b0316600090815260026020526040812080548492906118b4908490612078565b90915550505b600d60019054906101000a90046001600160a01b03166001600160a01b03168e6001600160a01b03166000805160206120b08339815191528460405161190291815260200190565b60405180910390a36119148a84612090565b955085600960008282546119289190612030565b9250508190555082600860008282546119419190612030565b9250508190555061dead6001600160a01b03168e6001600160a01b03166000805160206120b08339815191528560405161197d91815260200190565b60405180910390a361198d611b51565b6119979085612090565b945084600960008282546119ab9190612030565b9250508190555083600a60008282546119c49190612078565b909155508190506119d58787612078565b6119df9190612078565b6119e99089612030565b9750816119f68486612078565b611a009190612078565b611a0a9088612030565b9650505b50505050505b6001600160a01b03881660009081526001602052604081208054859290611a3c908490612030565b90915550506001600160a01b03871660009081526001602052604081208054849290611a69908490612078565b90915550506001600160a01b03881660009081526006602052604090205460ff1615611abd576001600160a01b03881660009081526002602052604081208054889290611ab7908490612030565b90915550505b6001600160a01b03871660009081526006602052604090205460ff1615611b0c576001600160a01b03871660009081526002602052604081208054839290611b06908490612078565b90915550505b866001600160a01b0316886001600160a01b03166000805160206120b083398151915283604051611b3f91815260200190565b60405180910390a35050505050505050565b6000806000611b5e611c5c565b9092509050611b6d8183611ff8565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000908152600e60205260409020805460ff19168215801591909117909155611bff57611bfa82610b8a565b611c08565b611c08826109e8565b6001600160a01b038216600081815260056020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6009546008546000918291825b600754811015611dae57826001600060078481548110611c8b57611c8b61201a565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611cf65750816002600060078481548110611ccf57611ccf61201a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d0c57600954600854945094505050509091565b6001600060078381548110611d2357611d2361201a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d529084612030565b92506002600060078381548110611d6b57611d6b61201a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d9a9083612030565b915080611da68161205d565b915050611c69565b50600854600954611dbf9190611ff8565b821015611dd6576009546008549350935050509091565b90939092509050565b600060208083528351808285015260005b81811015611e0c57858101830151858201604001528201611df0565b81811115611e1e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461100a57600080fd5b60008060408385031215611e5c57600080fd5b8235611e6781611e34565b946020939093013593505050565b600060208284031215611e8757600080fd5b81356109e181611e34565b600080600060608486031215611ea757600080fd5b8335611eb281611e34565b92506020840135611ec281611e34565b929592945050506040919091013590565b600060208284031215611ee557600080fd5b5035919050565b80358015158114611efc57600080fd5b919050565b60008060408385031215611f1457600080fd5b8235611f1f81611e34565b9150611f2d60208401611eec565b90509250929050565b600060208284031215611f4857600080fd5b6109e182611eec565b60008060408385031215611f6457600080fd5b8235611f6f81611e34565b91506020830135611f7f81611e34565b809150509250929050565b600181811c90821680611f9e57607f821691505b60208210811415611fbf57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611fd757600080fd5b81516109e181611e34565b634e487b7160e01b600052601160045260246000fd5b60008261201557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60008282101561204257612042611fe2565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561207157612071611fe2565b5060010190565b6000821982111561208b5761208b611fe2565b500190565b60008160001904831182151516156120aa576120aa611fe2565b50029056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220bc733aeae3bb04a213a26a99f757a02d1529c3c069473ab1b6592c3b62378a3164736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000be1a270361736573152fce0163c0d169ce6e9890000000000000000000000000ffd0b4f9dbe6f61571cfd8a58099ba3fb6a4e10a0000000000000000000000001d0646ebe12ab71d209c8a0bd347a7c39ae6c647

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0xbe1A270361736573152fCe0163c0D169Ce6E9890
Arg [1] : _opsWallet (address): 0xffd0b4F9DBe6F61571cfd8A58099ba3FB6A4E10A
Arg [2] : _farmWallet (address): 0x1d0646EBe12aB71D209C8a0bd347a7C39Ae6C647

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000be1a270361736573152fce0163c0d169ce6e9890
Arg [1] : 000000000000000000000000ffd0b4f9dbe6f61571cfd8a58099ba3fb6a4e10a
Arg [2] : 0000000000000000000000001d0646ebe12ab71d209c8a0bd347a7c39ae6c647


Deployed Bytecode Sourcemap

23964:15950:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27286:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28198:161;;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;28198:161:0;1072:187:1;24290:64:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29751:87;29820:10;;29751:87;;;1662:25:1;;;1650:2;1635:18;29751:87:0;1516:177:1;24763:51:0;;;;;;;;-1:-1:-1;;;;;1888:32:1;;;1870:51;;1858:2;1843:18;24763:51:0;1698:229:1;31074:112:0;;;;;;:::i;:::-;;:::i;:::-;;27563:95;27643:7;;27563:95;;25069:33;;;;;;38468:122;;;;;;:::i;:::-;;:::i;25143:33::-;;;;;;25183:35;;;;;;24868:38;;;;;;;;-1:-1:-1;;;;;24868:38:0;;;28367:574;;;;;;:::i;:::-;;:::i;39303:606::-;;;;;;:::i;:::-;;:::i;29846:247::-;;;;;;:::i;:::-;;:::i;27472:83::-;27538:9;;27472:83;;27538:9;;;;2954:36:1;;2942:2;2927:18;27472:83:0;2812:184:1;30454:491:0;;;;;;:::i;:::-;;:::i;28949:215::-;;;;;;:::i;:::-;;:::i;24982:18::-;;;;;-1:-1:-1;;;;;24982:18:0;;;24821:38;;;;;32357:125;;;;;;:::i;:::-;-1:-1:-1;;;;;32446:28:0;32422:4;32446:28;;;:19;:28;;;;;;;;;32357:125;30101:345;;;;;;:::i;:::-;;:::i;38598:124::-;;;;;;:::i;:::-;;:::i;38060:106::-;;;;;;:::i;:::-;;:::i;25532:24::-;;;;;;25037:23;;;;;-1:-1:-1;;;25037:23:0;;;;;;27666:198;;;;;;:::i;:::-;;:::i;14350:103::-;;;:::i;38174:144::-;;;;;;:::i;:::-;;:::i;29623:120::-;;;;;;:::i;:::-;-1:-1:-1;;;;;29715:20:0;29691:4;29715:20;;;:11;:20;;;;;;;;;29623:120;13702:87;13748:7;13775:6;-1:-1:-1;;;;;13775:6:0;13702:87;;27377;;;:::i;38730:233::-;;;;;;:::i;:::-;;:::i;29172:443::-;;;;;;:::i;:::-;;:::i;27872:167::-;;;;;;:::i;:::-;;:::i;38326:134::-;;;;;;:::i;:::-;;:::i;24915:58::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31484:161;;;;;;:::i;:::-;;:::i;25300:51::-;;;;;;37960:92;;;;;;:::i;:::-;;:::i;31194:138::-;;;;;;:::i;:::-;;:::i;25109:27::-;;;;;;28047:143;;;;;;:::i;:::-;-1:-1:-1;;;;;28155:18:0;;;28128:7;28155:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;28047:143;25381:48;;;;;;30953:113;;;;;;:::i;:::-;;:::i;31340:136::-;;;;;;:::i;:::-;;:::i;14608:201::-;;;;;;:::i;:::-;;:::i;25460:41::-;;;;;;27286:83;27323:13;27356:5;27349:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27286:83;:::o;28198:161::-;28273:4;28290:39;180:10;28313:7;28322:6;28290:8;:39::i;:::-;-1:-1:-1;28347:4:0;28198:161;;;;:::o;31074:112::-;13588:13;:11;:13::i;:::-;-1:-1:-1;;;;;31142:28:0::1;31173:5;31142:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;31142:36:0::1;::::0;;31074:112::o;38468:122::-;13588:13;:11;:13::i;:::-;38542::::1;::::0;:40:::1;::::0;-1:-1:-1;;;38542:40:0;;-1:-1:-1;;;;;1888:32:1;;;38542:40:0::1;::::0;::::1;1870:51:1::0;38542:13:0::1;::::0;;::::1;::::0;;::::1;::::0;:29:::1;::::0;1843:18:1;;38542:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38468:122:::0;:::o;28367:574::-;-1:-1:-1;;;;;28550:19:0;;28465:4;28550:19;;;:11;:19;;;;;;;;180:10;28550:28;;;;;;;;-1:-1:-1;;28593:37:0;;28589:276;;28670:6;28651:16;:25;28647:96;;;28704:23;;-1:-1:-1;;;28704:23:0;;;;;;;;;;;28647:96;28786:52;28795:6;28803:7;28831:6;28812:16;:25;28786:8;:52::i;:::-;28875:36;28885:6;28893:9;28904:6;28875:9;:36::i;:::-;-1:-1:-1;28929:4:0;;28367:574;-1:-1:-1;;;;;28367:574:0:o;39303:606::-;13588:13;:11;:13::i;:::-;39403::::1;::::0;-1:-1:-1;;;;;39381:36:0;;::::1;39403:13;::::0;;::::1;;39381:36;39377:98;;;39441:22;;-1:-1:-1::0;;;39441:22:0::1;;;;;;;;;;;39377:98;39487:31;39547:10;39487:72;;39609:4;-1:-1:-1::0;;;;;39576:38:0::1;:13;-1:-1:-1::0;;;;;39576:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39576:38:0::1;;39572:100;;39638:22;;-1:-1:-1::0;;;39638:22:0::1;;;;;;;;;;;39572:100;39684:55;39718:13;39734:4;39684:25;:55::i;:::-;39750:39;39774:13;39750:15;:39::i;:::-;39802:13;:29:::0;;-1:-1:-1;;;;;;39802:29:0::1;;-1:-1:-1::0;;;;;39802:29:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;39849:52:::1;::::0;39886:13;::::1;::::0;::::1;::::0;39849:52;;::::1;::::0;::::1;::::0;-1:-1:-1;;39849:52:0::1;39366:543;39303:606:::0;:::o;29846:247::-;29912:7;29946;;29936;:17;29932:71;;;29977:14;;-1:-1:-1;;;29977:14:0;;;;;;;;;;;29932:71;30013:19;30036:10;:8;:10::i;:::-;30013:33;-1:-1:-1;30064:21:0;30013:33;30064:7;:21;:::i;:::-;30057:28;29846:247;-1:-1:-1;;;29846:247:0:o;30454:491::-;13588:13;:11;:13::i;:::-;-1:-1:-1;;;;;30531:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30526:75;;30575:14;;-1:-1:-1::0;;;30575:14:0::1;;;;;;;;;;;30526:75;30616:9;30611:327;30635:9;:16:::0;30631:20;::::1;30611:327;;;30693:7;-1:-1:-1::0;;;;;30677:23:0::1;:9;30687:1;30677:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30677:12:0::1;:23;30673:254;;;30736:9;30746:16:::0;;:20:::1;::::0;30765:1:::1;::::0;30746:20:::1;:::i;:::-;30736:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;30721:9:::1;:12:::0;;-1:-1:-1;;;;;30736:31:0;;::::1;::::0;30731:1;;30721:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;30721:46:0::1;-1:-1:-1::0;;;;;30721:46:0;;::::1;;::::0;;30786:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;30825:11:::1;:20:::0;;;;:28;;-1:-1:-1;;30825:28:0::1;::::0;;30872:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;30872:15:0;;;;;-1:-1:-1;;;;;;30872:15:0::1;::::0;;;;;30611:327:::1;30454:491:::0;:::o;30673:254::-:1;30653:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30611:327;;;;30454:491:::0;:::o;28949:215::-;180:10;29037:4;29086:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29086:34:0;;;;;;;;;;29037:4;;29054:80;;29077:7;;29086:47;;29123:10;;29086:47;:::i;:::-;29054:8;:80::i;30101:345::-;13588:13;:11;:13::i;:::-;-1:-1:-1;;;;;30179:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30175:74;;;30223:14;;-1:-1:-1::0;;;30223:14:0::1;;;;;;;;;;;30175:74;-1:-1:-1::0;;;;;30262:16:0;::::1;30281:1;30262:16:::0;;;:7:::1;:16;::::0;;;;;:20;30259:108:::1;;-1:-1:-1::0;;;;;30338:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;30318:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;30299:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;30259:108:::1;-1:-1:-1::0;;;;;30377:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;30377:27:0::1;30400:4;30377:27:::0;;::::1;::::0;;;30415:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30415:23:0::1;::::0;;::::1;::::0;;30101:345::o;38598:124::-;13588:13;:11;:13::i;:::-;38673::::1;::::0;:41:::1;::::0;-1:-1:-1;;;38673:41:0;;-1:-1:-1;;;;;1888:32:1;;;38673:41:0::1;::::0;::::1;1870:51:1::0;38673:13:0::1;::::0;;::::1;::::0;;::::1;::::0;:30:::1;::::0;1843:18:1;;38673:41:0::1;1698:229:1::0;38060:106:0;13588:13;:11;:13::i;:::-;38131:18:::1;:27:::0;38060:106::o;27666:198::-;-1:-1:-1;;;;;27756:20:0;;27732:7;27756:20;;;:11;:20;;;;;;;;27752:49;;;-1:-1:-1;;;;;;27785:16:0;;;;;:7;:16;;;;;;;27666:198::o;27752:49::-;-1:-1:-1;;;;;27839:16:0;;;;;;:7;:16;;;;;;27819:37;;:19;:37::i;:::-;27812:44;27666:198;-1:-1:-1;;27666:198:0:o;14350:103::-;13588:13;:11;:13::i;:::-;14415:30:::1;14442:1;14415:18;:30::i;:::-;14350:103::o:0;38174:144::-;13588:13;:11;:13::i;:::-;-1:-1:-1;;;;;38264:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;38264:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38174:144::o;27377:87::-;27416:13;27449:7;27442:14;;;;;:::i;38730:233::-;13588:13;:11;:13::i;:::-;38833::::1;-1:-1:-1::0;;;;;38825:21:0::1;:4;-1:-1:-1::0;;;;;38825:21:0::1;;38821:81;;;38870:20;;-1:-1:-1::0;;;38870:20:0::1;;;;;;;;;;;38821:81;38914:41;38943:4;38949:5;38914:28;:41::i;29172:443::-:0;180:10;29265:4;29348:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29348:34:0;;;;;;;;;;29265:4;;180:10;29397:34;;;29393:88;;;29455:14;;-1:-1:-1;;;29455:14:0;;;;;;;;;;;29393:88;29514:60;29523:5;29530:7;29558:15;29539:16;:34;29514:8;:60::i;:::-;-1:-1:-1;29603:4:0;;29172:443;-1:-1:-1;;;;29172:443:0:o;27872:167::-;27950:4;27967:42;180:10;27991:9;28002:6;27967:9;:42::i;38326:134::-;13588:13;:11;:13::i;:::-;38406::::1;::::0;:46:::1;::::0;-1:-1:-1;;;38406:46:0;;-1:-1:-1;;;;;1888:32:1;;;38406:46:0::1;::::0;::::1;1870:51:1::0;38406:13:0::1;::::0;;::::1;::::0;;::::1;::::0;:35:::1;::::0;1843:18:1;;38406:46:0::1;1698:229:1::0;31484:161:0;13588:13;:11;:13::i;:::-;31561:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;31561:22:0::1;-1:-1:-1::0;;;;31561:22:0;;::::1;;::::0;;31599:38:::1;::::0;::::1;::::0;::::1;::::0;31575:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;31599:38:0::1;;;;;;;;31484:161:::0;:::o;37960:92::-;13588:13;:11;:13::i;:::-;38030:5:::1;:14:::0;37960:92::o;31194:138::-;13588:13;:11;:13::i;:::-;31321:3:::1;31306:12;31296:7;;:22;;;;:::i;:::-;:28;;;;:::i;:::-;31273:20;:51:::0;-1:-1:-1;31194:138:0:o;30953:113::-;13588:13;:11;:13::i;:::-;-1:-1:-1;;;;;31023:28:0::1;;::::0;;;:19:::1;:28;::::0;;;;:35;;-1:-1:-1;;31023:35:0::1;31054:4;31023:35;::::0;;30953:113::o;31340:136::-;13588:13;:11;:13::i;:::-;31465:3:::1;31446:16;31436:7;;:26;;;;:::i;:::-;:32;;;;:::i;:::-;31424:9;:44:::0;-1:-1:-1;31340:136:0:o;14608:201::-;13588:13;:11;:13::i;:::-;-1:-1:-1;;;;;14697:22:0;::::1;14689:73;;;::::0;-1:-1:-1;;;14689:73:0;;6530:2:1;14689:73:0::1;::::0;::::1;6512:21:1::0;6569:2;6549:18;;;6542:30;6608:34;6588:18;;;6581:62;-1:-1:-1;;;6659:18:1;;;6652:36;6705:19;;14689:73:0::1;;;;;;;;;14773:28;14792:8;14773:18;:28::i;:::-;14608:201:::0;:::o;32490:287::-;-1:-1:-1;;;;;32579:19:0;;;;:44;;-1:-1:-1;;;;;;32602:21:0;;;32579:44;32575:98;;;32647:14;;-1:-1:-1;;;32647:14:0;;;;;;;;;;;32575:98;-1:-1:-1;;;;;32685:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32737:32;;1662:25:1;;;32737:32:0;;1635:18:1;32737:32:0;;;;;;;;32490:287;;;:::o;13867:132::-;13748:7;13775:6;-1:-1:-1;;;;;13775:6:0;180:10;13931:23;13923:68;;;;-1:-1:-1;;;13923:68:0;;6937:2:1;13923:68:0;;;6919:21:1;;;6956:18;;;6949:30;7015:34;6995:18;;;6988:62;7067:18;;13923:68:0;6735:356:1;32785:5167:0;-1:-1:-1;;;;;32903:18:0;;;;:38;;-1:-1:-1;;;;;;32925:16:0;;;32903:38;32899:103;;;32965:25;;-1:-1:-1;;;32965:25:0;;-1:-1:-1;;;;;7326:15:1;;;32965:25:0;;;7308:34:1;7378:15;;7358:18;;;7351:43;7243:18;;32965:25:0;7096:304:1;32899:103:0;33017:11;33014:93;;33064:2;-1:-1:-1;;;;;33049:26:0;33058:4;-1:-1:-1;;;;;33049:26:0;-1:-1:-1;;;;;;;;;;;33068:6:0;33049:26;;;;1662:25:1;;1650:2;1635:18;;1516:177;33014:93:0;13748:7;13775:6;-1:-1:-1;;;;;33137:15:0;;;13775:6;;33137:15;;;;:45;;-1:-1:-1;13748:7:0;13775:6;-1:-1:-1;;;;;33169:13:0;;;13775:6;;33169:13;;33137:45;:78;;;;-1:-1:-1;;;;;;33199:16:0;;;;33137:78;:116;;;;-1:-1:-1;;;;;;33232:21:0;;33246:6;33232:21;;33137:116;:142;;;;-1:-1:-1;33271:8:0;;-1:-1:-1;;;33271:8:0;;;;33270:9;33137:142;33119:1627;;;-1:-1:-1;;;;;33311:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;33346:29:0;;;;;;:25;:29;;;;;;;;33311:64;33307:397;;;33448:9;33396:20;33419:39;;;:28;:39;;;;;;33496:12;33481:27;;33477:131;;;33540:48;;-1:-1:-1;;;33540:48:0;;33561:12;33540:48;;;7579:25:1;7620:18;;;7613:34;;;7552:18;;33540:48:0;7405:248:1;33477:131:0;33683:5;;33668:20;;:12;:20;:::i;:::-;33655:9;33626:39;;;;:28;:39;;;;;:62;-1:-1:-1;33307:397:0;-1:-1:-1;;;;;33724:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;33760:35:0;;;;;;:31;:35;;;;;;;;33759:36;33724:71;33720:1015;;;33836:20;;33827:6;:29;33823:133;;;33915:20;;33888:48;;-1:-1:-1;;;33888:48:0;;;;33907:6;;33888:48;;7579:25:1;;;7635:2;7620:18;;7613:34;7567:2;7552:18;;7405:248;33823:133:0;33974:24;34010:13;34020:2;34010:9;:13::i;:::-;34001:22;;:6;:22;:::i;:::-;33974:49;;34065:9;;34046:16;:28;34042:135;;;34147:9;;34106:51;;-1:-1:-1;;;34106:51:0;;;;34129:16;;34106:51;;7579:25:1;;;7635:2;7620:18;;7613:34;7567:2;7552:18;;7405:248;34042:135:0;33797:397;33720:1015;;;-1:-1:-1;;;;;34204:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;34238:37:0;;;;;;:31;:37;;;;;;;;34237:38;34204:71;34200:535;;;34317:20;;34308:6;:29;34304:133;;;34396:20;;34369:48;;-1:-1:-1;;;34369:48:0;;;;34388:6;;34369:48;;7579:25:1;;;7635:2;7620:18;;7613:34;7567:2;7552:18;;7405:248;34304:133:0;34200:535;;;-1:-1:-1;;;;;34462:35:0;;;;;;:31;:35;;;;;;;;34458:277;;34517:24;34553:13;34563:2;34553:9;:13::i;:::-;34544:22;;:6;:22;:::i;:::-;34517:49;;34608:9;;34589:16;:28;34585:135;;;34690:9;;34649:51;;-1:-1:-1;;;34649:51:0;;;;34672:16;;34649:51;;7579:25:1;;;7635:2;7620:18;;7613:34;7567:2;7552:18;;7405:248;34585:135:0;34498:237;34458:277;34758:12;34810:18;;34773:33;34791:13;;;;;;;;;-1:-1:-1;;;;;34791:13:0;34773:9;:33::i;:::-;:55;;34758:70;;34859:7;:33;;;;-1:-1:-1;34884:8:0;;-1:-1:-1;;;34884:8:0;;;;34883:9;34859:33;:61;;;;-1:-1:-1;34909:11:0;;-1:-1:-1;;;34909:11:0;;;;34859:61;:110;;;;-1:-1:-1;;;;;;34938:31:0;;;;;;:25;:31;;;;;;;;34937:32;34859:110;:153;;;;-1:-1:-1;;;;;;34987:25:0;;;;;;:19;:25;;;;;;;;34986:26;34859:153;:194;;;;-1:-1:-1;;;;;;35030:23:0;;;;;;:19;:23;;;;;;;;35029:24;34859:194;34841:565;;;35080:8;:15;;-1:-1:-1;;;;;;;35080:15:0;;;;;;35112:13;;35138:18;;35158:12;;35172:18;;35192:20;;35112:101;;-1:-1:-1;;;35112:101:0;;;;;7889:25:1;;;;7930:18;;;7923:34;;;;7973:18;;;7966:34;8016:18;;;8009:34;35080:15:0;35112:13;;;-1:-1:-1;;;;;35112:13:0;;:25;;7861:19:1;;35112:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35251:1:0;35230:18;:22;;;35267:18;:22;;;35304:12;:16;;;35335:20;:24;-1:-1:-1;;35376:8:0;:16;;-1:-1:-1;;;;35376:16:0;;;34841:565;35418:19;35440:10;:8;:10::i;:::-;35418:32;-1:-1:-1;35461:15:0;35479:20;35418:32;35479:6;:20;:::i;:::-;-1:-1:-1;;;;;35604:25:0;;35510:23;35604:25;;;:19;:25;;;;;;35461:38;;-1:-1:-1;35461:38:0;;35580:6;;35604:25;;35603:26;:54;;;;-1:-1:-1;;;;;;35634:23:0;;;;;;:19;:23;;;;;;;;35633:24;35603:54;35599:2040;;;-1:-1:-1;;;;;35837:29:0;;35674:13;35837:29;;;:25;:29;;;;;;35674:13;;;;;;;;35837:29;;35833:863;;;35905:11;35914:2;35905:6;:11;:::i;:::-;35894:22;-1:-1:-1;35943:11:0;35952:2;35943:6;:11;:::i;:::-;35935:19;-1:-1:-1;36003:2:0;35990:10;:6;35999:1;35990:10;:::i;:::-;:15;;;;:::i;:::-;35973:32;-1:-1:-1;36046:18:0;36063:1;35973:32;36046:18;:::i;:::-;36024;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;36120:1:0;;-1:-1:-1;36099:18:0;:14;36116:1;36099:18;:::i;:::-;:22;;;;:::i;:::-;36083:12;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;36162:18:0;;-1:-1:-1;36179:1:0;36162:14;:18;:::i;:::-;36140;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;36223:18:0;;-1:-1:-1;36240:1:0;36223:14;:18;:::i;:::-;36199:20;;:42;;;;;;;:::i;:::-;;;;-1:-1:-1;35833:863:0;;-1:-1:-1;35833:863:0;;-1:-1:-1;;;;;36269:31:0;;;;;;:25;:31;;;;;;;;36265:431;;;36351:3;36338:10;:6;36347:1;36338:10;:::i;:::-;:16;;;;:::i;:::-;36327:27;-1:-1:-1;36394:3:0;36381:10;:6;36390:1;36381:10;:::i;:::-;:16;;;;:::i;:::-;36373:24;-1:-1:-1;36446:2:0;36433:10;:6;36442:1;36433:10;:::i;:::-;:15;;;;:::i;:::-;36416:32;-1:-1:-1;36489:18:0;36506:1;36416:32;36489:18;:::i;:::-;36467;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;36542:18:0;;-1:-1:-1;36559:1:0;36542:14;:18;:::i;:::-;36526:12;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;36601:18:0;;-1:-1:-1;36618:1:0;36601:14;:18;:::i;:::-;36579;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;36662:18:0;;-1:-1:-1;36679:1:0;36662:14;:18;:::i;:::-;36638:20;;:42;;;;;;;:::i;:::-;;;;-1:-1:-1;;36265:431:0;36716:18;;36712:914;;36790:22;36815:28;36832:11;36815:14;:28;:::i;:::-;36878:13;;;;;-1:-1:-1;;;;;36878:13:0;36862:31;;;;:7;:31;;;;;:49;;36790:53;;-1:-1:-1;36790:53:0;;36862:31;;;:49;;36790:53;;36862:49;:::i;:::-;;;;-1:-1:-1;;36953:13:0;;;;;-1:-1:-1;;;;;36953:13:0;36933:35;;;;:11;:35;;;;;;;;36930:110;;;37007:13;;;;;-1:-1:-1;;;;;37007:13:0;36991:31;;;;:7;:31;;;;;:49;;37026:14;;36991:31;:49;;37026:14;;36991:49;:::i;:::-;;;;-1:-1:-1;;36930:110:0;37089:13;;;;;;;;;-1:-1:-1;;;;;37089:13:0;-1:-1:-1;;;;;37066:54:0;37075:4;-1:-1:-1;;;;;37066:54:0;-1:-1:-1;;;;;;;;;;;37105:14:0;37066:54;;;;1662:25:1;;1650:2;1635:18;;1516:177;37066:54:0;;;;;;;;37177:19;37185:11;37177:5;:19;:::i;:::-;37169:27;;37226:5;37215:7;;:16;;;;;;;:::i;:::-;;;;;;;;37261:5;37250:7;;:16;;;;;;;:::i;:::-;;;;;;;;37315:6;-1:-1:-1;;;;;37292:38:0;37301:4;-1:-1:-1;;;;;37292:38:0;-1:-1:-1;;;;;;;;;;;37324:5:0;37292:38;;;;1662:25:1;;1650:2;1635:18;;1516:177;37292:38:0;;;;;;;;37373:10;:8;:10::i;:::-;37362:21;;:8;:21;:::i;:::-;37351:32;;37413:8;37402:7;;:19;;;;;;;:::i;:::-;;;;;;;;37454:8;37440:10;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;37520:14:0;;-1:-1:-1;37501:16:0;37512:5;37501:8;:16;:::i;:::-;:33;;;;:::i;:::-;37481:54;;;;:::i;:::-;;-1:-1:-1;37593:14:0;37574:16;37585:5;37574:8;:16;:::i;:::-;:33;;;;:::i;:::-;37554:54;;;;:::i;:::-;;;36736:890;36712:914;35659:1980;;;;;35599:2040;-1:-1:-1;;;;;37651:13:0;;;;;;:7;:13;;;;;:24;;37668:7;;37651:13;:24;;37668:7;;37651:24;:::i;:::-;;;;-1:-1:-1;;;;;;;37686:11:0;;;;;;:7;:11;;;;;:30;;37701:15;;37686:11;:30;;37701:15;;37686:30;:::i;:::-;;;;-1:-1:-1;;;;;;;37733:17:0;;;;;;:11;:17;;;;;;;;37729:73;;;-1:-1:-1;;;;;37767:13:0;;;;;;:7;:13;;;;;:23;;37784:6;;37767:13;:23;;37784:6;;37767:23;:::i;:::-;;;;-1:-1:-1;;37729:73:0;-1:-1:-1;;;;;37816:15:0;;;;;;:11;:15;;;;;;;;37812:78;;;-1:-1:-1;;;;;37848:11:0;;;;;;:7;:11;;;;;:30;;37863:15;;37848:11;:30;;37863:15;;37848:30;:::i;:::-;;;;-1:-1:-1;;37812:78:0;37922:2;-1:-1:-1;;;;;37907:35:0;37916:4;-1:-1:-1;;;;;37907:35:0;-1:-1:-1;;;;;;;;;;;37926:15:0;37907:35;;;;1662:25:1;;1650:2;1635:18;;1516:177;37907:35:0;;;;;;;;32888:5064;;;;;32785:5167;;;:::o;31653:160::-;31694:7;31715:15;31732;31751:19;:17;:19::i;:::-;31714:56;;-1:-1:-1;31714:56:0;-1:-1:-1;31788:17:0;31714:56;;31788:17;:::i;:::-;31781:24;;;;31653:160;:::o;14969:191::-;15043:16;15062:6;;-1:-1:-1;;;;;15079:17:0;;;-1:-1:-1;;;;;;15079:17:0;;;;;;15112:40;;15062:6;;;;;;;15112:40;;15043:16;15112:40;15032:128;14969:191;:::o;38971:324::-;-1:-1:-1;;;;;39054:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;39054:39:0;;;;;;;;;;;;39104:71;;39115:23;39133:4;39115:17;:23::i;:::-;39104:71;;;39154:21;39170:4;39154:15;:21::i;:::-;-1:-1:-1;;;;;39186:37:0;;;;;;:31;:37;;;;;;:45;;-1:-1:-1;;39186:45:0;;;;;;;;;;39247:40;;39186:45;;:37;39247:40;;;38971:324;;:::o;31821:528::-;31918:7;;31954;;31871;;;;;31972:265;31996:9;:16;31992:20;;31972:265;;;32062:7;32038;:21;32046:9;32056:1;32046:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32046:12:0;32038:21;;;;;;;;;;;;;:31;;:66;;;32097:7;32073;:21;32081:9;32091:1;32081:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32081:12:0;32073:21;;;;;;;;;;;;;:31;32038:66;32034:97;;;32114:7;;32123;;32106:25;;;;;;;31821:528;;:::o;32034:97::-;32157:7;:21;32165:9;32175:1;32165:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32165:12:0;32157:21;;;;;;;;;;;;;32146:32;;;;:::i;:::-;;;32204:7;:21;32212:9;32222:1;32212:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32212:12:0;32204:21;;;;;;;;;;;;;32193:32;;;;:::i;:::-;;-1:-1:-1;32014:3:0;;;;:::i;:::-;;;;31972:265;;;;32271:7;;32261;;:17;;;;:::i;:::-;32251:7;:27;32247:58;;;32288:7;;32297;;32280:25;;;;;;31821:528;;:::o;32247:58::-;32324:7;;32333;;-1:-1:-1;31821:528:0;-1:-1:-1;31821:528:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;2166:456::-;2243:6;2251;2259;2312:2;2300:9;2291:7;2287:23;2283:32;2280:52;;;2328:1;2325;2318:12;2280:52;2367:9;2354:23;2386:31;2411:5;2386:31;:::i;:::-;2436:5;-1:-1:-1;2493:2:1;2478:18;;2465:32;2506:33;2465:32;2506:33;:::i;:::-;2166:456;;2558:7;;-1:-1:-1;;;2612:2:1;2597:18;;;;2584:32;;2166:456::o;2627:180::-;2686:6;2739:2;2727:9;2718:7;2714:23;2710:32;2707:52;;;2755:1;2752;2745:12;2707:52;-1:-1:-1;2778:23:1;;2627:180;-1:-1:-1;2627:180:1:o;3430:160::-;3495:20;;3551:13;;3544:21;3534:32;;3524:60;;3580:1;3577;3570:12;3524:60;3430:160;;;:::o;3595:315::-;3660:6;3668;3721:2;3709:9;3700:7;3696:23;3692:32;3689:52;;;3737:1;3734;3727:12;3689:52;3776:9;3763:23;3795:31;3820:5;3795:31;:::i;:::-;3845:5;-1:-1:-1;3869:35:1;3900:2;3885:18;;3869:35;:::i;:::-;3859:45;;3595:315;;;;;:::o;3915:180::-;3971:6;4024:2;4012:9;4003:7;3999:23;3995:32;3992:52;;;4040:1;4037;4030:12;3992:52;4063:26;4079:9;4063:26;:::i;4100:388::-;4168:6;4176;4229:2;4217:9;4208:7;4204:23;4200:32;4197:52;;;4245:1;4242;4235:12;4197:52;4284:9;4271:23;4303:31;4328:5;4303:31;:::i;:::-;4353:5;-1:-1:-1;4410:2:1;4395:18;;4382:32;4423:33;4382:32;4423:33;:::i;:::-;4475:7;4465:17;;;4100:388;;;;;:::o;4493:380::-;4572:1;4568:12;;;;4615;;;4636:61;;4690:4;4682:6;4678:17;4668:27;;4636:61;4743:2;4735:6;4732:14;4712:18;4709:38;4706:161;;;4789:10;4784:3;4780:20;4777:1;4770:31;4824:4;4821:1;4814:15;4852:4;4849:1;4842:15;4706:161;;4493:380;;;:::o;4878:251::-;4948:6;5001:2;4989:9;4980:7;4976:23;4972:32;4969:52;;;5017:1;5014;5007:12;4969:52;5049:9;5043:16;5068:31;5093:5;5068:31;:::i;5134:127::-;5195:10;5190:3;5186:20;5183:1;5176:31;5226:4;5223:1;5216:15;5250:4;5247:1;5240:15;5266:217;5306:1;5332;5322:132;;5376:10;5371:3;5367:20;5364:1;5357:31;5411:4;5408:1;5401:15;5439:4;5436:1;5429:15;5322:132;-1:-1:-1;5468:9:1;;5266:217::o;5488:127::-;5549:10;5544:3;5540:20;5537:1;5530:31;5580:4;5577:1;5570:15;5604:4;5601:1;5594:15;5620:125;5660:4;5688:1;5685;5682:8;5679:34;;;5693:18;;:::i;:::-;-1:-1:-1;5730:9:1;;5620:125::o;5750:127::-;5811:10;5806:3;5802:20;5799:1;5792:31;5842:4;5839:1;5832:15;5866:4;5863:1;5856:15;5882:135;5921:3;-1:-1:-1;;5942:17:1;;5939:43;;;5962:18;;:::i;:::-;-1:-1:-1;6009:1:1;5998:13;;5882:135::o;6022:128::-;6062:3;6093:1;6089:6;6086:1;6083:13;6080:39;;;6099:18;;:::i;:::-;-1:-1:-1;6135:9:1;;6022:128::o;6155:168::-;6195:7;6261:1;6257;6253:6;6249:14;6246:1;6243:21;6238:1;6231:9;6224:17;6220:45;6217:71;;;6268:18;;:::i;:::-;-1:-1:-1;6308:9:1;;6155:168::o

Swarm Source

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