ETH Price: $2,876.40 (-5.73%)
Gas: 2 Gwei

Token

Technium (ONE)
 

Overview

Max Total Supply

100,000,000 ONE

Holders

59

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Technium

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-03
*/

/**
 *Submitted for verification at Etherscan.io on 2023-04-03
*/

pragma solidity ^0.6.12;

// SPDX-License-Identifier: Unlicensed
interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(
            _previousOwner == msg.sender,
            "You don't have permission to unlock"
        );
        require(now > _lockTime, "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IUniswapV2Factory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

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

// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

contract Technium is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedMaxWallet;
    mapping(address => bool) public ammPairs;
    uint256 private _totalSupply = 100000000 * 10 ** 18;

    string private _name = "Technium";
    string private _symbol = "ONE";
    uint8 private _decimals = 18;

    uint256 public _buyTaxFee = 80;
    uint256 public _sellTaxFee = 80;

    uint256 public _marketingTaxFee = 880;

    address public marketingWallet = 0x6ECf84AF280d5Fb22d4FCA827aF1281BEDa3DAc2;
    uint256 public _maxWalletAmount = 500000 * 10 ** 18;
    uint256 public numTokensSellToAddToLiquidity = 100000 * 10 ** 18;
    bool public isSwapEnabled = true;
    bool public currentStateSwap = true;

    mapping(address => bool) public blackList;
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public liquidityAddress;
    bool public swapAndLiquifyEnabled = true;

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

    constructor() public {
        _balances[_msgSender()] = _totalSupply;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;

        // Create a uniswap pair for this new token
        liquidityAddress = address(0); // IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        ammPairs[liquidityAddress] = true;
        _isExcludedMaxWallet[owner()] = true;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

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

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

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

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

    function excludeFromFee(address account, bool isBool) public onlyOwner {
        _isExcludedFromFee[account] = isBool;
    }

    function manageAmmPairs(address pair, bool isAdd) public onlyOwner {
        ammPairs[pair] = isAdd;
    }

    function excludeMaxWallet(address account, bool isBool) public onlyOwner {
        _isExcludedMaxWallet[account] = isBool;
    }

    function isExcludeMaxWallet(address account) public view returns (bool) {
        return _isExcludedMaxWallet[account];
    }

    function setTaxFeePercent(
        uint256 buyTaxFee,
        uint256 sellTaxFee
    ) external onlyOwner {
        if (buyTaxFee > 0) {
            _buyTaxFee = buyTaxFee;
        }
        if (sellTaxFee > 0) {
            _sellTaxFee = sellTaxFee;
        }
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
    }

    function setMarketingFeePercent(uint256 _marketingFee) external onlyOwner {
        _marketingTaxFee = _marketingFee;
    }

    function setMaxWalletPercent(uint256 _maxWalletPercent) external onlyOwner {
        _maxWalletAmount = _totalSupply.mul(_maxWalletPercent).div(10 ** 3);
    }

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

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

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

    function turnOnOffSwap(bool _isBool) public onlyOwner {
        isSwapEnabled = _isBool;
    }

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!blackList[from], "ERC20: transfer to the black list address");
        require(!blackList[to], "ERC20: transfer to the black list address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (!ammPairs[to] && !_isExcludedMaxWallet[from] && !_isExcludedMaxWallet[to]) {
            require(
                (balanceOf(to) + amount) <= _maxWalletAmount,
                "Transfer amount exceeds the maxWalletAmount."
            );
        }

        //if any account belongs to _isExcludedFromFee account then remove the fee
        bool takeFee = false;
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            takeFee = true;
        }

        //transfer amount, it will take tax, burn, advertisement fee
        _tokenTransfer(from, to, amount, takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        bool isBuy = ammPairs[sender];
        bool isSell = ammPairs[recipient];
        if (isBuy || isSell) {
            require(isSwapEnabled, "swap not enabled");
        }

        if (takeFee) {
            uint256 _fee = 0;

            if (isBuy) {
                _fee = amount.mul(_buyTaxFee).div(1000);
            } else if (isSell) {
                _fee = amount.mul(_sellTaxFee).div(1000);
            }
            uint256 amountAfterFee = amount.sub(_fee);
            _balances[address(this)] += _fee;
            _balances[sender] -= amount;
            _balances[recipient] += amountAfterFee;
        } else {
            _balances[sender] -= amount;
            _balances[recipient] += amount;
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        bool overMinTokenBalance = _balances[address(this)] >= numTokensSellToAddToLiquidity;

        if (
            overMinTokenBalance &&
            !ammPairs[sender] &&
            !ammPairs[recipient] &&
            swapAndLiquifyEnabled &&
            currentStateSwap
        ) {
            //swap fee
            swapAndLiquify(numTokensSellToAddToLiquidity.mul(_marketingTaxFee).div(1000));
        }
        if (
            overMinTokenBalance &&
            !ammPairs[sender] &&
            !ammPairs[recipient] &&
            swapAndLiquifyEnabled &&
            !currentStateSwap
        ) {
            //swap fee
            swapAndLiquifyLp(numTokensSellToAddToLiquidity.sub(numTokensSellToAddToLiquidity.mul(_marketingTaxFee).div(1000)));
        }
        currentStateSwap = !currentStateSwap;
        emit Transfer(sender, recipient, amount);
    }

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

    function setNumTokensSellToAddToLiquidity(
        uint256 _amount
    ) public onlyOwner {
        numTokensSellToAddToLiquidity = _amount;
    }

    function swapAndLiquify(uint256 contractTokenBalance) private {
        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        // uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(contractTokenBalance, marketingWallet);
        // <- this breaks the ETH -> HATE swap when swap is triggered

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

        // emit SwapAndLiquify(contractTokenBalance, newBalance);
    }

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

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

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

    function swapAndLiquifyLp(uint256 contractTokenBalance) private {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half, address(this));
        // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

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

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquifyLp(half, newBalance, otherHalf);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    /**
     * @dev Withdraw bnb from this contract (Callable by owner only)
     */
    function handleForfeitedBalance(
        address coinAddress,
        uint256 value,
        address payable to
    ) public onlyOwner {
        if (coinAddress == address(0)) {
            return to.transfer(value);
        }
        if (coinAddress == address(this)) {
            return _transfer(address(this), to, value);
        }
        IERC20(coinAddress).transfer(to, value);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquifyLp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentStateSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBool","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBool","type":"bool"}],"name":"excludeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"coinAddress","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"handleForfeitedBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludeMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"isAdd","type":"bool"}],"name":"manageAmmPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellTaxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBool","type":"bool"}],"name":"turnOnOffSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526a52b7d2dcc80cd2e40000006008556040518060400160405280600881526020017f546563686e69756d000000000000000000000000000000000000000000000000815250600990805190602001906200006092919062000590565b506040518060400160405280600381526020017f4f4e450000000000000000000000000000000000000000000000000000000000815250600a9080519060200190620000ae92919062000590565b506012600b60006101000a81548160ff021916908360ff1602179055506050600c556050600d55610370600e55736ecf84af280d5fb22d4fca827af1281beda3dac2600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506969e10de76676d080000060105569152d02c7e14af68000006011556001601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff02191690831515021790555060016014806101000a81548160ff021916908315150217905550348015620001a957600080fd5b506000620001bc6200055f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060085460036000620002716200055f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506000601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620003d16200056760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000620004386200056760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004f16200055f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040518082815260200191505060405180910390a35062000636565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005d357805160ff191683800117855562000604565b8280016001018555821562000604579182015b8281111562000603578251825591602001919060010190620005e6565b5b50905062000613919062000617565b5090565b5b808211156200063257600081600090555060010162000618565b5090565b60805160601c613df56200066d6000398061104752806138b752806139a352806139ca5280613ad65280613afd5250613df56000f3fe60806040526004361061024a5760003560e01c80636c0a24eb11610139578063a9059cbb116100b6578063dd62ed3e1161007a578063dd62ed3e14610c6c578063df8408fe14610cf1578063ea0b0fa114610d4e578063efcc52de14610dab578063f0f165af14610dd6578063f2fde38b14610e1157610251565b8063a9059cbb14610b2d578063b6c5232414610b9e578063c49b9a8014610bc9578063d12a768814610c06578063dd46706414610c3157610251565b80638da5cb5b116100fd5780638da5cb5b146109b157806395d89b41146109f25780639fa7125414610a82578063a69df4b514610aaf578063a72905a214610ac657610251565b80636c0a24eb1461088e57806370a08231146108b9578063715018a61461091e57806375f0a8741461093557806382bf293c1461097657610251565b80633221c93f116101c75780634e5146321161018b5780634e514632146106f35780634e6f5b601461071e578063525bf097146107995780635342acb4146107d65780635d098b381461083d57610251565b80633221c93f146105b6578063351a964d146105f7578063457c194c146106245780634838d1651461065f5780634a74bb02146106c657610251565b80631e89dbbe1161020e5780631e89dbbe14610420578063200a692d1461048757806323b872dd146104b257806330b263ba14610543578063313ce5671461058857610251565b806306fdde0314610256578063095ea7b3146102e65780630c77a8f6146103575780631694505e146103b457806318160ddd146103f557610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b610e62565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b5061033f6004803603604081101561030957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f04565b60405180821515815260200191505060405180910390f35b34801561036357600080fd5b506103b26004803603604081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610f22565b005b3480156103c057600080fd5b506103c9611045565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040157600080fd5b5061040a611069565b6040518082815260200191505060405180910390f35b34801561042c57600080fd5b5061046f6004803603602081101561044357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611073565b60405180821515815260200191505060405180910390f35b34801561049357600080fd5b5061049c6110c9565b6040518082815260200191505060405180910390f35b3480156104be57600080fd5b5061052b600480360360608110156104d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110cf565b60405180821515815260200191505060405180910390f35b34801561054f57600080fd5b506105866004803603604081101561056657600080fd5b8101908080359060200190929190803590602001909291905050506111a8565b005b34801561059457600080fd5b5061059d611296565b604051808260ff16815260200191505060405180910390f35b3480156105c257600080fd5b506105cb6112ad565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060357600080fd5b5061060c6112d3565b60405180821515815260200191505060405180910390f35b34801561063057600080fd5b5061065d6004803603602081101561064757600080fd5b81019080803590602001909291905050506112e6565b005b34801561066b57600080fd5b506106ae6004803603602081101561068257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113b8565b60405180821515815260200191505060405180910390f35b3480156106d257600080fd5b506106db6113d8565b60405180821515815260200191505060405180910390f35b3480156106ff57600080fd5b506107086113e9565b6040518082815260200191505060405180910390f35b34801561072a57600080fd5b506107976004803603606081101561074157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113ef565b005b3480156107a557600080fd5b506107d4600480360360208110156107bc57600080fd5b8101908080351515906020019092919050505061162f565b005b3480156107e257600080fd5b50610825600480360360208110156107f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611714565b60405180821515815260200191505060405180910390f35b34801561084957600080fd5b5061088c6004803603602081101561086057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061176a565b005b34801561089a57600080fd5b506108a3611876565b6040518082815260200191505060405180910390f35b3480156108c557600080fd5b50610908600480360360208110156108dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061187c565b6040518082815260200191505060405180910390f35b34801561092a57600080fd5b506109336118c5565b005b34801561094157600080fd5b5061094a611a4b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098257600080fd5b506109af6004803603602081101561099957600080fd5b8101908080359060200190929190505050611a71565b005b3480156109bd57600080fd5b506109c6611b6b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109fe57600080fd5b50610a07611b94565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a47578082015181840152602081019050610a2c565b50505050905090810190601f168015610a745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a8e57600080fd5b50610a97611c36565b60405180821515815260200191505060405180910390f35b348015610abb57600080fd5b50610ac4611c49565b005b348015610ad257600080fd5b50610b1560048036036020811015610ae957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e66565b60405180821515815260200191505060405180910390f35b348015610b3957600080fd5b50610b8660048036036040811015610b5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e86565b60405180821515815260200191505060405180910390f35b348015610baa57600080fd5b50610bb3611ea4565b6040518082815260200191505060405180910390f35b348015610bd557600080fd5b50610c0460048036036020811015610bec57600080fd5b81019080803515159060200190929190505050611eae565b005b348015610c1257600080fd5b50610c1b611fcb565b6040518082815260200191505060405180910390f35b348015610c3d57600080fd5b50610c6a60048036036020811015610c5457600080fd5b8101908080359060200190929190505050611fd1565b005b348015610c7857600080fd5b50610cdb60048036036040811015610c8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121c2565b6040518082815260200191505060405180910390f35b348015610cfd57600080fd5b50610d4c60048036036040811015610d1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612249565b005b348015610d5a57600080fd5b50610da960048036036040811015610d7157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061236c565b005b348015610db757600080fd5b50610dc061248f565b6040518082815260200191505060405180910390f35b348015610de257600080fd5b50610e0f60048036036020811015610df957600080fd5b8101908080359060200190929190505050612495565b005b348015610e1d57600080fd5b50610e6060048036036020811015610e3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612567565b005b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610efa5780601f10610ecf57610100808354040283529160200191610efa565b820191906000526020600020905b815481529060010190602001808311610edd57829003601f168201915b5050505050905090565b6000610f18610f11612772565b848461277a565b6001905092915050565b610f2a612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600854905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b60006110dc848484612971565b61119d846110e8612772565b61119885604051806060016040528060288152602001613cd760289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114e612772565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e439092919063ffffffff16565b61277a565b600190509392505050565b6111b0612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008211156112815781600c819055505b60008111156112925780600d819055505b5050565b6000600b60009054906101000a900460ff16905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b6112ee612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b60136020528060005260406000206000915054906101000a900460ff1681565b60148054906101000a900460ff1681565b600e5481565b6113f7612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611538578073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611532573d6000803e3d6000fd5b5061162a565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561157c57611577308284612971565b61162a565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b505050506040513d602081101561161757600080fd5b8101908080519060200190929190505050505b505050565b611637612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611772612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118cd612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a79612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611b626103e8611b5483600854612f0390919063ffffffff16565b612f8990919063ffffffff16565b60108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c2c5780601f10611c0157610100808354040283529160200191611c2c565b820191906000526020600020905b815481529060010190602001808311611c0f57829003601f168201915b5050505050905090565b601260019054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613d9d6023913960400191505060405180910390fd5b6002544211611d66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60076020528060005260406000206000915054906101000a900460ff1681565b6000611e9a611e93612772565b8484612971565b6001905092915050565b6000600254905090565b611eb6612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806014806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b60115481565b611fd9612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612251612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612374612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b61249d612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461255d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b61256f612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461262f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c456026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612800576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d796024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612886576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c6b6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d286025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613c226023913960400191505060405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613c8d6029913960400191505060405180910390fd5b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613c8d6029913960400191505060405180910390fd5b60008111612c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613cff6029913960400191505060405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cc05750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d165750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d815760105481612d288461187c565b011115612d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613d4d602c913960400191505060405180910390fd5b5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e275750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3157600190505b612e3d84848484612fd3565b50505050565b6000838311158290612ef0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612eb5578082015181840152602081019050612e9a565b50505050905090810190601f168015612ee25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831415612f165760009050612f83565b6000828402905082848281612f2757fe5b0414612f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613cb66021913960400191505060405180910390fd5b809150505b92915050565b6000612fcb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613635565b905092915050565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050818061307e5750805b1561310657601260009054906101000a900460ff16613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f73776170206e6f7420656e61626c65640000000000000000000000000000000081525060200191505060405180910390fd5b5b821561327c57600082156131445761313d6103e861312f600c5488612f0390919063ffffffff16565b612f8990919063ffffffff16565b9050613177565b8115613176576131736103e8613165600d5488612f0390919063ffffffff16565b612f8990919063ffffffff16565b90505b5b600061318c82876136fb90919063ffffffff16565b905081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555085600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050613317565b83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555083600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b6000601154600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101590508080156133b75750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561340d5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613423575060148054906101000a900460ff165b801561343b5750601260019054906101000a900460ff165b156134745761347361346e6103e8613460600e54601154612f0390919063ffffffff16565b612f8990919063ffffffff16565b613745565b5b8080156134cb5750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135215750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613537575060148054906101000a900460ff165b80156135505750601260019054906101000a900460ff16155b1561359d5761359c6135976135866103e8613578600e54601154612f0390919063ffffffff16565b612f8990919063ffffffff16565b6011546136fb90919063ffffffff16565b613774565b5b601260019054906101000a900460ff1615601260016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a350505050505050565b600080831182906136e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136a657808201518184015260208101905061368b565b50505050905090810190601f1680156136d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816136ed57fe5b049050809150509392505050565b600061373d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e43565b905092915050565b61377181600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613821565b50565b600061378a600283612f8990919063ffffffff16565b905060006137a182846136fb90919063ffffffff16565b905060004790506137b28330613821565b60006137c782476136fb90919063ffffffff16565b90506137d38382613ad0565b7f80e6caad6fd8c3ee999cba473f7f22f7dd9264c2068b7b1a285f780397bdf79184828560405180848152602001838152602001828152602001935050505060405180910390a15050505050565b6060600267ffffffffffffffff8111801561383b57600080fd5b5060405190808252806020026020018201604052801561386a5781602001602082028036833780820191505090505b509050308160008151811061387b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391b57600080fd5b505afa15801561392f573d6000803e3d6000fd5b505050506040513d602081101561394557600080fd5b81019080805190602001909291905050508160018151811061396357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c8307f00000000000000000000000000000000000000000000000000000000000000008561277a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613a8a578082015181840152602081019050613a6f565b505050509050019650505050505050600060405180830381600087803b158015613ab357600080fd5b505af1158015613ac7573d6000803e3d6000fd5b50505050505050565b613afb307f00000000000000000000000000000000000000000000000000000000000000008461277a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b45611b6b565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613bca57600080fd5b505af1158015613bde573d6000803e3d6000fd5b50505050506040513d6060811015613bf557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220746f2074686520626c61636b206c6973742061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d617857616c6c6574416d6f756e742e45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636ba2646970667358221220c2a78154d4a76f49d233a05074cb3c38985c472b144955132368b1105f89b7b764736f6c634300060c0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80636c0a24eb11610139578063a9059cbb116100b6578063dd62ed3e1161007a578063dd62ed3e14610c6c578063df8408fe14610cf1578063ea0b0fa114610d4e578063efcc52de14610dab578063f0f165af14610dd6578063f2fde38b14610e1157610251565b8063a9059cbb14610b2d578063b6c5232414610b9e578063c49b9a8014610bc9578063d12a768814610c06578063dd46706414610c3157610251565b80638da5cb5b116100fd5780638da5cb5b146109b157806395d89b41146109f25780639fa7125414610a82578063a69df4b514610aaf578063a72905a214610ac657610251565b80636c0a24eb1461088e57806370a08231146108b9578063715018a61461091e57806375f0a8741461093557806382bf293c1461097657610251565b80633221c93f116101c75780634e5146321161018b5780634e514632146106f35780634e6f5b601461071e578063525bf097146107995780635342acb4146107d65780635d098b381461083d57610251565b80633221c93f146105b6578063351a964d146105f7578063457c194c146106245780634838d1651461065f5780634a74bb02146106c657610251565b80631e89dbbe1161020e5780631e89dbbe14610420578063200a692d1461048757806323b872dd146104b257806330b263ba14610543578063313ce5671461058857610251565b806306fdde0314610256578063095ea7b3146102e65780630c77a8f6146103575780631694505e146103b457806318160ddd146103f557610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b610e62565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f257600080fd5b5061033f6004803603604081101561030957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f04565b60405180821515815260200191505060405180910390f35b34801561036357600080fd5b506103b26004803603604081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050610f22565b005b3480156103c057600080fd5b506103c9611045565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040157600080fd5b5061040a611069565b6040518082815260200191505060405180910390f35b34801561042c57600080fd5b5061046f6004803603602081101561044357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611073565b60405180821515815260200191505060405180910390f35b34801561049357600080fd5b5061049c6110c9565b6040518082815260200191505060405180910390f35b3480156104be57600080fd5b5061052b600480360360608110156104d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110cf565b60405180821515815260200191505060405180910390f35b34801561054f57600080fd5b506105866004803603604081101561056657600080fd5b8101908080359060200190929190803590602001909291905050506111a8565b005b34801561059457600080fd5b5061059d611296565b604051808260ff16815260200191505060405180910390f35b3480156105c257600080fd5b506105cb6112ad565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060357600080fd5b5061060c6112d3565b60405180821515815260200191505060405180910390f35b34801561063057600080fd5b5061065d6004803603602081101561064757600080fd5b81019080803590602001909291905050506112e6565b005b34801561066b57600080fd5b506106ae6004803603602081101561068257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113b8565b60405180821515815260200191505060405180910390f35b3480156106d257600080fd5b506106db6113d8565b60405180821515815260200191505060405180910390f35b3480156106ff57600080fd5b506107086113e9565b6040518082815260200191505060405180910390f35b34801561072a57600080fd5b506107976004803603606081101561074157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113ef565b005b3480156107a557600080fd5b506107d4600480360360208110156107bc57600080fd5b8101908080351515906020019092919050505061162f565b005b3480156107e257600080fd5b50610825600480360360208110156107f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611714565b60405180821515815260200191505060405180910390f35b34801561084957600080fd5b5061088c6004803603602081101561086057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061176a565b005b34801561089a57600080fd5b506108a3611876565b6040518082815260200191505060405180910390f35b3480156108c557600080fd5b50610908600480360360208110156108dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061187c565b6040518082815260200191505060405180910390f35b34801561092a57600080fd5b506109336118c5565b005b34801561094157600080fd5b5061094a611a4b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098257600080fd5b506109af6004803603602081101561099957600080fd5b8101908080359060200190929190505050611a71565b005b3480156109bd57600080fd5b506109c6611b6b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109fe57600080fd5b50610a07611b94565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a47578082015181840152602081019050610a2c565b50505050905090810190601f168015610a745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a8e57600080fd5b50610a97611c36565b60405180821515815260200191505060405180910390f35b348015610abb57600080fd5b50610ac4611c49565b005b348015610ad257600080fd5b50610b1560048036036020811015610ae957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e66565b60405180821515815260200191505060405180910390f35b348015610b3957600080fd5b50610b8660048036036040811015610b5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e86565b60405180821515815260200191505060405180910390f35b348015610baa57600080fd5b50610bb3611ea4565b6040518082815260200191505060405180910390f35b348015610bd557600080fd5b50610c0460048036036020811015610bec57600080fd5b81019080803515159060200190929190505050611eae565b005b348015610c1257600080fd5b50610c1b611fcb565b6040518082815260200191505060405180910390f35b348015610c3d57600080fd5b50610c6a60048036036020811015610c5457600080fd5b8101908080359060200190929190505050611fd1565b005b348015610c7857600080fd5b50610cdb60048036036040811015610c8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121c2565b6040518082815260200191505060405180910390f35b348015610cfd57600080fd5b50610d4c60048036036040811015610d1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612249565b005b348015610d5a57600080fd5b50610da960048036036040811015610d7157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061236c565b005b348015610db757600080fd5b50610dc061248f565b6040518082815260200191505060405180910390f35b348015610de257600080fd5b50610e0f60048036036020811015610df957600080fd5b8101908080359060200190929190505050612495565b005b348015610e1d57600080fd5b50610e6060048036036020811015610e3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612567565b005b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610efa5780601f10610ecf57610100808354040283529160200191610efa565b820191906000526020600020905b815481529060010190602001808311610edd57829003601f168201915b5050505050905090565b6000610f18610f11612772565b848461277a565b6001905092915050565b610f2a612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600854905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b60006110dc848484612971565b61119d846110e8612772565b61119885604051806060016040528060288152602001613cd760289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114e612772565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e439092919063ffffffff16565b61277a565b600190509392505050565b6111b0612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008211156112815781600c819055505b60008111156112925780600d819055505b5050565b6000600b60009054906101000a900460ff16905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b6112ee612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600e8190555050565b60136020528060005260406000206000915054906101000a900460ff1681565b60148054906101000a900460ff1681565b600e5481565b6113f7612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611538578073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611532573d6000803e3d6000fd5b5061162a565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561157c57611577308284612971565b61162a565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b505050506040513d602081101561161757600080fd5b8101908080519060200190929190505050505b505050565b611637612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611772612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118cd612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a79612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611b626103e8611b5483600854612f0390919063ffffffff16565b612f8990919063ffffffff16565b60108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c2c5780601f10611c0157610100808354040283529160200191611c2c565b820191906000526020600020905b815481529060010190602001808311611c0f57829003601f168201915b5050505050905090565b601260019054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613d9d6023913960400191505060405180910390fd5b6002544211611d66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60076020528060005260406000206000915054906101000a900460ff1681565b6000611e9a611e93612772565b8484612971565b6001905092915050565b6000600254905090565b611eb6612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806014806101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b60115481565b611fd9612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612251612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612374612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b61249d612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461255d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b61256f612772565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461262f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c456026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612800576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d796024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612886576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c6b6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d286025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613c226023913960400191505060405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613c8d6029913960400191505060405180910390fd5b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613c8d6029913960400191505060405180910390fd5b60008111612c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613cff6029913960400191505060405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612cc05750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d165750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d815760105481612d288461187c565b011115612d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613d4d602c913960400191505060405180910390fd5b5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e275750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3157600190505b612e3d84848484612fd3565b50505050565b6000838311158290612ef0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612eb5578082015181840152602081019050612e9a565b50505050905090810190601f168015612ee25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831415612f165760009050612f83565b6000828402905082848281612f2757fe5b0414612f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613cb66021913960400191505060405180910390fd5b809150505b92915050565b6000612fcb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613635565b905092915050565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050818061307e5750805b1561310657601260009054906101000a900460ff16613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f73776170206e6f7420656e61626c65640000000000000000000000000000000081525060200191505060405180910390fd5b5b821561327c57600082156131445761313d6103e861312f600c5488612f0390919063ffffffff16565b612f8990919063ffffffff16565b9050613177565b8115613176576131736103e8613165600d5488612f0390919063ffffffff16565b612f8990919063ffffffff16565b90505b5b600061318c82876136fb90919063ffffffff16565b905081600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555085600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505050613317565b83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555083600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b6000601154600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101590508080156133b75750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561340d5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613423575060148054906101000a900460ff165b801561343b5750601260019054906101000a900460ff165b156134745761347361346e6103e8613460600e54601154612f0390919063ffffffff16565b612f8990919063ffffffff16565b613745565b5b8080156134cb5750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135215750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613537575060148054906101000a900460ff165b80156135505750601260019054906101000a900460ff16155b1561359d5761359c6135976135866103e8613578600e54601154612f0390919063ffffffff16565b612f8990919063ffffffff16565b6011546136fb90919063ffffffff16565b613774565b5b601260019054906101000a900460ff1615601260016101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a350505050505050565b600080831182906136e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136a657808201518184015260208101905061368b565b50505050905090810190601f1680156136d35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816136ed57fe5b049050809150509392505050565b600061373d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e43565b905092915050565b61377181600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613821565b50565b600061378a600283612f8990919063ffffffff16565b905060006137a182846136fb90919063ffffffff16565b905060004790506137b28330613821565b60006137c782476136fb90919063ffffffff16565b90506137d38382613ad0565b7f80e6caad6fd8c3ee999cba473f7f22f7dd9264c2068b7b1a285f780397bdf79184828560405180848152602001838152602001828152602001935050505060405180910390a15050505050565b6060600267ffffffffffffffff8111801561383b57600080fd5b5060405190808252806020026020018201604052801561386a5781602001602082028036833780820191505090505b509050308160008151811061387b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561391b57600080fd5b505afa15801561392f573d6000803e3d6000fd5b505050506040513d602081101561394557600080fd5b81019080805190602001909291905050508160018151811061396357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139c8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8561277a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613a8a578082015181840152602081019050613a6f565b505050509050019650505050505050600060405180830381600087803b158015613ab357600080fd5b505af1158015613ac7573d6000803e3d6000fd5b50505050505050565b613afb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461277a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b45611b6b565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613bca57600080fd5b505af1158015613bde573d6000803e3d6000fd5b50505050506040513d6060811015613bf557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220746f2074686520626c61636b206c6973742061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d617857616c6c6574416d6f756e742e45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636ba2646970667358221220c2a78154d4a76f49d233a05074cb3c38985c472b144955132368b1105f89b7b764736f6c634300060c0033

