ETH Price: $3,671.99 (+2.61%)

Token

ERC-20: Tenshi (TENSHI)
 

Overview

Max Total Supply

1,000,000,000,000 TENSHI

Holders

5,049

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 TENSHI

Value
$0.00
0xf9df78d070f24c644d35a56a8f2971b590084e9b
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:
Tenshi

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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 {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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

    mapping (address => bool) private _isExcludedFromFee;

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

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'Tenshi';
    string private _symbol = 'TENSHI';
    uint8 private _decimals = 9;

    // Tax and kishu fees will start at 0 so we don't have a big impact when deploying to Uniswap
    // Kishu wallet address is null but the method to set the address is exposed
    uint256 private _taxFee = 1;
    uint256 private _kishuFee = 15;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousKishuFee = _kishuFee;

    address payable public _kishuWalletAddress;
    address payable public _marketingWalletAddress;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;

    uint256 private _maxTxAmount = 10000000000 * 10**9;
    // We will set a minimum amount of tokens to be swaped => 5M
    uint256 private _numOfTokensToExchangeForKishu = 5 * 10**3 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);

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

    constructor (address payable kishuWalletAddress, address payable marketingWalletAddress) public {
        _kishuWalletAddress = kishuWalletAddress;
        _marketingWalletAddress = marketingWalletAddress;
        _rOwned[_msgSender()] = _rTotal;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function excludeAccount(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function removeAllFee() private {
        if(_taxFee == 0 && _kishuFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousKishuFee = _kishuFee;

        _taxFee = 0;
        _kishuFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _kishuFee = _previousKishuFee;
    }

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

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

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(sender != owner() && recipient != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular kishu event.
        // also, don't swap if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForKishu;
        if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            // We need to swap the current tokens to ETH and send to the kishu wallet
            swapTokensForEth(contractTokenBalance);

            uint256 contractETHBalance = address(this).balance;
            if(contractETHBalance > 0) {
                sendETHToKishu(address(this).balance);
            }
        }

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

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

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

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

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

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

    function sendETHToKishu(uint256 amount) private {
        _kishuWalletAddress.transfer(amount.div(2));
        _marketingWalletAddress.transfer(amount.div(2));
    }

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

    function manualSend() external onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToKishu(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

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

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

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tKishu) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeKishu(tKishu);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tKishu) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeKishu(tKishu);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tKishu) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeKishu(tKishu);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tKishu) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeKishu(tKishu);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeKishu(uint256 tKishu) private {
        uint256 currentRate =  _getRate();
        uint256 rKishu = tKishu.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rKishu);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tKishu);
    }

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

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tKishu) = _getTValues(tAmount, _taxFee, _kishuFee);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tKishu);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 kishuFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tKishu = tAmount.mul(kishuFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tKishu);
        return (tTransferAmount, tFee, tKishu);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

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

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

    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

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

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

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 10, 'taxFee should be in 1 - 10');
        _taxFee = taxFee;
    }

    function _setKishuFee(uint256 kishuFee) external onlyOwner() {
        require(kishuFee >= 1 && kishuFee <= 11, 'kishuFee should be in 1 - 11');
        _kishuFee = kishuFee;
    }

    function _setKishuWallet(address payable kishuWalletAddress) external onlyOwner() {
        _kishuWalletAddress = kishuWalletAddress;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"kishuWalletAddress","type":"address"},{"internalType":"address payable","name":"marketingWalletAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_kishuWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"kishuFee","type":"uint256"}],"name":"_setKishuFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"kishuWalletAddress","type":"address"}],"name":"_setKishuWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052683635c9adc5dea00000600955600954600019816200001f57fe5b0660001903600a556040518060400160405280600681526020017f54656e7368690000000000000000000000000000000000000000000000000000815250600c908051906020019062000074929190620006d6565b506040518060400160405280600681526020017f54454e5348490000000000000000000000000000000000000000000000000000815250600d9080519060200190620000c2929190620006d6565b506009600e60006101000a81548160ff021916908360ff1602179055506001600f55600f601055600f5460115560105460125560006014806101000a81548160ff0219169083151502179055506001601460156101000a81548160ff021916908315150217905550678ac7230489e8000060155565048c273950006016553480156200014d57600080fd5b506040516200589a3803806200589a833981810160405260408110156200017357600080fd5b8101908080519060200190929190805190602001909291905050506000620001a0620006a560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5460036000620002d7620006a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037557600080fd5b505afa1580156200038a573d6000803e3d6000fd5b505050506040513d6020811015620003a157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041557600080fd5b505afa1580156200042a573d6000803e3d6000fd5b505050506040513d60208110156200044157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004bc57600080fd5b505af1158015620004d1573d6000803e3d6000fd5b505050506040513d6020811015620004e857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600660006200057c620006ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000635620006a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a35050506200077c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200071957805160ff19168380011785556200074a565b828001600101855582156200074a579182015b82811115620007495782518255916020019190600101906200072c565b5b5090506200075991906200075d565b5090565b5b80821115620007785760008160009055506001016200075e565b5090565b60805160601c60a05160601c6150e0620007ba60003980611353528061337d525080610e9052806137d752806138c352806138ea52506150e06000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063d543dbeb116100ab578063f2cc0c181161006f578063f2cc0c1814610c8f578063f2fde38b14610ce0578063f429389014610d31578063f815a84214610d48578063f84354f114610d735761023b565b8063d543dbeb14610b16578063d91d1f7d14610b51578063dd46706414610b92578063dd62ed3e14610bcd578063e01af92c14610c525761023b565b8063a9059cbb116100f2578063a9059cbb14610965578063af9549e0146109d6578063b6c5232414610a33578063c00f342e14610a5e578063cba0e99614610aaf5761023b565b8063715018a6146107f55780638da5cb5b1461080c57806395d89b411461084d578063a457c2d7146108dd578063a69df4b51461094e5761023b565b80633bd5d173116101bc5780635342acb4116101805780635342acb414610686578063550e48d4146106ed5780635880b873146107285780636ddd17131461076357806370a08231146107905761023b565b80633bd5d173146105575780634144d9e4146105925780634549b039146105d357806349bd5a5e1461062e57806351bc3c851461066f5761023b565b806318160ddd1161020357806318160ddd146103ad57806323b872dd146103d85780632d83811914610469578063313ce567146104b857806339509351146104e65761023b565b806306fdde0314610240578063095ea7b3146102d057806313114a9d146103415780631694505e1461036c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610dc4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029557808201518184015260208101905061027a565b50505050905090810190601f1680156102c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102dc57600080fd5b50610329600480360360408110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e66565b60405180821515815260200191505060405180910390f35b34801561034d57600080fd5b50610356610e84565b6040518082815260200191505060405180910390f35b34801561037857600080fd5b50610381610e8e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103b957600080fd5b506103c2610eb2565b6040518082815260200191505060405180910390f35b3480156103e457600080fd5b50610451600480360360608110156103fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ebc565b60405180821515815260200191505060405180910390f35b34801561047557600080fd5b506104a26004803603602081101561048c57600080fd5b8101908080359060200190929190505050610f95565b6040518082815260200191505060405180910390f35b3480156104c457600080fd5b506104cd611019565b604051808260ff16815260200191505060405180910390f35b3480156104f257600080fd5b5061053f6004803603604081101561050957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611030565b60405180821515815260200191505060405180910390f35b34801561056357600080fd5b506105906004803603602081101561057a57600080fd5b81019080803590602001909291905050506110e3565b005b34801561059e57600080fd5b506105a7611274565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105df57600080fd5b50610618600480360360408110156105f657600080fd5b810190808035906020019092919080351515906020019092919050505061129a565b6040518082815260200191505060405180910390f35b34801561063a57600080fd5b50610643611351565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067b57600080fd5b50610684611375565b005b34801561069257600080fd5b506106d5600480360360208110156106a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611456565b60405180821515815260200191505060405180910390f35b3480156106f957600080fd5b506107266004803603602081101561071057600080fd5b81019080803590602001909291905050506114ac565b005b34801561073457600080fd5b506107616004803603602081101561074b57600080fd5b8101908080359060200190929190505050611602565b005b34801561076f57600080fd5b50610778611758565b60405180821515815260200191505060405180910390f35b34801561079c57600080fd5b506107df600480360360208110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061176b565b6040518082815260200191505060405180910390f35b34801561080157600080fd5b5061080a611856565b005b34801561081857600080fd5b506108216119dc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561085957600080fd5b50610862611a05565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108a2578082015181840152602081019050610887565b50505050905090810190601f1680156108cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108e957600080fd5b506109366004803603604081101561090057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aa7565b60405180821515815260200191505060405180910390f35b34801561095a57600080fd5b50610963611b74565b005b34801561097157600080fd5b506109be6004803603604081101561098857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d91565b60405180821515815260200191505060405180910390f35b3480156109e257600080fd5b50610a31600480360360408110156109f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611daf565b005b348015610a3f57600080fd5b50610a48611ed2565b6040518082815260200191505060405180910390f35b348015610a6a57600080fd5b50610aad60048036036020811015610a8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611edc565b005b348015610abb57600080fd5b50610afe60048036036020811015610ad257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe8565b60405180821515815260200191505060405180910390f35b348015610b2257600080fd5b50610b4f60048036036020811015610b3957600080fd5b810190808035906020019092919050505061203e565b005b348015610b5d57600080fd5b50610b66612137565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b9e57600080fd5b50610bcb60048036036020811015610bb557600080fd5b810190808035906020019092919050505061215d565b005b348015610bd957600080fd5b50610c3c60048036036040811015610bf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061234e565b6040518082815260200191505060405180910390f35b348015610c5e57600080fd5b50610c8d60048036036020811015610c7557600080fd5b810190808035151590602001909291905050506123d5565b005b348015610c9b57600080fd5b50610cde60048036036020811015610cb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ba565b005b348015610cec57600080fd5b50610d2f60048036036020811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061286d565b005b348015610d3d57600080fd5b50610d46612a78565b005b348015610d5457600080fd5b50610d5d612b51565b6040518082815260200191505060405180910390f35b348015610d7f57600080fd5b50610dc260048036036020811015610d9657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b59565b005b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e5c5780601f10610e3157610100808354040283529160200191610e5c565b820191906000526020600020905b815481529060010190602001808311610e3f57829003601f168201915b5050505050905090565b6000610e7a610e73612ee3565b8484612eeb565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b6000610ec98484846130e2565b610f8a84610ed5612ee3565b610f8585604051806060016040528060288152602001614f7b60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f3b612ee3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b99092919063ffffffff16565b612eeb565b600190509392505050565b6000600a54821115610ff2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614ec0602a913960400191505060405180910390fd5b6000610ffc613579565b905061101181846135a490919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b60006110d961103d612ee3565b846110d4856005600061104e612ee3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b612eeb565b6001905092915050565b60006110ed612ee3565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615037602c913960400191505060405180910390fd5b600061119d83613676565b505050505090506111f681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061124e81600a546136dd90919063ffffffff16565b600a8190555061126983600b546135ee90919063ffffffff16565b600b81905550505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954831115611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161133457600061132484613676565b505050505090508091505061134b565b600061133f84613676565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61137d612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006114483061176b565b905061145381613727565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114b4612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156115865750600b8111155b6115f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f6b697368754665652073686f756c6420626520696e2031202d2031310000000081525060200191505060405180910390fd5b8060108190555050565b61160a612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156116dc5750600a8111155b61174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b80600f8190555050565b601460159054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561180657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611851565b61184e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f95565b90505b919050565b61185e612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a9d5780601f10611a7257610100808354040283529160200191611a9d565b820191906000526020600020905b815481529060010190602001808311611a8057829003601f168201915b5050505050905090565b6000611b6a611ab4612ee3565b84611b65856040518060600160405280602581526020016150866025913960056000611ade612ee3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b99092919063ffffffff16565b612eeb565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150636023913960400191505060405180910390fd5b6002544211611c91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611da5611d9e612ee3565b84846130e2565b6001905092915050565b611db7612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b611ee4612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612046612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61212e606461212083600954613a0990919063ffffffff16565b6135a490919063ffffffff16565b60158190555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612165612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612225576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123dd612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461249d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460156101000a81548160ff02191690831515021790555050565b6124c2612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561261b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806150156022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156127af5761276b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f95565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612875612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612935576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614eea6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a80612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050612b4e81613a8f565b50565b600047905090565b612b61612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ce0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015612edf578173ffffffffffffffffffffffffffffffffffffffff1660088281548110612d1457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ed257600860016008805490500381548110612d7057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110612da857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480612e9857fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612edf565b8080600101915050612ce3565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ff16024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614f106022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613168576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614fcc6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614e9d6023913960400191505060405180910390fd5b60008111613247576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614fa36029913960400191505060405180910390fd5b61324f6119dc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156132bd575061328d6119dc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561331e5760155481111561331d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f326028913960400191505060405180910390fd5b5b60006133293061176b565b9050601554811061333a5760155490505b6000601654821015905060148054906101000a900460ff1615801561336b5750601460159054906101000a900460ff165b80156133745750805b80156133cc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156133f4576133da82613727565b600047905060008111156133f2576133f147613a8f565b5b505b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061349b5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134a557600090505b6134b186868684613b8a565b505050505050565b6000838311158290613566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561352b578082015181840152602081019050613510565b50505050905090810190601f1680156135585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613586613e9b565b9150915061359d81836135a490919063ffffffff16565b9250505090565b60006135e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061412c565b905092915050565b60008082840190508381101561366c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006136938a600f546010546141f2565b92509250925060006136a3613579565b905060008060006136b58e8786614288565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061371f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134b9565b905092915050565b60016014806101000a81548160ff0219169083151502179055506060600267ffffffffffffffff8111801561375b57600080fd5b5060405190808252806020026020018201604052801561378a5781602001602082028036833780820191505090505b509050308160008151811061379b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561383b57600080fd5b505afa15801561384f573d6000803e3d6000fd5b505050506040513d602081101561386557600080fd5b81019080805190602001909291905050508160018151811061388357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138e8307f000000000000000000000000000000000000000000000000000000000000000084612eeb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156139aa57808201518184015260208101905061398f565b505050509050019650505050505050600060405180830381600087803b1580156139d357600080fd5b505af11580156139e7573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b600080831415613a1c5760009050613a89565b6000828402905082848281613a2d57fe5b0414613a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614f5a6021913960400191505060405180910390fd5b809150505b92915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613adf6002846135a490919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613b0a573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613b5b6002846135a490919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613b86573d6000803e3d6000fd5b5050565b80613b9857613b976142e6565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c3b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c5057613c4b848484614329565b613e87565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613cf35750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d0857613d03848484614589565b613e86565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613dac5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613dc157613dbc8484846147e9565b613e85565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613e635750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613e7857613e738484846149b4565b613e84565b613e838484846147e9565b5b5b5b5b80613e9557613e94614ca9565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156140ef57826003600060088481548110613ece57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613fb55750816004600060088481548110613f4d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613fcc57600a5460095494509450505050614128565b6140556003600060088481548110613fe057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846136dd90919063ffffffff16565b92506140e0600460006008848154811061406b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836136dd90919063ffffffff16565b91508080600101915050613eaf565b50614107600954600a546135a490919063ffffffff16565b82101561411f57600a54600954935093505050614128565b81819350935050505b9091565b600080831182906141d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561419d578082015181840152602081019050614182565b50505050905090810190601f1680156141ca5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816141e457fe5b049050809150509392505050565b60008060008061421e6064614210888a613a0990919063ffffffff16565b6135a490919063ffffffff16565b90506000614248606461423a888b613a0990919063ffffffff16565b6135a490919063ffffffff16565b9050600061427182614263858c6136dd90919063ffffffff16565b6136dd90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806142a18588613a0990919063ffffffff16565b905060006142b88688613a0990919063ffffffff16565b905060006142cf82846136dd90919063ffffffff16565b905082818395509550955050505093509350939050565b6000600f541480156142fa57506000601054145b1561430457614327565b600f546011819055506010546012819055506000600f8190555060006010819055505b565b60008060008060008061433b87613676565b95509550955095509550955061439987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061442e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144c385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061450f81614cbd565b6145198483614e62565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061459b87613676565b9550955095509550955095506145f986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061468e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061472385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061476f81614cbd565b6147798483614e62565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806147fb87613676565b95509550955095509550955061485986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148ee85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061493a81614cbd565b6149448483614e62565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806149c687613676565b955095509550955095509550614a2487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ab986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614be385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c2f81614cbd565b614c398483614e62565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601154600f81905550601254601081905550565b6000614cc7613579565b90506000614cde8284613a0990919063ffffffff16565b9050614d3281600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e5d57614e1983600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614e7782600a546136dd90919063ffffffff16565b600a81905550614e9281600b546135ee90919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205b736e134196728e3595c807bbeccc020b1df774f0742a2e8d8a960b66dfe80c64736f6c634300060c0033000000000000000000000000b7852d285f31b740318cab51bd0e5e7936073725000000000000000000000000b7852d285f31b740318cab51bd0e5e7936073725

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063d543dbeb116100ab578063f2cc0c181161006f578063f2cc0c1814610c8f578063f2fde38b14610ce0578063f429389014610d31578063f815a84214610d48578063f84354f114610d735761023b565b8063d543dbeb14610b16578063d91d1f7d14610b51578063dd46706414610b92578063dd62ed3e14610bcd578063e01af92c14610c525761023b565b8063a9059cbb116100f2578063a9059cbb14610965578063af9549e0146109d6578063b6c5232414610a33578063c00f342e14610a5e578063cba0e99614610aaf5761023b565b8063715018a6146107f55780638da5cb5b1461080c57806395d89b411461084d578063a457c2d7146108dd578063a69df4b51461094e5761023b565b80633bd5d173116101bc5780635342acb4116101805780635342acb414610686578063550e48d4146106ed5780635880b873146107285780636ddd17131461076357806370a08231146107905761023b565b80633bd5d173146105575780634144d9e4146105925780634549b039146105d357806349bd5a5e1461062e57806351bc3c851461066f5761023b565b806318160ddd1161020357806318160ddd146103ad57806323b872dd146103d85780632d83811914610469578063313ce567146104b857806339509351146104e65761023b565b806306fdde0314610240578063095ea7b3146102d057806313114a9d146103415780631694505e1461036c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610dc4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029557808201518184015260208101905061027a565b50505050905090810190601f1680156102c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102dc57600080fd5b50610329600480360360408110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e66565b60405180821515815260200191505060405180910390f35b34801561034d57600080fd5b50610356610e84565b6040518082815260200191505060405180910390f35b34801561037857600080fd5b50610381610e8e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103b957600080fd5b506103c2610eb2565b6040518082815260200191505060405180910390f35b3480156103e457600080fd5b50610451600480360360608110156103fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ebc565b60405180821515815260200191505060405180910390f35b34801561047557600080fd5b506104a26004803603602081101561048c57600080fd5b8101908080359060200190929190505050610f95565b6040518082815260200191505060405180910390f35b3480156104c457600080fd5b506104cd611019565b604051808260ff16815260200191505060405180910390f35b3480156104f257600080fd5b5061053f6004803603604081101561050957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611030565b60405180821515815260200191505060405180910390f35b34801561056357600080fd5b506105906004803603602081101561057a57600080fd5b81019080803590602001909291905050506110e3565b005b34801561059e57600080fd5b506105a7611274565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105df57600080fd5b50610618600480360360408110156105f657600080fd5b810190808035906020019092919080351515906020019092919050505061129a565b6040518082815260200191505060405180910390f35b34801561063a57600080fd5b50610643611351565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067b57600080fd5b50610684611375565b005b34801561069257600080fd5b506106d5600480360360208110156106a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611456565b60405180821515815260200191505060405180910390f35b3480156106f957600080fd5b506107266004803603602081101561071057600080fd5b81019080803590602001909291905050506114ac565b005b34801561073457600080fd5b506107616004803603602081101561074b57600080fd5b8101908080359060200190929190505050611602565b005b34801561076f57600080fd5b50610778611758565b60405180821515815260200191505060405180910390f35b34801561079c57600080fd5b506107df600480360360208110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061176b565b6040518082815260200191505060405180910390f35b34801561080157600080fd5b5061080a611856565b005b34801561081857600080fd5b506108216119dc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561085957600080fd5b50610862611a05565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108a2578082015181840152602081019050610887565b50505050905090810190601f1680156108cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108e957600080fd5b506109366004803603604081101561090057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611aa7565b60405180821515815260200191505060405180910390f35b34801561095a57600080fd5b50610963611b74565b005b34801561097157600080fd5b506109be6004803603604081101561098857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d91565b60405180821515815260200191505060405180910390f35b3480156109e257600080fd5b50610a31600480360360408110156109f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611daf565b005b348015610a3f57600080fd5b50610a48611ed2565b6040518082815260200191505060405180910390f35b348015610a6a57600080fd5b50610aad60048036036020811015610a8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611edc565b005b348015610abb57600080fd5b50610afe60048036036020811015610ad257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe8565b60405180821515815260200191505060405180910390f35b348015610b2257600080fd5b50610b4f60048036036020811015610b3957600080fd5b810190808035906020019092919050505061203e565b005b348015610b5d57600080fd5b50610b66612137565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b9e57600080fd5b50610bcb60048036036020811015610bb557600080fd5b810190808035906020019092919050505061215d565b005b348015610bd957600080fd5b50610c3c60048036036040811015610bf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061234e565b6040518082815260200191505060405180910390f35b348015610c5e57600080fd5b50610c8d60048036036020811015610c7557600080fd5b810190808035151590602001909291905050506123d5565b005b348015610c9b57600080fd5b50610cde60048036036020811015610cb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ba565b005b348015610cec57600080fd5b50610d2f60048036036020811015610d0357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061286d565b005b348015610d3d57600080fd5b50610d46612a78565b005b348015610d5457600080fd5b50610d5d612b51565b6040518082815260200191505060405180910390f35b348015610d7f57600080fd5b50610dc260048036036020811015610d9657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b59565b005b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e5c5780601f10610e3157610100808354040283529160200191610e5c565b820191906000526020600020905b815481529060010190602001808311610e3f57829003601f168201915b5050505050905090565b6000610e7a610e73612ee3565b8484612eeb565b6001905092915050565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b6000610ec98484846130e2565b610f8a84610ed5612ee3565b610f8585604051806060016040528060288152602001614f7b60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f3b612ee3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b99092919063ffffffff16565b612eeb565b600190509392505050565b6000600a54821115610ff2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614ec0602a913960400191505060405180910390fd5b6000610ffc613579565b905061101181846135a490919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b60006110d961103d612ee3565b846110d4856005600061104e612ee3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b612eeb565b6001905092915050565b60006110ed612ee3565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615037602c913960400191505060405180910390fd5b600061119d83613676565b505050505090506111f681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061124e81600a546136dd90919063ffffffff16565b600a8190555061126983600b546135ee90919063ffffffff16565b600b81905550505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954831115611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161133457600061132484613676565b505050505090508091505061134b565b600061133f84613676565b50505050915050809150505b92915050565b7f0000000000000000000000004a488d7a4f2240e4b1798c750e5bf8106e2acf9281565b61137d612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006114483061176b565b905061145381613727565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114b4612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156115865750600b8111155b6115f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f6b697368754665652073686f756c6420626520696e2031202d2031310000000081525060200191505060405180910390fd5b8060108190555050565b61160a612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156116dc5750600a8111155b61174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b80600f8190555050565b601460159054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561180657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611851565b61184e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f95565b90505b919050565b61185e612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a9d5780601f10611a7257610100808354040283529160200191611a9d565b820191906000526020600020905b815481529060010190602001808311611a8057829003601f168201915b5050505050905090565b6000611b6a611ab4612ee3565b84611b65856040518060600160405280602581526020016150866025913960056000611ade612ee3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134b99092919063ffffffff16565b612eeb565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150636023913960400191505060405180910390fd5b6002544211611c91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611da5611d9e612ee3565b84846130e2565b6001905092915050565b611db7612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b611ee4612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612046612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61212e606461212083600954613a0990919063ffffffff16565b6135a490919063ffffffff16565b60158190555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612165612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612225576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123dd612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461249d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460156101000a81548160ff02191690831515021790555050565b6124c2612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561261b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806150156022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156127af5761276b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f95565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612875612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612935576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614eea6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a80612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050612b4e81613a8f565b50565b600047905090565b612b61612ee3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ce0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015612edf578173ffffffffffffffffffffffffffffffffffffffff1660088281548110612d1457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ed257600860016008805490500381548110612d7057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110612da857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480612e9857fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612edf565b8080600101915050612ce3565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ff16024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614f106022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613168576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614fcc6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614e9d6023913960400191505060405180910390fd5b60008111613247576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614fa36029913960400191505060405180910390fd5b61324f6119dc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156132bd575061328d6119dc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561331e5760155481111561331d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f326028913960400191505060405180910390fd5b5b60006133293061176b565b9050601554811061333a5760155490505b6000601654821015905060148054906101000a900460ff1615801561336b5750601460159054906101000a900460ff165b80156133745750805b80156133cc57507f0000000000000000000000004a488d7a4f2240e4b1798c750e5bf8106e2acf9273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156133f4576133da82613727565b600047905060008111156133f2576133f147613a8f565b5b505b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061349b5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134a557600090505b6134b186868684613b8a565b505050505050565b6000838311158290613566576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561352b578082015181840152602081019050613510565b50505050905090810190601f1680156135585780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613586613e9b565b9150915061359d81836135a490919063ffffffff16565b9250505090565b60006135e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061412c565b905092915050565b60008082840190508381101561366c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006136938a600f546010546141f2565b92509250925060006136a3613579565b905060008060006136b58e8786614288565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061371f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134b9565b905092915050565b60016014806101000a81548160ff0219169083151502179055506060600267ffffffffffffffff8111801561375b57600080fd5b5060405190808252806020026020018201604052801561378a5781602001602082028036833780820191505090505b509050308160008151811061379b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561383b57600080fd5b505afa15801561384f573d6000803e3d6000fd5b505050506040513d602081101561386557600080fd5b81019080805190602001909291905050508160018151811061388357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138e8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612eeb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156139aa57808201518184015260208101905061398f565b505050509050019650505050505050600060405180830381600087803b1580156139d357600080fd5b505af11580156139e7573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b600080831415613a1c5760009050613a89565b6000828402905082848281613a2d57fe5b0414613a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614f5a6021913960400191505060405180910390fd5b809150505b92915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613adf6002846135a490919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613b0a573d6000803e3d6000fd5b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613b5b6002846135a490919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015613b86573d6000803e3d6000fd5b5050565b80613b9857613b976142e6565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c3b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c5057613c4b848484614329565b613e87565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613cf35750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d0857613d03848484614589565b613e86565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613dac5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613dc157613dbc8484846147e9565b613e85565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613e635750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613e7857613e738484846149b4565b613e84565b613e838484846147e9565b5b5b5b5b80613e9557613e94614ca9565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156140ef57826003600060088481548110613ece57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613fb55750816004600060088481548110613f4d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613fcc57600a5460095494509450505050614128565b6140556003600060088481548110613fe057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846136dd90919063ffffffff16565b92506140e0600460006008848154811061406b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836136dd90919063ffffffff16565b91508080600101915050613eaf565b50614107600954600a546135a490919063ffffffff16565b82101561411f57600a54600954935093505050614128565b81819350935050505b9091565b600080831182906141d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561419d578082015181840152602081019050614182565b50505050905090810190601f1680156141ca5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816141e457fe5b049050809150509392505050565b60008060008061421e6064614210888a613a0990919063ffffffff16565b6135a490919063ffffffff16565b90506000614248606461423a888b613a0990919063ffffffff16565b6135a490919063ffffffff16565b9050600061427182614263858c6136dd90919063ffffffff16565b6136dd90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806142a18588613a0990919063ffffffff16565b905060006142b88688613a0990919063ffffffff16565b905060006142cf82846136dd90919063ffffffff16565b905082818395509550955050505093509350939050565b6000600f541480156142fa57506000601054145b1561430457614327565b600f546011819055506010546012819055506000600f8190555060006010819055505b565b60008060008060008061433b87613676565b95509550955095509550955061439987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061442e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144c385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061450f81614cbd565b6145198483614e62565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061459b87613676565b9550955095509550955095506145f986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061468e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061472385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061476f81614cbd565b6147798483614e62565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806147fb87613676565b95509550955095509550955061485986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148ee85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061493a81614cbd565b6149448483614e62565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806149c687613676565b955095509550955095509550614a2487600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ab986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136dd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614be385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614c2f81614cbd565b614c398483614e62565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601154600f81905550601254601081905550565b6000614cc7613579565b90506000614cde8284613a0990919063ffffffff16565b9050614d3281600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e5d57614e1983600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ee90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614e7782600a546136dd90919063ffffffff16565b600a81905550614e9281600b546135ee90919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205b736e134196728e3595c807bbeccc020b1df774f0742a2e8d8a960b66dfe80c64736f6c634300060c0033

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

000000000000000000000000b7852d285f31b740318cab51bd0e5e7936073725000000000000000000000000b7852d285f31b740318cab51bd0e5e7936073725

-----Decoded View---------------
Arg [0] : kishuWalletAddress (address): 0xB7852D285f31B740318CAb51Bd0E5E7936073725
Arg [1] : marketingWalletAddress (address): 0xB7852D285f31B740318CAb51Bd0E5E7936073725

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b7852d285f31b740318cab51bd0e5e7936073725
Arg [1] : 000000000000000000000000b7852d285f31b740318cab51bd0e5e7936073725


Deployed Bytecode Sourcemap

24197:17613:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26902:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27814:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29070:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25410:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27179:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27983:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29994:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27088:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28304:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29165:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25355:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29550:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25468:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34794:156;;;;;;;;;;;;;:::i;:::-;;31543:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41305:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41128:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25541:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27282:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14903:148;;;;;;;;;;;;;:::i;:::-;;14269:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26993:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28530:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15906:293;;;;;;;;;;;;;:::i;:::-;;27488:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28925:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15455:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41496:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28807:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41645:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25306:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15620:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27663:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35123:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30255:443;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15203:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34958:157;;;;;;;;;;;;;:::i;:::-;;41010:110;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30706:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26902:83;26939:13;26972:5;26965:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26902:83;:::o;27814:161::-;27889:4;27906:39;27915:12;:10;:12::i;:::-;27929:7;27938:6;27906:8;:39::i;:::-;27963:4;27956:11;;27814:161;;;;:::o;29070:87::-;29112:7;29139:10;;29132:17;;29070:87;:::o;25410:51::-;;;:::o;27179:95::-;27232:7;27259;;27252:14;;27179:95;:::o;27983:313::-;28081:4;28098:36;28108:6;28116:9;28127:6;28098:9;:36::i;:::-;28145:121;28154:6;28162:12;:10;:12::i;:::-;28176:89;28214:6;28176:89;;;;;;;;;;;;;;;;;:11;:19;28188:6;28176:19;;;;;;;;;;;;;;;:33;28196:12;:10;:12::i;:::-;28176:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28145:8;:121::i;:::-;28284:4;28277:11;;27983:313;;;;;:::o;29994:253::-;30060:7;30099;;30088;:18;;30080:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30164:19;30187:10;:8;:10::i;:::-;30164:33;;30215:24;30227:11;30215:7;:11;;:24;;;;:::i;:::-;30208:31;;;29994:253;;;:::o;27088:83::-;27129:5;27154:9;;;;;;;;;;;27147:16;;27088:83;:::o;28304:218::-;28392:4;28409:83;28418:12;:10;:12::i;:::-;28432:7;28441:50;28480:10;28441:11;:25;28453:12;:10;:12::i;:::-;28441:25;;;;;;;;;;;;;;;:34;28467:7;28441:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;28409:8;:83::i;:::-;28510:4;28503:11;;28304:218;;;;:::o;29165:377::-;29217:14;29234:12;:10;:12::i;:::-;29217:29;;29266:11;:19;29278:6;29266:19;;;;;;;;;;;;;;;;;;;;;;;;;29265:20;29257:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29346:15;29370:19;29381:7;29370:10;:19::i;:::-;29345:44;;;;;;;29418:28;29438:7;29418;:15;29426:6;29418:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29400:7;:15;29408:6;29400:15;;;;;;;;;;;;;;;:46;;;;29467:20;29479:7;29467;;:11;;:20;;;;:::i;:::-;29457:7;:30;;;;29511:23;29526:7;29511:10;;:14;;:23;;;;:::i;:::-;29498:10;:36;;;;29165:377;;;:::o;25355:46::-;;;;;;;;;;;;;:::o;29550:436::-;29640:7;29679;;29668;:18;;29660:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29738:17;29733:246;;29773:15;29797:19;29808:7;29797:10;:19::i;:::-;29772:44;;;;;;;29838:7;29831:14;;;;;29733:246;29880:23;29911:19;29922:7;29911:10;:19::i;:::-;29878:52;;;;;;;29952:15;29945:22;;;29550:436;;;;;:::o;25468:38::-;;;:::o;34794:156::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34848:23:::1;34874:24;34892:4;34874:9;:24::i;:::-;34848:50;;34909:33;34926:15;34909:16;:33::i;:::-;14549:1;34794:156::o:0;31543:123::-;31607:4;31631:18;:27;31650:7;31631:27;;;;;;;;;;;;;;;;;;;;;;;;;31624:34;;31543:123;;;:::o;41305:183::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41397:1:::1;41385:8;:13;;:31;;;;;41414:2;41402:8;:14;;41385:31;41377:72;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41472:8;41460:9;:20;;;;41305:183:::0;:::o;41128:169::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41214:1:::1;41204:6;:11;;:27;;;;;41229:2;41219:6;:12;;41204:27;41196:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41283:6;41273:7;:16;;;;41128:169:::0;:::o;25541:30::-;;;;;;;;;;;;;:::o;27282:198::-;27348:7;27372:11;:20;27384:7;27372:20;;;;;;;;;;;;;;;;;;;;;;;;;27368:49;;;27401:7;:16;27409:7;27401:16;;;;;;;;;;;;;;;;27394:23;;;;27368:49;27435:37;27455:7;:16;27463:7;27455:16;;;;;;;;;;;;;;;;27435:19;:37::i;:::-;27428:44;;27282:198;;;;:::o;14903:148::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15010:1:::1;14973:40;;14994:6;::::0;::::1;;;;;;;;14973:40;;;;;;;;;;;;15041:1;15024:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;14903:148::o:0;14269:79::-;14307:7;14334:6;;;;;;;;;;;14327:13;;14269:79;:::o;26993:87::-;27032:13;27065:7;27058:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26993:87;:::o;28530:269::-;28623:4;28640:129;28649:12;:10;:12::i;:::-;28663:7;28672:96;28711:15;28672:96;;;;;;;;;;;;;;;;;:11;:25;28684:12;:10;:12::i;:::-;28672:25;;;;;;;;;;;;;;;:34;28698:7;28672:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;28640:8;:129::i;:::-;28787:4;28780:11;;28530:269;;;;:::o;15906:293::-;15976:10;15958:28;;:14;;;;;;;;;;;:28;;;15950:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16051:9;;16045:3;:15;16037:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16142:14;;;;;;;;;;;16113:44;;16134:6;;;;;;;;;;16113:44;;;;;;;;;;;;16177:14;;;;;;;;;;;16168:6;;:23;;;;;;;;;;;;;;;;;;15906:293::o;27488:167::-;27566:4;27583:42;27593:12;:10;:12::i;:::-;27607:9;27618:6;27583:9;:42::i;:::-;27643:4;27636:11;;27488:167;;;;:::o;28925:137::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29046:8:::1;29016:18;:27;29035:7;29016:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;28925:137:::0;;:::o;15455:89::-;15500:7;15527:9;;15520:16;;15455:89;:::o;41496:141::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41611:18:::1;41589:19;;:40;;;;;;;;;;;;;;;;;;41496:141:::0;:::o;28807:110::-;28865:4;28889:11;:20;28901:7;28889:20;;;;;;;;;;;;;;;;;;;;;;;;;28882:27;;28807:110;;;:::o;41645:162::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41739:60:::1;41783:5;41739:25;41751:12;41739:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;41724:12;:75;;;;41645:162:::0;:::o;25306:42::-;;;;;;;;;;;;;:::o;15620:214::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15701:6:::1;::::0;::::1;;;;;;;;15684:14;;:23;;;;;;;;;;;;;;;;;;15735:1;15718:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15766:4;15760:3;:10;15748:9;:22;;;;15823:1;15786:40;;15807:6;::::0;::::1;;;;;;;;15786:40;;;;;;;;;;;;15620:214:::0;:::o;27663:143::-;27744:7;27771:11;:18;27783:5;27771:18;;;;;;;;;;;;;;;:27;27790:7;27771:27;;;;;;;;;;;;;;;;27764:34;;27663:143;;;;:::o;35123:98::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35206:7:::1;35192:11;;:21;;;;;;;;;;;;;;;;;;35123:98:::0;:::o;30255:443::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30347:42:::1;30336:53;;:7;:53;;;;30328:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30448:11;:20;30460:7;30448:20;;;;;;;;;;;;;;;;;;;;;;;;;30447:21;30439:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30533:1;30514:7;:16;30522:7;30514:16;;;;;;;;;;;;;;;;:20;30511:108;;;30570:37;30590:7;:16;30598:7;30590:16;;;;;;;;;;;;;;;;30570:19;:37::i;:::-;30551:7;:16;30559:7;30551:16;;;;;;;;;;;;;;;:56;;;;30511:108;30652:4;30629:11;:20;30641:7;30629:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30667:9;30682:7;30667:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30255:443:::0;:::o;15203:244::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15312:1:::1;15292:22;;:8;:22;;;;15284:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15402:8;15373:38;;15394:6;::::0;::::1;;;;;;;;15373:38;;;;;;;;;;;;15431:8;15422:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15203:244:::0;:::o;34958:157::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35012:26:::1;35041:21;35012:50;;35073:34;35088:18;35073:14;:34::i;:::-;14549:1;34958:157::o:0;41010:110::-;41056:15;41091:21;41084:28;;41010:110;:::o;30706:478::-;14489:12;:10;:12::i;:::-;14479:22;;:6;;;;;;;;;;:22;;;14471:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30787:11:::1;:20;30799:7;30787:20;;;;;;;;;;;;;;;;;;;;;;;;;30779:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30855:9;30850:327;30874:9;:16;;;;30870:1;:20;30850:327;;;30932:7;30916:23;;:9;30926:1;30916:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;30912:254;;;30975:9;31004:1;30985:9;:16;;;;:20;30975:31;;;;;;;;;;;;;;;;;;;;;;;;;30960:9;30970:1;30960:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31044:1;31025:7;:16;31033:7;31025:16;;;;;;;;;;;;;;;:20;;;;31087:5;31064:11;:20;31076:7;31064:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31111:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31145:5;;30912:254;30892:3;;;;;;;30850:327;;;;30706:478:::0;:::o;101:106::-;154:15;189:10;182:17;;101:106;:::o;31674:337::-;31784:1;31767:19;;:5;:19;;;;31759:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31865:1;31846:21;;:7;:21;;;;31838:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31949:6;31919:11;:18;31931:5;31919:18;;;;;;;;;;;;;;;:27;31938:7;31919:27;;;;;;;;;;;;;;;:36;;;;31987:7;31971:32;;31980:5;31971:32;;;31996:6;31971:32;;;;;;;;;;;;;;;;;;31674:337;;;:::o;32019:1841::-;32134:1;32116:20;;:6;:20;;;;32108:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32218:1;32197:23;;:9;:23;;;;32189:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32288:1;32279:6;:10;32271:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32361:7;:5;:7::i;:::-;32351:17;;:6;:17;;;;:41;;;;;32385:7;:5;:7::i;:::-;32372:20;;:9;:20;;;;32351:41;32348:134;;;32425:12;;32415:6;:22;;32407:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32348:134;32746:28;32777:24;32795:4;32777:9;:24::i;:::-;32746:55;;32841:12;;32817:20;:36;32814:112;;32902:12;;32879:35;;32814:112;32938:24;32989:30;;32965:20;:54;;32938:81;;33035:6;;;;;;;;;;33034:7;:22;;;;;33045:11;;;;;;;;;;;33034:22;:45;;;;;33060:19;33034:45;:72;;;;;33093:13;33083:23;;:6;:23;;;;33034:72;33030:410;;;33210:38;33227:20;33210:16;:38::i;:::-;33265:26;33294:21;33265:50;;33354:1;33333:18;:22;33330:99;;;33376:37;33391:21;33376:14;:37::i;:::-;33330:99;33030:410;;33513:12;33528:4;33513:19;;33632:18;:26;33651:6;33632:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;33662:18;:29;33681:9;33662:29;;;;;;;;;;;;;;;;;;;;;;;;;33632:59;33629:105;;;33717:5;33707:15;;33629:105;33805:47;33820:6;33827:9;33837:6;33844:7;33805:14;:47::i;:::-;32019:1841;;;;;;:::o;4181:192::-;4267:7;4300:1;4295;:6;;4303:12;4287:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4327:9;4343:1;4339;:5;4327:17;;4364:1;4357:8;;;4181:192;;;;;:::o;40080:163::-;40121:7;40142:15;40159;40178:19;:17;:19::i;:::-;40141:56;;;;40215:20;40227:7;40215;:11;;:20;;;;:::i;:::-;40208:27;;;;40080:163;:::o;5559:132::-;5617:7;5644:39;5648:1;5651;5644:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5637:46;;5559:132;;;;:::o;3296:181::-;3354:7;3374:9;3390:1;3386;:5;3374:17;;3415:1;3410;:6;;3402:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3468:1;3461:8;;;3296:181;;;;:::o;38902:464::-;38961:7;38970;38979;38988;38997;39006;39027:23;39052:12;39066:14;39084:40;39096:7;39105;;39114:9;;39084:11;:40::i;:::-;39026:98;;;;;;39135:19;39158:10;:8;:10::i;:::-;39135:33;;39180:15;39197:23;39222:12;39238:39;39250:7;39259:4;39265:11;39238;:39::i;:::-;39179:98;;;;;;39296:7;39305:15;39322:4;39328:15;39345:4;39351:6;39288:70;;;;;;;;;;;;;;;;;;;38902:464;;;;;;;:::o;3751:136::-;3809:7;3836:43;3840:1;3843;3836:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3829:50;;3751:136;;;;:::o;33868:600::-;25934:4;25925:6;;:13;;;;;;;;;;;;;;;;;;34005:21:::1;34043:1;34029:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34005:40;;34074:4;34056;34061:1;34056:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;34100:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;34090:4;34095:1;34090:7;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::1;34135:62;34152:4;34167:15;34185:11;34135:8;:62::i;:::-;34236:15;:66;;;34317:11;34343:1;34387:4;34414;34434:15;34236:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25949:1;25970:5:::0;25961:6;;:14;;;;;;;;;;;;;;;;;;33868:600;:::o;4623:471::-;4681:7;4931:1;4926;:6;4922:47;;;4956:1;4949:8;;;;4922:47;4981:9;4997:1;4993;:5;4981:17;;5026:1;5021;5017;:5;;;;;;:10;5009:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5085:1;5078:8;;;4623:471;;;;;:::o;34476:168::-;34535:19;;;;;;;;;;;:28;;:43;34564:13;34575:1;34564:6;:10;;:13;;;;:::i;:::-;34535:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34589:23;;;;;;;;;;;:32;;:47;34622:13;34633:1;34622:6;:10;;:13;;;;:::i;:::-;34589:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34476:168;:::o;35229:819::-;35341:7;35337:40;;35363:14;:12;:14::i;:::-;35337:40;35394:11;:19;35406:6;35394:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;35418:11;:22;35430:9;35418:22;;;;;;;;;;;;;;;;;;;;;;;;;35417:23;35394:46;35390:597;;;35457:48;35479:6;35487:9;35498:6;35457:21;:48::i;:::-;35390:597;;;35528:11;:19;35540:6;35528:19;;;;;;;;;;;;;;;;;;;;;;;;;35527:20;:46;;;;;35551:11;:22;35563:9;35551:22;;;;;;;;;;;;;;;;;;;;;;;;;35527:46;35523:464;;;35590:46;35610:6;35618:9;35629:6;35590:19;:46::i;:::-;35523:464;;;35659:11;:19;35671:6;35659:19;;;;;;;;;;;;;;;;;;;;;;;;;35658:20;:47;;;;;35683:11;:22;35695:9;35683:22;;;;;;;;;;;;;;;;;;;;;;;;;35682:23;35658:47;35654:333;;;35722:44;35740:6;35748:9;35759:6;35722:17;:44::i;:::-;35654:333;;;35788:11;:19;35800:6;35788:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;35811:11;:22;35823:9;35811:22;;;;;;;;;;;;;;;;;;;;;;;;;35788:45;35784:203;;;35850:48;35872:6;35880:9;35891:6;35850:21;:48::i;:::-;35784:203;;;35931:44;35949:6;35957:9;35968:6;35931:17;:44::i;:::-;35784:203;35654:333;35523:464;35390:597;36003:7;35999:41;;36025:15;:13;:15::i;:::-;35999:41;35229:819;;;;:::o;40251:555::-;40301:7;40310;40330:15;40348:7;;40330:25;;40366:15;40384:7;;40366:25;;40407:9;40402:289;40426:9;:16;;;;40422:1;:20;40402:289;;;40492:7;40468;:21;40476:9;40486:1;40476:12;;;;;;;;;;;;;;;;;;;;;;;;;40468:21;;;;;;;;;;;;;;;;:31;:66;;;;40527:7;40503;:21;40511:9;40521:1;40511:12;;;;;;;;;;;;;;;;;;;;;;;;;40503:21;;;;;;;;;;;;;;;;:31;40468:66;40464:97;;;40544:7;;40553;;40536:25;;;;;;;;;40464:97;40586:34;40598:7;:21;40606:9;40616:1;40606:12;;;;;;;;;;;;;;;;;;;;;;;;;40598:21;;;;;;;;;;;;;;;;40586:7;:11;;:34;;;;:::i;:::-;40576:44;;40645:34;40657:7;:21;40665:9;40675:1;40665:12;;;;;;;;;;;;;;;;;;;;;;;;;40657:21;;;;;;;;;;;;;;;;40645:7;:11;;:34;;;;:::i;:::-;40635:44;;40444:3;;;;;;;40402:289;;;;40715:20;40727:7;;40715;;:11;;:20;;;;:::i;:::-;40705:7;:30;40701:61;;;40745:7;;40754;;40737:25;;;;;;;;40701:61;40781:7;40790;40773:25;;;;;;40251:555;;;:::o;6176:278::-;6262:7;6294:1;6290;:5;6297:12;6282:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6321:9;6337:1;6333;:5;;;;;;6321:17;;6445:1;6438:8;;;6176:278;;;;;:::o;39374:356::-;39468:7;39477;39486;39506:12;39521:28;39545:3;39521:19;39533:6;39521:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;39506:43;;39560:14;39577:30;39603:3;39577:21;39589:8;39577:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;39560:47;;39618:23;39644:29;39666:6;39644:17;39656:4;39644:7;:11;;:17;;;;:::i;:::-;:21;;:29;;;;:::i;:::-;39618:55;;39692:15;39709:4;39715:6;39684:38;;;;;;;;;39374:356;;;;;;;:::o;39738:334::-;39833:7;39842;39851;39871:15;39889:24;39901:11;39889:7;:11;;:24;;;;:::i;:::-;39871:42;;39924:12;39939:21;39948:11;39939:4;:8;;:21;;;;:::i;:::-;39924:36;;39971:23;39997:17;40009:4;39997:7;:11;;:17;;;;:::i;:::-;39971:43;;40033:7;40042:15;40059:4;40025:39;;;;;;;;;39738:334;;;;;;;:::o;31192:218::-;31249:1;31238:7;;:12;:30;;;;;31267:1;31254:9;;:14;31238:30;31235:42;;;31270:7;;31235:42;31307:7;;31289:15;:25;;;;31345:9;;31325:17;:29;;;;31377:1;31367:7;:11;;;;31401:1;31389:9;:13;;;;31192:218;:::o;37125:551::-;37228:15;37245:23;37270:12;37284:23;37309:12;37323:14;37341:19;37352:7;37341:10;:19::i;:::-;37227:133;;;;;;;;;;;;37389:28;37409:7;37389;:15;37397:6;37389:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37371:7;:15;37379:6;37371:15;;;;;;;;;;;;;;;:46;;;;37446:28;37466:7;37446;:15;37454:6;37446:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37428:7;:15;37436:6;37428:15;;;;;;;;;;;;;;;:46;;;;37506:39;37529:15;37506:7;:18;37514:9;37506:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37485:7;:18;37493:9;37485:18;;;;;;;;;;;;;;;:60;;;;37556:18;37567:6;37556:10;:18::i;:::-;37585:23;37597:4;37603;37585:11;:23::i;:::-;37641:9;37624:44;;37633:6;37624:44;;;37652:15;37624:44;;;;;;;;;;;;;;;;;;37125:551;;;;;;;;;:::o;36554:563::-;36655:15;36672:23;36697:12;36711:23;36736:12;36750:14;36768:19;36779:7;36768:10;:19::i;:::-;36654:133;;;;;;;;;;;;36816:28;36836:7;36816;:15;36824:6;36816:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36798:7;:15;36806:6;36798:15;;;;;;;;;;;;;;;:46;;;;36876:39;36899:15;36876:7;:18;36884:9;36876:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36855:7;:18;36863:9;36855:18;;;;;;;;;;;;;;;:60;;;;36947:39;36970:15;36947:7;:18;36955:9;36947:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36926:7;:18;36934:9;36926:18;;;;;;;;;;;;;;;:60;;;;36997:18;37008:6;36997:10;:18::i;:::-;37026:23;37038:4;37044;37026:11;:23::i;:::-;37082:9;37065:44;;37074:6;37065:44;;;37093:15;37065:44;;;;;;;;;;;;;;;;;;36554:563;;;;;;;;;:::o;36056:490::-;36155:15;36172:23;36197:12;36211:23;36236:12;36250:14;36268:19;36279:7;36268:10;:19::i;:::-;36154:133;;;;;;;;;;;;36316:28;36336:7;36316;:15;36324:6;36316:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36298:7;:15;36306:6;36298:15;;;;;;;;;;;;;;;:46;;;;36376:39;36399:15;36376:7;:18;36384:9;36376:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36355:7;:18;36363:9;36355:18;;;;;;;;;;;;;;;:60;;;;36426:18;36437:6;36426:10;:18::i;:::-;36455:23;36467:4;36473;36455:11;:23::i;:::-;36511:9;36494:44;;36503:6;36494:44;;;36522:15;36494:44;;;;;;;;;;;;;;;;;;36056:490;;;;;;;;;:::o;37684:622::-;37787:15;37804:23;37829:12;37843:23;37868:12;37882:14;37900:19;37911:7;37900:10;:19::i;:::-;37786:133;;;;;;;;;;;;37948:28;37968:7;37948;:15;37956:6;37948:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37930:7;:15;37938:6;37930:15;;;;;;;;;;;;;;;:46;;;;38005:28;38025:7;38005;:15;38013:6;38005:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37987:7;:15;37995:6;37987:15;;;;;;;;;;;;;;;:46;;;;38065:39;38088:15;38065:7;:18;38073:9;38065:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38044:7;:18;38052:9;38044:18;;;;;;;;;;;;;;;:60;;;;38136:39;38159:15;38136:7;:18;38144:9;38136:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;38115:7;:18;38123:9;38115:18;;;;;;;;;;;;;;;:60;;;;38186:18;38197:6;38186:10;:18::i;:::-;38215:23;38227:4;38233;38215:11;:23::i;:::-;38271:9;38254:44;;38263:6;38254:44;;;38282:15;38254:44;;;;;;;;;;;;;;;;;;37684:622;;;;;;;;;:::o;31418:117::-;31472:15;;31462:7;:25;;;;31510:17;;31498:9;:29;;;;31418:117::o;38314:331::-;38369:19;38392:10;:8;:10::i;:::-;38369:33;;38413:14;38430:23;38441:11;38430:6;:10;;:23;;;;:::i;:::-;38413:40;;38489:34;38516:6;38489:7;:22;38505:4;38489:22;;;;;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;38464:7;:22;38480:4;38464:22;;;;;;;;;;;;;;;:59;;;;38537:11;:26;38557:4;38537:26;;;;;;;;;;;;;;;;;;;;;;;;;38534:103;;;38603:34;38630:6;38603:7;:22;38619:4;38603:22;;;;;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;38578:7;:22;38594:4;38578:22;;;;;;;;;;;;;;;:59;;;;38534:103;38314:331;;;:::o;38653:147::-;38731:17;38743:4;38731:7;;:11;;:17;;;;:::i;:::-;38721:7;:27;;;;38772:20;38787:4;38772:10;;:14;;:20;;;;:::i;:::-;38759:10;:33;;;;38653:147;;:::o

Swarm Source

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