Deployed Bytecode Sourcemap

23774:12640:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25951:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26839:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27737:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24824:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26228:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27875:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24396:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27033:446;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28010:276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26137:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24882:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24693:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28428:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24776:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24920:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24436:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36008:403;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29207:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28730:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28294:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24564:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26336:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16954:148;;;;;;;;;;;;;:::i;:::-;;24482:75;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28561:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16312:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26042:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24732:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17997:329;;;;;;;;;;;;;:::i;:::-;;24138:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26463:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17546:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32647:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24622:64;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17711:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26663:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27487:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27621:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24359:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32826:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17257:281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25951:83;25988:13;26021:5;26014:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25951:83;:::o;26839:186::-;26939:4;26956:39;26965:12;:10;:12::i;:::-;26979:7;26988:6;26956:8;:39::i;:::-;27013:4;27006:11;;26839:186;;;;:::o;27737:130::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27853:6:::1;27821:20;:29;27842:7;27821:29;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;27737:130:::0;;:::o;24824:51::-;;;:::o;26228:100::-;26281:7;26308:12;;26301:19;;26228:100;:::o;27875:127::-;27941:4;27965:20;:29;27986:7;27965:29;;;;;;;;;;;;;;;;;;;;;;;;;27958:36;;27875:127;;;:::o;24396:31::-;;;;:::o;27033:446::-;27165:4;27182:36;27192:6;27200:9;27211:6;27182:9;:36::i;:::-;27229:220;27252:6;27273:12;:10;:12::i;:::-;27300:138;27356:6;27300:138;;;;;;;;;;;;;;;;;:11;:19;27312:6;27300:19;;;;;;;;;;;;;;;:33;27320:12;:10;:12::i;:::-;27300:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;27229:8;:220::i;:::-;27467:4;27460:11;;27033:446;;;;;:::o;28010:276::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28146:1:::1;28134:9;:13;28130:68;;;28177:9;28164:10;:22;;;;28130:68;28225:1;28212:10;:14;28208:71;;;28257:10;28243:11;:24;;;;28208:71;28010:276:::0;;:::o;26137:83::-;26178:5;26203:9;;;;;;;;;;;26196:16;;26137:83;:::o;24882:31::-;;;;;;;;;;;;;:::o;24693:32::-;;;;;;;;;;;;;:::o;28428:125::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28532:13:::1;28513:16;:32;;;;28428:125:::0;:::o;24776:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;24920:40::-;;;;;;;;;;;;:::o;24436:37::-;;;;:::o;36008:403::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36185:1:::1;36162:25;;:11;:25;;;36158:83;;;36211:2;:11;;:18;36223:5;36211:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36204:25;;36158:83;36278:4;36255:28;;:11;:28;;;36251:103;;;36307:35;36325:4;36332:2;36336:5;36307:9;:35::i;:::-;36300:42;;36251:103;36371:11;36364:28;;;36393:2;36397:5;36364:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;16594:1;36008:403:::0;;;:::o;29207:96::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29288:7:::1;29272:13;;:23;;;;;;;;;;;;;;;;;;29207:96:::0;:::o;28730:124::-;28795:4;28819:18;:27;28838:7;28819:27;;;;;;;;;;;;;;;;;;;;;;;;;28812:34;;28730:124;;;:::o;28294:126::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28396:16:::1;28378:15;;:34;;;;;;;;;;;;;;;;;;28294:126:::0;:::o;24564:51::-;;;;:::o;26336:119::-;26402:7;26429:9;:18;26439:7;26429:18;;;;;;;;;;;;;;;;26422:25;;26336:119;;;:::o;16954:148::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17061:1:::1;17024:40;;17045:6;::::0;::::1;;;;;;;;17024:40;;;;;;;;;;;;17092:1;17075:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16954:148::o:0;24482:75::-;;;;;;;;;;;;;:::o;28561:161::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28666:48:::1;28706:7;28666:35;28683:17;28666:12;;:16;;:35;;;;:::i;:::-;:39;;:48;;;;:::i;:::-;28647:16;:67;;;;28561:161:::0;:::o;16312:79::-;16350:7;16377:6;;;;;;;;;;;16370:13;;16312:79;:::o;26042:87::-;26081:13;26114:7;26107:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26042:87;:::o;24732:35::-;;;;;;;;;;;;;:::o;17997:329::-;18081:10;18063:28;;:14;;;;;;;;;;;:28;;;18041:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18179:9;;18173:3;:15;18165:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18269:14;;;;;;;;;;;18240:44;;18261:6;;;;;;;;;;18240:44;;;;;;;;;;;;18304:14;;;;;;;;;;;18295:6;;:23;;;;;;;;;;;;;;;;;;17997:329::o;24138:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;26463:192::-;26566:4;26583:42;26593:12;:10;:12::i;:::-;26607:9;26618:6;26583:9;:42::i;:::-;26643:4;26636:11;;26463:192;;;;:::o;17546:89::-;17591:7;17618:9;;17611:16;;17546:89;:::o;32647:171::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32748:8:::1;32724:21;::::0;:32:::1;;;;;;;;;;;;;;;;;;32772:38;32801:8;32772:38;;;;;;;;;;;;;;;;;;;;32647:171:::0;:::o;24622:64::-;;;;:::o;17711:214::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17792:6:::1;::::0;::::1;;;;;;;;17775:14;;:23;;;;;;;;;;;;;;;;;;17826:1;17809:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17857:4;17851:3;:10;17839:9;:22;;;;17914:1;17877:40;;17898:6;::::0;::::1;;;;;;;;17877:40;;;;;;;;;;;;17711:214:::0;:::o;26663:168::-;26769:7;26796:11;:18;26808:5;26796:18;;;;;;;;;;;;;;;:27;26815:7;26796:27;;;;;;;;;;;;;;;;26789:34;;26663:168;;;;:::o;27487:126::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27599:6:::1;27569:18;:27;27588:7;27569:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;27487:126:::0;;:::o;27621:108::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27716:5:::1;27699:8;:14;27708:4;27699:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;27621:108:::0;;:::o;24359:30::-;;;;:::o;32826:150::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32961:7:::1;32929:29;:39;;;;32826:150:::0;:::o;17257:281::-;16534:12;:10;:12::i;:::-;16524:22;;:6;;;;;;;;;;:22;;;16516:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17380:1:::1;17360:22;;:8;:22;;;;17338:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17493:8;17464:38;;17485:6;::::0;::::1;;;;;;;;17464:38;;;;;;;;;;;;17522:8;17513:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17257:281:::0;:::o;8259:106::-;8312:15;8347:10;8340:17;;8259:106;:::o;28862:337::-;28972:1;28955:19;;:5;:19;;;;28947:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29053:1;29034:21;;:7;:21;;;;29026:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29137:6;29107:11;:18;29119:5;29107:18;;;;;;;;;;;;;;;:27;29126:7;29107:27;;;;;;;;;;;;;;;:36;;;;29175:7;29159:32;;29168:5;29159:32;;;29184:6;29159:32;;;;;;;;;;;;;;;;;;28862:337;;;:::o;29404:1082::-;29508:1;29492:18;;:4;:18;;;;29484:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29585:1;29571:16;;:2;:16;;;;29563:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29647:9;:15;29657:4;29647:15;;;;;;;;;;;;;;;;;;;;;;;;;29646:16;29638:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29728:9;:13;29738:2;29728:13;;;;;;;;;;;;;;;;;;;;;;;;;29727:14;29719:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29815:1;29806:6;:10;29798:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29878:8;:12;29887:2;29878:12;;;;;;;;;;;;;;;;;;;;;;;;;29877:13;:44;;;;;29895:20;:26;29916:4;29895:26;;;;;;;;;;;;;;;;;;;;;;;;;29894:27;29877:44;:73;;;;;29926:20;:24;29947:2;29926:24;;;;;;;;;;;;;;;;;;;;;;;;;29925:25;29877:73;29873:256;;;30021:16;;30010:6;29994:13;30004:2;29994:9;:13::i;:::-;:22;29993:44;;29967:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29873:256;30225:12;30261:18;:24;30280:4;30261:24;;;;;;;;;;;;;;;;;;;;;;;;;30260:25;:52;;;;;30290:18;:22;30309:2;30290:22;;;;;;;;;;;;;;;;;;;;;;;;;30289:23;30260:52;30256:99;;;30339:4;30329:14;;30256:99;30437:41;30452:4;30458:2;30462:6;30470:7;30437:14;:41::i;:::-;29404:1082;;;;:::o;4567:226::-;4687:7;4720:1;4715;:6;;4723:12;4707:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4747:9;4763:1;4759;:5;4747:17;;4784:1;4777:8;;;4567:226;;;;;:::o;5052:471::-;5110:7;5360:1;5355;:6;5351:47;;;5385:1;5378:8;;;;5351:47;5410:9;5426:1;5422;:5;5410:17;;5455:1;5450;5446;:5;;;;;;:10;5438:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5514:1;5507:8;;;5052:471;;;;;:::o;5999:132::-;6057:7;6084:39;6088:1;6091;6084:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6077:46;;5999:132;;;;:::o;30567:2072::-;30718:10;30731:8;:16;30740:6;30731:16;;;;;;;;;;;;;;;;;;;;;;;;;30718:29;;30758:11;30772:8;:19;30781:9;30772:19;;;;;;;;;;;;;;;;;;;;;;;;;30758:33;;30806:5;:15;;;;30815:6;30806:15;30802:90;;;30846:13;;;;;;;;;;;30838:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30802:90;30908:7;30904:553;;;30932:12;30969:5;30965:178;;;31002:32;31029:4;31002:22;31013:10;;31002:6;:10;;:22;;;;:::i;:::-;:26;;:32;;;;:::i;:::-;30995:39;;30965:178;;;31060:6;31056:87;;;31094:33;31122:4;31094:23;31105:11;;31094:6;:10;;:23;;;;:::i;:::-;:27;;:33;;;;:::i;:::-;31087:40;;31056:87;30965:178;31157:22;31182:16;31193:4;31182:6;:10;;:16;;;;:::i;:::-;31157:41;;31241:4;31213:9;:24;31231:4;31213:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;31281:6;31260:9;:17;31270:6;31260:17;;;;;;;;;;;;;;;;:27;;;;;;;;;;;31326:14;31302:9;:20;31312:9;31302:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;30904:553;;;;;31394:6;31373:9;:17;31383:6;31373:17;;;;;;;;;;;;;;;;:27;;;;;;;;;;;31439:6;31415:9;:20;31425:9;31415:20;;;;;;;;;;;;;;;;:30;;;;;;;;;;;30904:553;31751:24;31806:29;;31778:9;:24;31796:4;31778:24;;;;;;;;;;;;;;;;:57;;31751:84;;31866:19;:53;;;;;31903:8;:16;31912:6;31903:16;;;;;;;;;;;;;;;;;;;;;;;;;31902:17;31866:53;:90;;;;;31937:8;:19;31946:9;31937:19;;;;;;;;;;;;;;;;;;;;;;;;;31936:20;31866:90;:128;;;;;31973:21;;;;;;;;;;31866:128;:161;;;;;32011:16;;;;;;;;;;;31866:161;31848:319;;;32078:77;32093:61;32149:4;32093:51;32127:16;;32093:29;;:33;;:51;;;;:::i;:::-;:55;;:61;;;;:::i;:::-;32078:14;:77::i;:::-;31848:319;32195:19;:53;;;;;32232:8;:16;32241:6;32232:16;;;;;;;;;;;;;;;;;;;;;;;;;32231:17;32195:53;:90;;;;;32266:8;:19;32275:9;32266:19;;;;;;;;;;;;;;;;;;;;;;;;;32265:20;32195:90;:128;;;;;32302:21;;;;;;;;;;32195:128;:162;;;;;32341:16;;;;;;;;;;;32340:17;32195:162;32177:357;;;32408:114;32425:96;32459:61;32515:4;32459:51;32493:16;;32459:29;;:33;;:51;;;;:::i;:::-;:55;;:61;;;;:::i;:::-;32425:29;;:33;;:96;;;;:::i;:::-;32408:16;:114::i;:::-;32177:357;32564:16;;;;;;;;;;;32563:17;32544:16;;:36;;;;;;;;;;;;;;;;;;32613:9;32596:35;;32605:6;32596:35;;;32624:6;32596:35;;;;;;;;;;;;;;;;;;30567:2072;;;;;;;:::o;6627:312::-;6747:7;6779:1;6775;:5;6782:12;6767:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6806:9;6822:1;6818;:5;;;;;;6806:17;;6930:1;6923:8;;;6627:312;;;;;:::o;4128:136::-;4186:7;4213:43;4217:1;4220;4213:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4206:50;;4128:136;;;;:::o;32984:761::-;33416:55;33433:20;33455:15;;;;;;;;;;;33416:16;:55::i;:::-;32984:761;:::o;34398:993::-;34524:12;34539:27;34564:1;34539:20;:24;;:27;;;;:::i;:::-;34524:42;;34577:17;34597:30;34622:4;34597:20;:24;;:30;;;;:::i;:::-;34577:50;;34905:22;34930:21;34905:46;;34996:37;35013:4;35027;34996:16;:37::i;:::-;35173:18;35194:41;35220:14;35194:21;:25;;:41;;;;:::i;:::-;35173:62;;35285:35;35298:9;35309:10;35285:12;:35::i;:::-;35338:45;35355:4;35361:10;35373:9;35338:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34398:993;;;;;:::o;33753:637::-;33927:21;33965:1;33951:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33927:40;;33996:4;33978;33983:1;33978:7;;;;;;;;;;;;;:23;;;;;;;;;;;34022:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34012:4;34017:1;34012:7;;;;;;;;;;;;;:32;;;;;;;;;;;34057:62;34074:4;34089:15;34107:11;34057:8;:62::i;:::-;34158:15;:66;;;34239:11;34265:1;34309:4;34328:13;34356:15;34158:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33753:637;;;:::o;35399:513::-;35547:62;35564:4;35579:15;35597:11;35547:8;:62::i;:::-;35652:15;:31;;;35691:9;35724:4;35744:11;35770:1;35813;35856:7;:5;:7::i;:::-;35878:15;35652:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35399:513;;:::o

Swarm Source

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