ETH Price: $2,969.50 (-4.05%)
Gas: 2 Gwei

Token

Chibi Inu (CINU)
 

Overview

Max Total Supply

100,000,000,000,000 CINU

Holders

547

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
myfuckingwallet.eth
Balance
36,315,718,396.184451995 CINU

Value
$0.00
0x0efb322a9b425a6b319059c1cceb1da03c328720
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:
CINU

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-01
*/

/**
    https://t.me/cinuETH
    https://www.chibinu.io
**/

//SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity ^0.6.12;

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

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    event 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 CINU is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;

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

    mapping (address => bool) private _isExludedFromTx;

    mapping (address => bool) private presaleAddresses;

    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 100_000_000_000_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'Chibi Inu';
    string private _symbol = 'CINU';
    uint8 private _decimals = 9;

    uint256 private _taxFee = 2; // 4% reflection fee for every holder
    uint256 private _marketingFee = 0; // 0% marketing
    uint256 private _liquidityFee = 3; // 3% into liquidity

    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    address payable private _marketingWalletAddress = payable(0x3cc9706125b0A2ecc4622bEc12c459E856dc968c);

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify = false;
    bool public swapAndLiquifyEnabled = true;

    // Max fee is 0.1% of the total supply.
    uint256 private _maxTxAmount = _tTotal / 1000;
    // We will set a minimum amount of tokens to be swapped
    uint256 private _numTokensSellToAddToLiquidity = 1000000000 * 10**9;

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

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

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

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

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

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

        // BLACKLIST
        _isBlackListedBot[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _blackListedBots.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isBlackListedBot[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true;
        _blackListedBots.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345));

        _isBlackListedBot[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true;
        _blackListedBots.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b));

        _isBlackListedBot[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true;
        _blackListedBots.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95));

        _isBlackListedBot[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true;
        _blackListedBots.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964));

        _isBlackListedBot[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true;
        _blackListedBots.push(address(0xDC81a3450817A58D00f45C86d0368290088db848));

        _isBlackListedBot[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true;
        _blackListedBots.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881));

        _isBlackListedBot[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true;
        _blackListedBots.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679));

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

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

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

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

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

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

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

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

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

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

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

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

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

    function setExcludeFromFee(address account, bool excluded) public 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 excludeFromReward(address account) public onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

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

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(account != address(this));
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }

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

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

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
    }

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

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

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

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

        if(!_isExludedFromTx[sender] && !_isExludedFromTx[recipient]) {
            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 + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

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

        bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity;
        if (!inSwapAndLiquify 
            && swapAndLiquifyEnabled 
            && overMinTokenBalance 
            && sender != uniswapV2Pair
            && !presaleAddresses[sender]
            && !presaleAddresses[recipient]
        ) {
            contractTokenBalance = _numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //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 charity fee
        _tokenTransfer(sender, recipient, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 toLiquify = contractTokenBalance.sub(toMarketing);

        // split the contract balance into halves
        uint256 half = toLiquify.div(2);
        uint256 otherHalf = toLiquify.sub(half);

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

        // swap tokens for ETH
        uint256 toSwapForEth = half.add(toMarketing);
        swapTokensForEth(toSwapForEth); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

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

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

        emit SwapAndLiquify(half, newBalance, otherHalf);

        sendETHToMarketing(fromSwap.sub(newBalance));
    }

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

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

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

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

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

    function sendETHToMarketing(uint256 amount) private {
        _marketingWalletAddress.transfer(amount);
    }

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

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

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

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

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

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _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 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _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 tMarketingLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _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 tMarketingLiquidity) = _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);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity);
    }

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

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee));
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee);
    }

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

    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 <= 49, 'taxFee should be in 1 - 49');
        _taxFee = taxFee;
    }

    function _setMarketingFee(uint256 marketingFee) external onlyOwner() {
        require(marketingFee >= 1 && marketingFee <= 49, 'marketingFee should be in 1 - 11');
        _marketingFee = marketingFee;
    }

    function _setLiquidityFee(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee >= 1 && liquidityFee <= 49, 'liquidityFee should be in 1 - 11');
        _liquidityFee = liquidityFee;
    }

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

    // Adjusted to allow for smaller than 1%'s, as low as 0.1%
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**3 // Division by 1000, set to 20 for 2%, set to 2 for 0.2%
        );
    }

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

    function excludePresaleAddresses(address router, address presale) public onlyOwner {
        _isExludedFromTx[router] = true;
        _isExludedFromTx[presale] = true;
        presaleAddresses[router] = true;
        presaleAddresses[presale] = true;
        excludeFromReward(router);
        excludeFromReward(presale);
        setExcludeFromFee(router, true);
        setExcludeFromFee(presale, true);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"_setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"_setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapAndLiquifyEnabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"},{"stateMutability":"payable","type":"receive"}]

60c060405269152d02c7e14af6800000600d55600d54600019816200002057fe5b0660001903600e556040518060400160405280600981526020017f436869626920496e750000000000000000000000000000000000000000000000815250601090805190602001906200007592919062000e75565b506040518060400160405280600481526020017f43494e550000000000000000000000000000000000000000000000000000000081525060119080519060200190620000c392919062000e75565b506009601260006101000a81548160ff021916908360ff160217905550600260135560006014556003601555601354601655601454601755601554601855733cc9706125b0a2ecc4622bec12c459e856dc968c601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601960146101000a81548160ff0219169083151502179055506001601960156101000a81548160ff0219169083151502179055506103e8600d54816200019a57fe5b04601a55670de0b6b3a7640000601b55348015620001b757600080fd5b506000620001ca62000e4460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600e54600360006200027f62000e4460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031d57600080fd5b505afa15801562000332573d6000803e3d6000fd5b505050506040513d60208110156200034957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003bd57600080fd5b505afa158015620003d2573d6000803e3d6000fd5b505050506040513d6020811015620003e957600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200046457600080fd5b505af115801562000479573d6000803e3d6000fd5b505050506040513d60208110156200049057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600660006200052462000e4c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60006200065d62000e4c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600073e031b36b53e53a292a20c5f08fd1658cddf74fce73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73e031b36b53e53a292a20c5f08fd1658cddf74fce9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073e516bdee55b0b4e9bacaf6285130de15589b134573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73e516bdee55b0b4e9bacaf6285130de15589b13459080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073a1cec245c456dd1bd9f2815a6955fef44eb4191b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73a1cec245c456dd1bd9f2815a6955fef44eb4191b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf9573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf959080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073fe76f05dc59fec04184fa0245ad0c3cf9a57b96473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73fe76f05dc59fec04184fa0245ad0c3cf9a57b9649080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073dc81a3450817a58d00f45c86d0368290088db84873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73dc81a3450817a58d00f45c86d0368290088db8489080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960007345fd07c63e5c316540f14b2002b085aee78e388173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a7345fd07c63e5c316540f14b2002b085aee78e38819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960007327f9adb26d532a41d97e00206114e429ad58c67973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a7327f9adb26d532a41d97e00206114e429ad58c6799080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000dd662000e4460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040518082815260200191505060405180910390a35062000f1b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000eb857805160ff191683800117855562000ee9565b8280016001018555821562000ee9579182015b8281111562000ee857825182559160200191906001019062000ecb565b5b50905062000ef8919062000efc565b5090565b5b8082111562000f1757600081600090555060010162000efd565b5090565b60805160601c60a05160601c615db462000f6360003980611eb55280613d17525080611158528061420352806142ef52806143165280614e085280614e2f5250615db46000f3fe6080604052600436106102345760003560e01c806352390c021161012e578063a52fe9bb116100ab578063d543dbeb1161006f578063d543dbeb14610ce5578063dd62ed3e14610d20578063f2fde38b14610da5578063f429389014610df6578063f815a84214610e0d5761023b565b8063a52fe9bb14610b64578063a9059cbb14610b9f578063af9549e014610c10578063bcd6d44614610c6d578063c49b9a8014610ca85761023b565b80637ded4d6a116100f25780637ded4d6a1461096a57806388f82020146109bb5780638da5cb5b14610a2257806395d89b4114610a63578063a457c2d714610af35761023b565b806352390c02146107fb5780635342acb41461084c5780635880b873146108b357806370a08231146108ee578063715018a6146109535761023b565b806330599fc5116101bc5780634303443d116101805780634303443d146106ca5780634549b0391461071b57806349bd5a5e146107765780634a74bb02146107b757806351bc3c85146107e45761023b565b806330599fc514610564578063313ce5671461059f5780633685d419146105cd578063395093511461061e5780633bd5d1731461068f5761023b565b80631694505e116102035780631694505e146103dd57806318160ddd1461041e5780631decaadc1461044957806323b872dd146104845780632d838119146105155761023b565b806306fdde0314610240578063095ea7b3146102d057806313114a9d1461034157806313b4a7f41461036c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610e38565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029557808201518184015260208101905061027a565b50505050905090810190601f1680156102c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102dc57600080fd5b50610329600480360360408110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eda565b60405180821515815260200191505060405180910390f35b34801561034d57600080fd5b50610356610ef8565b6040518082815260200191505060405180910390f35b34801561037857600080fd5b506103db6004803603604081101561038f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f02565b005b3480156103e957600080fd5b506103f2611156565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042a57600080fd5b5061043361117a565b6040518082815260200191505060405180910390f35b34801561045557600080fd5b506104826004803603602081101561046c57600080fd5b8101908080359060200190929190505050611184565b005b34801561049057600080fd5b506104fd600480360360608110156104a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112b3565b60405180821515815260200191505060405180910390f35b34801561052157600080fd5b5061054e6004803603602081101561053857600080fd5b810190808035906020019092919050505061138c565b6040518082815260200191505060405180910390f35b34801561057057600080fd5b5061059d6004803603602081101561058757600080fd5b8101908080359060200190929190505050611410565b005b3480156105ab57600080fd5b506105b46114ff565b604051808260ff16815260200191505060405180910390f35b3480156105d957600080fd5b5061061c600480360360208110156105f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611516565b005b34801561062a57600080fd5b506106776004803603604081101561064157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118a0565b60405180821515815260200191505060405180910390f35b34801561069b57600080fd5b506106c8600480360360208110156106b257600080fd5b8101908080359060200190929190505050611953565b005b3480156106d657600080fd5b50610719600480360360208110156106ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae4565b005b34801561072757600080fd5b506107606004803603604081101561073e57600080fd5b8101908080359060200190929190803515159060200190929190505050611dfc565b6040518082815260200191505060405180910390f35b34801561078257600080fd5b5061078b611eb3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107c357600080fd5b506107cc611ed7565b60405180821515815260200191505060405180910390f35b3480156107f057600080fd5b506107f9611eea565b005b34801561080757600080fd5b5061084a6004803603602081101561081e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fcb565b005b34801561085857600080fd5b5061089b6004803603602081101561086f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061237e565b60405180821515815260200191505060405180910390f35b3480156108bf57600080fd5b506108ec600480360360208110156108d657600080fd5b81019080803590602001909291905050506123d4565b005b3480156108fa57600080fd5b5061093d6004803603602081101561091157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061252a565b6040518082815260200191505060405180910390f35b34801561095f57600080fd5b50610968612615565b005b34801561097657600080fd5b506109b96004803603602081101561098d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061279b565b005b3480156109c757600080fd5b50610a0a600480360360208110156109de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ae0565b60405180821515815260200191505060405180910390f35b348015610a2e57600080fd5b50610a37612b36565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a6f57600080fd5b50610a78612b5f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ab8578082015181840152602081019050610a9d565b50505050905090810190601f168015610ae55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610aff57600080fd5b50610b4c60048036036040811015610b1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c01565b60405180821515815260200191505060405180910390f35b348015610b7057600080fd5b50610b9d60048036036020811015610b8757600080fd5b8101908080359060200190929190505050612cce565b005b348015610bab57600080fd5b50610bf860048036036040811015610bc257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e24565b60405180821515815260200191505060405180910390f35b348015610c1c57600080fd5b50610c6b60048036036040811015610c3357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612e42565b005b348015610c7957600080fd5b50610ca660048036036020811015610c9057600080fd5b8101908080359060200190929190505050612f65565b005b348015610cb457600080fd5b50610ce360048036036020811015610ccb57600080fd5b810190808035151590602001909291905050506130bb565b005b348015610cf157600080fd5b50610d1e60048036036020811015610d0857600080fd5b81019080803590602001909291905050506131a0565b005b348015610d2c57600080fd5b50610d8f60048036036040811015610d4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061329a565b6040518082815260200191505060405180910390f35b348015610db157600080fd5b50610df460048036036020811015610dc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613321565b005b348015610e0257600080fd5b50610e0b61352c565b005b348015610e1957600080fd5b50610e22613605565b6040518082815260200191505060405180910390f35b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ed05780601f10610ea557610100808354040283529160200191610ed0565b820191906000526020600020905b815481529060010190602001808311610eb357829003601f168201915b5050505050905090565b6000610eee610ee761360d565b8484613615565b6001905092915050565b6000600f54905090565b610f0a61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061113382611fcb565b61113c81611fcb565b611147826001612e42565b611152816001612e42565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600d54905090565b61118c61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008110156112a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180615cce603e913960400191505060405180910390fd5b80601b8190555050565b60006112c084848461380c565b611381846112cc61360d565b61137c85604051806060016040528060288152602001615c1060289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061133261360d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eeb9092919063ffffffff16565b613615565b600190509392505050565b6000600e548211156113e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615b55602a913960400191505060405180910390fd5b60006113f3613fab565b90506114088184613fd690919063ffffffff16565b915050919050565b61141861360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6114ea306114e4612b36565b83613615565b6114fc306114f6612b36565b8361380c565b50565b6000601260009054906101000a900460ff16905090565b61151e61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60088054905081101561189c578173ffffffffffffffffffffffffffffffffffffffff16600882815481106116d157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561188f5760086001600880549050038154811061172d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061176557fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061185557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561189c565b80806001019150506116a0565b5050565b60006119496118ad61360d565b8461194485600560006118be61360d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b613615565b6001905092915050565b600061195d61360d565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615d2e602c913960400191505060405180910390fd5b6000611a0d836140a8565b50505050509050611a6681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611abe81600e5461412390919063ffffffff16565b600e81905550611ad983600f5461402090919063ffffffff16565b600f81905550505050565b611aec61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615c616024913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c7e57600080fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d54831115611e76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611e96576000611e86846140a8565b5050505050905080915050611ead565b6000611ea1846140a8565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601960159054906101000a900460ff1681565b611ef261360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611fbd3061252a565b9050611fc88161416d565b50565b611fd361360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612093576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561212c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615d0c6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156122c05761227c600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138c565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6123dc61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461249c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156124ae575060318111155b612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060138190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125c557600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612610565b61260d600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138c565b90505b919050565b61261d61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6127a361360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a80549050811015612adc578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061295657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612acf57600a6001600a8054905003815481106129b257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106129ea57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480612a9557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612adc565b8080600101915050612925565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612bf75780601f10612bcc57610100808354040283529160200191612bf7565b820191906000526020600020905b815481529060010190602001808311612bda57829003601f168201915b5050505050905090565b6000612cc4612c0e61360d565b84612cbf85604051806060016040528060258152602001615d5a6025913960056000612c3861360d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eeb9092919063ffffffff16565b613615565b6001905092915050565b612cd661360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612da8575060318111155b612e1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060148190555050565b6000612e38612e3161360d565b848461380c565b6001905092915050565b612e4a61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612f6d61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461302d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561303f575060318111155b6130b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060158190555050565b6130c361360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960156101000a81548160ff02191690831515021790555050565b6131a861360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613268576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6132916103e861328383600d5461441b90919063ffffffff16565b613fd690919063ffffffff16565b601a8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61332961360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561346f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615b7f6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61353461360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050613602816144a1565b50565b600047905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561369b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615caa6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615ba56022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c856025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613918576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615b326023913960400191505060405180910390fd5b60008111613971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615c386029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613af1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613bb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613c555750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cb657601a54811115613cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615bc76028913960400191505060405180910390fd5b5b6000613cc13061252a565b9050601a548110613cd257601a5490505b6000601b548210159050601960149054906101000a900460ff16158015613d055750601960159054906101000a900460ff165b8015613d0e5750805b8015613d6657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613dbc5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613e125750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613e2657601b549150613e258261450d565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ecd5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ed757600090505b613ee3868686846146a6565b505050505050565b6000838311158290613f98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f5d578082015181840152602081019050613f42565b50505050905090810190601f168015613f8a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613fb86149b7565b91509150613fcf8183613fd690919063ffffffff16565b9250505090565b600061401883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c48565b905092915050565b60008082840190508381101561409e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006140d98a6013546140d460155460145461402090919063ffffffff16565b614d0e565b92509250925060006140e9613fab565b905060008060006140fb8e8786614da4565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061416583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613eeb565b905092915050565b6060600267ffffffffffffffff8111801561418757600080fd5b506040519080825280602002602001820160405280156141b65781602001602082028036833780820191505090505b50905030816000815181106141c757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561426757600080fd5b505afa15801561427b573d6000803e3d6000fd5b505050506040513d602081101561429157600080fd5b8101908080519060200190929190505050816001815181106142af57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614314307f000000000000000000000000000000000000000000000000000000000000000084613615565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156143d65780820151818401526020810190506143bb565b505050509050019650505050505050600060405180830381600087803b1580156143ff57600080fd5b505af1158015614413573d6000803e3d6000fd5b505050505050565b60008083141561442e576000905061449b565b600082840290508284828161443f57fe5b0414614496576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615bef6021913960400191505060405180910390fd5b809150505b92915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614509573d6000803e3d6000fd5b5050565b6001601960146101000a81548160ff021916908315150217905550600061456761454460155460145461402090919063ffffffff16565b6145596014548561441b90919063ffffffff16565b613fd690919063ffffffff16565b9050600061457e828461412390919063ffffffff16565b90506000614596600283613fd690919063ffffffff16565b905060006145ad828461412390919063ffffffff16565b9050600047905060006145c9868561402090919063ffffffff16565b90506145d48161416d565b60006145e9834761412390919063ffffffff16565b9050600061461283614604888561441b90919063ffffffff16565b613fd690919063ffffffff16565b905061461e8582614e02565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a161468061467b828461412390919063ffffffff16565b6144a1565b50505050505050506000601960146101000a81548160ff02191690831515021790555050565b806146b4576146b3614f53565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156147575750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561476c57614767848484614fb5565b6149a3565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561480f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156148245761481f848484615215565b6149a2565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156148c85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156148dd576148d8848484615475565b6149a1565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561497f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156149945761498f848484615640565b6149a0565b61499f848484615475565b5b5b5b5b806149b1576149b0615935565b5b50505050565b6000806000600e5490506000600d54905060005b600880549050811015614c0b578260036000600884815481106149ea57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180614ad15750816004600060088481548110614a6957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614ae857600e54600d5494509450505050614c44565b614b716003600060088481548110614afc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461412390919063ffffffff16565b9250614bfc6004600060088481548110614b8757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361412390919063ffffffff16565b915080806001019150506149cb565b50614c23600d54600e54613fd690919063ffffffff16565b821015614c3b57600e54600d54935093505050614c44565b81819350935050505b9091565b60008083118290614cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cb9578082015181840152602081019050614c9e565b50505050905090810190601f168015614ce65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d0057fe5b049050809150509392505050565b600080600080614d3a6064614d2c888a61441b90919063ffffffff16565b613fd690919063ffffffff16565b90506000614d646064614d56888b61441b90919063ffffffff16565b613fd690919063ffffffff16565b90506000614d8d87614d7f858c61412390919063ffffffff16565b61412390919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614dbd858861441b90919063ffffffff16565b90506000614dd4868861441b90919063ffffffff16565b90506000614deb828461412390919063ffffffff16565b905082818395509550955050505093509350939050565b614e2d307f000000000000000000000000000000000000000000000000000000000000000084613615565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614e77612b36565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614efc57600080fd5b505af1158015614f10573d6000803e3d6000fd5b50505050506040513d6060811015614f2757600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000601354148015614f6757506000601454145b8015614f7557506000601554145b15614f7f57614fb3565b6013546016819055506014546017819055506015546018819055506000601381905550600060148190555060006015819055505b565b600080600080600080614fc7876140a8565b95509550955095509550955061502587600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150ba86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061514f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061519b81615952565b6151a58483615af7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080615227876140a8565b95509550955095509550955061528586600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061531a83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506153af85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506153fb81615952565b6154058483615af7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080615487876140a8565b9550955095509550955095506154e586600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061557a85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506155c681615952565b6155d08483615af7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080615652876140a8565b9550955095509550955095506156b087600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061574586600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506157da83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061586f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506158bb81615952565b6158c58483615af7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601654601381905550601754601481905550601854601581905550565b600061595c613fab565b90506000615973828461441b90919063ffffffff16565b90506159c781600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615af257615aae83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b615b0c82600e5461412390919063ffffffff16565b600e81905550615b2781600f5461402090919063ffffffff16565b600f81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220328285393b138e92c2fc98c5df1473da21ab64e2ad7785e40f0c9a260adbb2cb64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806352390c021161012e578063a52fe9bb116100ab578063d543dbeb1161006f578063d543dbeb14610ce5578063dd62ed3e14610d20578063f2fde38b14610da5578063f429389014610df6578063f815a84214610e0d5761023b565b8063a52fe9bb14610b64578063a9059cbb14610b9f578063af9549e014610c10578063bcd6d44614610c6d578063c49b9a8014610ca85761023b565b80637ded4d6a116100f25780637ded4d6a1461096a57806388f82020146109bb5780638da5cb5b14610a2257806395d89b4114610a63578063a457c2d714610af35761023b565b806352390c02146107fb5780635342acb41461084c5780635880b873146108b357806370a08231146108ee578063715018a6146109535761023b565b806330599fc5116101bc5780634303443d116101805780634303443d146106ca5780634549b0391461071b57806349bd5a5e146107765780634a74bb02146107b757806351bc3c85146107e45761023b565b806330599fc514610564578063313ce5671461059f5780633685d419146105cd578063395093511461061e5780633bd5d1731461068f5761023b565b80631694505e116102035780631694505e146103dd57806318160ddd1461041e5780631decaadc1461044957806323b872dd146104845780632d838119146105155761023b565b806306fdde0314610240578063095ea7b3146102d057806313114a9d1461034157806313b4a7f41461036c5761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610e38565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029557808201518184015260208101905061027a565b50505050905090810190601f1680156102c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102dc57600080fd5b50610329600480360360408110156102f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eda565b60405180821515815260200191505060405180910390f35b34801561034d57600080fd5b50610356610ef8565b6040518082815260200191505060405180910390f35b34801561037857600080fd5b506103db6004803603604081101561038f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f02565b005b3480156103e957600080fd5b506103f2611156565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042a57600080fd5b5061043361117a565b6040518082815260200191505060405180910390f35b34801561045557600080fd5b506104826004803603602081101561046c57600080fd5b8101908080359060200190929190505050611184565b005b34801561049057600080fd5b506104fd600480360360608110156104a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112b3565b60405180821515815260200191505060405180910390f35b34801561052157600080fd5b5061054e6004803603602081101561053857600080fd5b810190808035906020019092919050505061138c565b6040518082815260200191505060405180910390f35b34801561057057600080fd5b5061059d6004803603602081101561058757600080fd5b8101908080359060200190929190505050611410565b005b3480156105ab57600080fd5b506105b46114ff565b604051808260ff16815260200191505060405180910390f35b3480156105d957600080fd5b5061061c600480360360208110156105f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611516565b005b34801561062a57600080fd5b506106776004803603604081101561064157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118a0565b60405180821515815260200191505060405180910390f35b34801561069b57600080fd5b506106c8600480360360208110156106b257600080fd5b8101908080359060200190929190505050611953565b005b3480156106d657600080fd5b50610719600480360360208110156106ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae4565b005b34801561072757600080fd5b506107606004803603604081101561073e57600080fd5b8101908080359060200190929190803515159060200190929190505050611dfc565b6040518082815260200191505060405180910390f35b34801561078257600080fd5b5061078b611eb3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107c357600080fd5b506107cc611ed7565b60405180821515815260200191505060405180910390f35b3480156107f057600080fd5b506107f9611eea565b005b34801561080757600080fd5b5061084a6004803603602081101561081e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fcb565b005b34801561085857600080fd5b5061089b6004803603602081101561086f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061237e565b60405180821515815260200191505060405180910390f35b3480156108bf57600080fd5b506108ec600480360360208110156108d657600080fd5b81019080803590602001909291905050506123d4565b005b3480156108fa57600080fd5b5061093d6004803603602081101561091157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061252a565b6040518082815260200191505060405180910390f35b34801561095f57600080fd5b50610968612615565b005b34801561097657600080fd5b506109b96004803603602081101561098d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061279b565b005b3480156109c757600080fd5b50610a0a600480360360208110156109de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ae0565b60405180821515815260200191505060405180910390f35b348015610a2e57600080fd5b50610a37612b36565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a6f57600080fd5b50610a78612b5f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ab8578082015181840152602081019050610a9d565b50505050905090810190601f168015610ae55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610aff57600080fd5b50610b4c60048036036040811015610b1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c01565b60405180821515815260200191505060405180910390f35b348015610b7057600080fd5b50610b9d60048036036020811015610b8757600080fd5b8101908080359060200190929190505050612cce565b005b348015610bab57600080fd5b50610bf860048036036040811015610bc257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e24565b60405180821515815260200191505060405180910390f35b348015610c1c57600080fd5b50610c6b60048036036040811015610c3357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612e42565b005b348015610c7957600080fd5b50610ca660048036036020811015610c9057600080fd5b8101908080359060200190929190505050612f65565b005b348015610cb457600080fd5b50610ce360048036036020811015610ccb57600080fd5b810190808035151590602001909291905050506130bb565b005b348015610cf157600080fd5b50610d1e60048036036020811015610d0857600080fd5b81019080803590602001909291905050506131a0565b005b348015610d2c57600080fd5b50610d8f60048036036040811015610d4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061329a565b6040518082815260200191505060405180910390f35b348015610db157600080fd5b50610df460048036036020811015610dc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613321565b005b348015610e0257600080fd5b50610e0b61352c565b005b348015610e1957600080fd5b50610e22613605565b6040518082815260200191505060405180910390f35b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ed05780601f10610ea557610100808354040283529160200191610ed0565b820191906000526020600020905b815481529060010190602001808311610eb357829003601f168201915b5050505050905090565b6000610eee610ee761360d565b8484613615565b6001905092915050565b6000600f54905090565b610f0a61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061113382611fcb565b61113c81611fcb565b611147826001612e42565b611152816001612e42565b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600d54905090565b61118c61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca008110156112a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180615cce603e913960400191505060405180910390fd5b80601b8190555050565b60006112c084848461380c565b611381846112cc61360d565b61137c85604051806060016040528060288152602001615c1060289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061133261360d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eeb9092919063ffffffff16565b613615565b600190509392505050565b6000600e548211156113e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615b55602a913960400191505060405180910390fd5b60006113f3613fab565b90506114088184613fd690919063ffffffff16565b915050919050565b61141861360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6114ea306114e4612b36565b83613615565b6114fc306114f6612b36565b8361380c565b50565b6000601260009054906101000a900460ff16905090565b61151e61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60088054905081101561189c578173ffffffffffffffffffffffffffffffffffffffff16600882815481106116d157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561188f5760086001600880549050038154811061172d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061176557fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061185557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561189c565b80806001019150506116a0565b5050565b60006119496118ad61360d565b8461194485600560006118be61360d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b613615565b6001905092915050565b600061195d61360d565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615d2e602c913960400191505060405180910390fd5b6000611a0d836140a8565b50505050509050611a6681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611abe81600e5461412390919063ffffffff16565b600e81905550611ad983600f5461402090919063ffffffff16565b600f81905550505050565b611aec61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615c616024913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c7e57600080fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d54831115611e76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611e96576000611e86846140a8565b5050505050905080915050611ead565b6000611ea1846140a8565b50505050915050809150505b92915050565b7f000000000000000000000000ab69f0c1453bc326a4791c8b67734549c1581f8181565b601960159054906101000a900460ff1681565b611ef261360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611fbd3061252a565b9050611fc88161416d565b50565b611fd361360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612093576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561212c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615d0c6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156122c05761227c600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138c565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6123dc61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461249c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156124ae575060318111155b612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060138190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125c557600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612610565b61260d600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138c565b90505b919050565b61261d61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6127a361360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a80549050811015612adc578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061295657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612acf57600a6001600a8054905003815481106129b257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106129ea57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480612a9557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612adc565b8080600101915050612925565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612bf75780601f10612bcc57610100808354040283529160200191612bf7565b820191906000526020600020905b815481529060010190602001808311612bda57829003601f168201915b5050505050905090565b6000612cc4612c0e61360d565b84612cbf85604051806060016040528060258152602001615d5a6025913960056000612c3861360d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eeb9092919063ffffffff16565b613615565b6001905092915050565b612cd661360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612da8575060318111155b612e1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060148190555050565b6000612e38612e3161360d565b848461380c565b6001905092915050565b612e4a61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612f6d61360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461302d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561303f575060318111155b6130b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060158190555050565b6130c361360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960156101000a81548160ff02191690831515021790555050565b6131a861360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613268576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6132916103e861328383600d5461441b90919063ffffffff16565b613fd690919063ffffffff16565b601a8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61332961360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561346f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615b7f6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61353461360d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000479050613602816144a1565b50565b600047905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561369b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180615caa6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613721576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615ba56022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c856025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613918576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615b326023913960400191505060405180910390fd5b60008111613971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180615c386029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613af1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613bb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613c555750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cb657601a54811115613cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615bc76028913960400191505060405180910390fd5b5b6000613cc13061252a565b9050601a548110613cd257601a5490505b6000601b548210159050601960149054906101000a900460ff16158015613d055750601960159054906101000a900460ff165b8015613d0e5750805b8015613d6657507f000000000000000000000000ab69f0c1453bc326a4791c8b67734549c1581f8173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015613dbc5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613e125750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613e2657601b549150613e258261450d565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ecd5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ed757600090505b613ee3868686846146a6565b505050505050565b6000838311158290613f98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f5d578082015181840152602081019050613f42565b50505050905090810190601f168015613f8a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613fb86149b7565b91509150613fcf8183613fd690919063ffffffff16565b9250505090565b600061401883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c48565b905092915050565b60008082840190508381101561409e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006140d98a6013546140d460155460145461402090919063ffffffff16565b614d0e565b92509250925060006140e9613fab565b905060008060006140fb8e8786614da4565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061416583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613eeb565b905092915050565b6060600267ffffffffffffffff8111801561418757600080fd5b506040519080825280602002602001820160405280156141b65781602001602082028036833780820191505090505b50905030816000815181106141c757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561426757600080fd5b505afa15801561427b573d6000803e3d6000fd5b505050506040513d602081101561429157600080fd5b8101908080519060200190929190505050816001815181106142af57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614314307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84613615565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156143d65780820151818401526020810190506143bb565b505050509050019650505050505050600060405180830381600087803b1580156143ff57600080fd5b505af1158015614413573d6000803e3d6000fd5b505050505050565b60008083141561442e576000905061449b565b600082840290508284828161443f57fe5b0414614496576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615bef6021913960400191505060405180910390fd5b809150505b92915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614509573d6000803e3d6000fd5b5050565b6001601960146101000a81548160ff021916908315150217905550600061456761454460155460145461402090919063ffffffff16565b6145596014548561441b90919063ffffffff16565b613fd690919063ffffffff16565b9050600061457e828461412390919063ffffffff16565b90506000614596600283613fd690919063ffffffff16565b905060006145ad828461412390919063ffffffff16565b9050600047905060006145c9868561402090919063ffffffff16565b90506145d48161416d565b60006145e9834761412390919063ffffffff16565b9050600061461283614604888561441b90919063ffffffff16565b613fd690919063ffffffff16565b905061461e8582614e02565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a161468061467b828461412390919063ffffffff16565b6144a1565b50505050505050506000601960146101000a81548160ff02191690831515021790555050565b806146b4576146b3614f53565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156147575750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561476c57614767848484614fb5565b6149a3565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561480f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156148245761481f848484615215565b6149a2565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156148c85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156148dd576148d8848484615475565b6149a1565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561497f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156149945761498f848484615640565b6149a0565b61499f848484615475565b5b5b5b5b806149b1576149b0615935565b5b50505050565b6000806000600e5490506000600d54905060005b600880549050811015614c0b578260036000600884815481106149ea57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180614ad15750816004600060088481548110614a6957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614ae857600e54600d5494509450505050614c44565b614b716003600060088481548110614afc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461412390919063ffffffff16565b9250614bfc6004600060088481548110614b8757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361412390919063ffffffff16565b915080806001019150506149cb565b50614c23600d54600e54613fd690919063ffffffff16565b821015614c3b57600e54600d54935093505050614c44565b81819350935050505b9091565b60008083118290614cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614cb9578082015181840152602081019050614c9e565b50505050905090810190601f168015614ce65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581614d0057fe5b049050809150509392505050565b600080600080614d3a6064614d2c888a61441b90919063ffffffff16565b613fd690919063ffffffff16565b90506000614d646064614d56888b61441b90919063ffffffff16565b613fd690919063ffffffff16565b90506000614d8d87614d7f858c61412390919063ffffffff16565b61412390919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080614dbd858861441b90919063ffffffff16565b90506000614dd4868861441b90919063ffffffff16565b90506000614deb828461412390919063ffffffff16565b905082818395509550955050505093509350939050565b614e2d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84613615565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614e77612b36565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015614efc57600080fd5b505af1158015614f10573d6000803e3d6000fd5b50505050506040513d6060811015614f2757600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000601354148015614f6757506000601454145b8015614f7557506000601554145b15614f7f57614fb3565b6013546016819055506014546017819055506015546018819055506000601381905550600060148190555060006015819055505b565b600080600080600080614fc7876140a8565b95509550955095509550955061502587600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150ba86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061514f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061519b81615952565b6151a58483615af7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080615227876140a8565b95509550955095509550955061528586600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061531a83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506153af85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506153fb81615952565b6154058483615af7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080615487876140a8565b9550955095509550955095506154e586600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061557a85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506155c681615952565b6155d08483615af7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080615652876140a8565b9550955095509550955095506156b087600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061574586600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412390919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506157da83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061586f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506158bb81615952565b6158c58483615af7565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601654601381905550601754601481905550601854601581905550565b600061595c613fab565b90506000615973828461441b90919063ffffffff16565b90506159c781600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615615af257615aae83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461402090919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b615b0c82600e5461412390919063ffffffff16565b600e81905550615b2781600f5461402090919063ffffffff16565b600f81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220328285393b138e92c2fc98c5df1473da21ab64e2ad7785e40f0c9a260adbb2cb64736f6c634300060c0033

Deployed Bytecode Sourcemap

23495:24155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28018:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28930:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30194:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47228:419;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24969:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28295:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46420:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29099:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31118:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47028:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28204:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31831:477;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29420:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30289:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32316:396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30674:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25027:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25110:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39059:156;;;;;;;;;;;;;:::i;:::-;;31379:444;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33749:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45805:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28398:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14987:148;;;;;;;;;;;;;:::i;:::-;;32720:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29923:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14353:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28109:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29646:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;45982:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28604:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30051:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46201:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39390:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46801:219;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28779:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15287:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39223:159;;;;;;;;;;;;;:::i;:::-;;45687:110;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28018:83;28055:13;28088:5;28081:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28018:83;:::o;28930:161::-;29005:4;29022:39;29031:12;:10;:12::i;:::-;29045:7;29054:6;29022:8;:39::i;:::-;29079:4;29072:11;;28930:161;;;;:::o;30194:87::-;30236:7;30263:10;;30256:17;;30194:87;:::o;47228:419::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47349:4:::1;47322:16;:24;47339:6;47322:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;47392:4;47364:16;:25;47381:7;47364:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;47434:4;47407:16;:24;47424:6;47407:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;47477:4;47449:16;:25;47466:7;47449:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;47492:25;47510:6;47492:17;:25::i;:::-;47528:26;47546:7;47528:17;:26::i;:::-;47565:31;47583:6;47591:4;47565:17;:31::i;:::-;47607:32;47625:7;47634:4;47607:17;:32::i;:::-;47228:419:::0;;:::o;24969:51::-;;;:::o;28295:95::-;28348:7;28375;;28368:14;;28295:95;:::o;46420:309::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46575:5:::1;46542:29;:38;;46534:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46692:29;46659:30;:62;;;;46420:309:::0;:::o;29099:313::-;29197:4;29214:36;29224:6;29232:9;29243:6;29214:9;:36::i;:::-;29261:121;29270:6;29278:12;:10;:12::i;:::-;29292:89;29330:6;29292:89;;;;;;;;;;;;;;;;;:11;:19;29304:6;29292:19;;;;;;;;;;;;;;;:33;29312:12;:10;:12::i;:::-;29292:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29261:8;:121::i;:::-;29400:4;29393:11;;29099:313;;;;;:::o;31118:253::-;31184:7;31223;;31212;:18;;31204:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31288:19;31311:10;:8;:10::i;:::-;31288:33;;31339:24;31351:11;31339:7;:11;;:24;;;;:::i;:::-;31332:31;;;31118:253;;;:::o;47028:192::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47110:45:::1;47127:4;47134:7;:5;:7::i;:::-;47143:11;47110:8;:45::i;:::-;47166:46;47184:4;47191:7;:5;:7::i;:::-;47200:11;47166:9;:46::i;:::-;47028:192:::0;:::o;28204:83::-;28245:5;28270:9;;;;;;;;;;;28263:16;;28204:83;:::o;31831:477::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31911:11:::1;:20;31923:7;31911:20;;;;;;;;;;;;;;;;;;;;;;;;;31903:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31979:9;31974:327;31998:9;:16;;;;31994:1;:20;31974:327;;;32056:7;32040:23;;:9;32050:1;32040:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;32036:254;;;32099:9;32128:1;32109:9;:16;;;;:20;32099:31;;;;;;;;;;;;;;;;;;;;;;;;;32084:9;32094:1;32084:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32168:1;32149:7;:16;32157:7;32149:16;;;;;;;;;;;;;;;:20;;;;32211:5;32188:11;:20;32200:7;32188:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32235:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32269:5;;32036:254;32016:3;;;;;;;31974:327;;;;31831:477:::0;:::o;29420:218::-;29508:4;29525:83;29534:12;:10;:12::i;:::-;29548:7;29557:50;29596:10;29557:11;:25;29569:12;:10;:12::i;:::-;29557:25;;;;;;;;;;;;;;;:34;29583:7;29557:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29525:8;:83::i;:::-;29626:4;29619:11;;29420:218;;;;:::o;30289:377::-;30341:14;30358:12;:10;:12::i;:::-;30341:29;;30390:11;:19;30402:6;30390:19;;;;;;;;;;;;;;;;;;;;;;;;;30389:20;30381:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30470:15;30494:19;30505:7;30494:10;:19::i;:::-;30469:44;;;;;;;30542:28;30562:7;30542;:15;30550:6;30542:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30524:7;:15;30532:6;30524:15;;;;;;;;;;;;;;;:46;;;;30591:20;30603:7;30591;;:11;;:20;;;;:::i;:::-;30581:7;:30;;;;30635:23;30650:7;30635:10;;:14;;:23;;;;:::i;:::-;30622:10;:36;;;;30289:377;;;:::o;32316:396::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32411:42:::1;32400:53;;:7;:53;;;;32392:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32532:4;32513:24;;:7;:24;;;;32505:33;;;::::0;::::1;;32558:17;:26;32576:7;32558:26;;;;;;;;;;;;;;;;;;;;;;;;;32557:27;32549:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32659:4;32630:17;:26;32648:7;32630:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;32674:16;32696:7;32674:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32316:396:::0;:::o;30674:436::-;30764:7;30803;;30792;:18;;30784:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30862:17;30857:246;;30897:15;30921:19;30932:7;30921:10;:19::i;:::-;30896:44;;;;;;;30962:7;30955:14;;;;;30857:246;31004:23;31035:19;31046:7;31035:10;:19::i;:::-;31002:52;;;;;;;31076:15;31069:22;;;30674:436;;;;;:::o;25027:38::-;;;:::o;25110:40::-;;;;;;;;;;;;;:::o;39059:156::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39113:23:::1;39139:24;39157:4;39139:9;:24::i;:::-;39113:50;;39174:33;39191:15;39174:16;:33::i;:::-;14633:1;39059:156::o:0;31379:444::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31472:42:::1;31461:53;;:7;:53;;;;31453:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31573:11;:20;31585:7;31573:20;;;;;;;;;;;;;;;;;;;;;;;;;31572:21;31564:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31658:1;31639:7;:16;31647:7;31639:16;;;;;;;;;;;;;;;;:20;31636:108;;;31695:37;31715:7;:16;31723:7;31715:16;;;;;;;;;;;;;;;;31695:19;:37::i;:::-;31676:7;:16;31684:7;31676:16;;;;;;;;;;;;;;;:56;;;;31636:108;31777:4;31754:11;:20;31766:7;31754:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31792:9;31807:7;31792:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31379:444:::0;:::o;33749:123::-;33813:4;33837:18;:27;33856:7;33837:27;;;;;;;;;;;;;;;;;;;;;;;;;33830:34;;33749:123;;;:::o;45805:169::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45891:1:::1;45881:6;:11;;:27;;;;;45906:2;45896:6;:12;;45881:27;45873:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;45960:6;45950:7;:16;;;;45805:169:::0;:::o;28398:198::-;28464:7;28488:11;:20;28500:7;28488:20;;;;;;;;;;;;;;;;;;;;;;;;;28484:49;;;28517:7;:16;28525:7;28517:16;;;;;;;;;;;;;;;;28510:23;;;;28484:49;28551:37;28571:7;:16;28579:7;28571:16;;;;;;;;;;;;;;;;28551:19;:37::i;:::-;28544:44;;28398:198;;;;:::o;14987:148::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15094:1:::1;15057:40;;15078:6;::::0;::::1;;;;;;;;15057:40;;;;;;;;;;;;15125:1;15108:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;14987:148::o:0;32720:500::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32809:17:::1;:26;32827:7;32809:26;;;;;;;;;;;;;;;;;;;;;;;;;32801:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32882:9;32877:336;32901:16;:23;;;;32897:1;:27;32877:336;;;32973:7;32950:30;;:16;32967:1;32950:19;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;32946:256;;;33023:16;33066:1;33040:16;:23;;;;:27;33023:45;;;;;;;;;;;;;;;;;;;;;;;;;33001:16;33018:1;33001:19;;;;;;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;33116:5;33087:17;:26;33105:7;33087:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33140:16;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33181:5;;32946:256;32926:3;;;;;;;32877:336;;;;32720:500:::0;:::o;29923:120::-;29991:4;30015:11;:20;30027:7;30015:20;;;;;;;;;;;;;;;;;;;;;;;;;30008:27;;29923:120;;;:::o;14353:79::-;14391:7;14418:6;;;;;;;;;;;14411:13;;14353:79;:::o;28109:87::-;28148:13;28181:7;28174:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28109:87;:::o;29646:269::-;29739:4;29756:129;29765:12;:10;:12::i;:::-;29779:7;29788:96;29827:15;29788:96;;;;;;;;;;;;;;;;;:11;:25;29800:12;:10;:12::i;:::-;29788:25;;;;;;;;;;;;;;;:34;29814:7;29788:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29756:8;:129::i;:::-;29903:4;29896:11;;29646:269;;;;:::o;45982:211::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46086:1:::1;46070:12;:17;;:39;;;;;46107:2;46091:12;:18;;46070:39;46062:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;46173:12;46157:13;:28;;;;45982:211:::0;:::o;28604:167::-;28682:4;28699:42;28709:12;:10;:12::i;:::-;28723:9;28734:6;28699:9;:42::i;:::-;28759:4;28752:11;;28604:167;;;;:::o;30051:135::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30170:8:::1;30140:18;:27;30159:7;30140:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;30051:135:::0;;:::o;46201:211::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46305:1:::1;46289:12;:17;;:39;;;;;46326:2;46310:12;:18;;46289:39;46281:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;46392:12;46376:13;:28;;;;46201:211:::0;:::o;39390:148::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39508:22:::1;39484:21;;:46;;;;;;;;;;;;;;;;;;39390:148:::0;:::o;46801:219::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46895:117:::1;46939:5;46895:25;46907:12;46895:7;;:11;;:25;;;;:::i;:::-;:29;;:117;;;;:::i;:::-;46880:12;:132;;;;46801:219:::0;:::o;28779:143::-;28860:7;28887:11;:18;28899:5;28887:18;;;;;;;;;;;;;;;:27;28906:7;28887:27;;;;;;;;;;;;;;;;28880:34;;28779:143;;;;:::o;15287:244::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15396:1:::1;15376:22;;:8;:22;;;;15368:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15486:8;15457:38;;15478:6;::::0;::::1;;;;;;;;15457:38;;;;;;;;;;;;15515:8;15506:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15287:244:::0;:::o;39223:159::-;14573:12;:10;:12::i;:::-;14563:22;;:6;;;;;;;;;;:22;;;14555:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39275:26:::1;39304:21;39275:50;;39336:38;39355:18;39336;:38::i;:::-;14633:1;39223:159::o:0;45687:110::-;45733:15;45768:21;45761:28;;45687:110;:::o;174:106::-;227:15;262:10;255:17;;174:106;:::o;33880:337::-;33990:1;33973:19;;:5;:19;;;;33965:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34071:1;34052:21;;:7;:21;;;;34044:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34155:6;34125:11;:18;34137:5;34125:18;;;;;;;;;;;;;;;:27;34144:7;34125:27;;;;;;;;;;;;;;;:36;;;;34193:7;34177:32;;34186:5;34177:32;;;34202:6;34177:32;;;;;;;;;;;;;;;;;;33880:337;;;:::o;34225:2118::-;34340:1;34322:20;;:6;:20;;;;34314:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34424:1;34403:23;;:9;:23;;;;34395:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34494:1;34485:6;:10;34477:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34561:17;:25;34579:6;34561:25;;;;;;;;;;;;;;;;;;;;;;;;;34560:26;34552:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34634:17;:28;34652:9;34634:28;;;;;;;;;;;;;;;;;;;;;;;;;34633:29;34625:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34710:17;:28;34728:9;34710:28;;;;;;;;;;;;;;;;;;;;;;;;;34709:29;34701:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34783:16;:24;34800:6;34783:24;;;;;;;;;;;;;;;;;;;;;;;;;34782:25;:57;;;;;34812:16;:27;34829:9;34812:27;;;;;;;;;;;;;;;;;;;;;;;;;34811:28;34782:57;34779:164;;;34874:12;;34864:6;:22;;34856:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34779:164;35237:28;35268:24;35286:4;35268:9;:24::i;:::-;35237:55;;35332:12;;35308:20;:36;35305:112;;35393:12;;35370:35;;35305:112;35429:24;35480:30;;35456:20;:54;;35429:81;;35526:16;;;;;;;;;;;35525:17;:56;;;;;35560:21;;;;;;;;;;;35525:56;:93;;;;;35599:19;35525:93;:134;;;;;35646:13;35636:23;;:6;:23;;;;35525:134;:176;;;;;35677:16;:24;35694:6;35677:24;;;;;;;;;;;;;;;;;;;;;;;;;35676:25;35525:176;:221;;;;;35719:16;:27;35736:9;35719:27;;;;;;;;;;;;;;;;;;;;;;;;;35718:28;35525:221;35521:397;;;35796:30;;35773:53;;35870:36;35885:20;35870:14;:36::i;:::-;35521:397;35991:12;36006:4;35991:19;;36110:18;:26;36129:6;36110:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;36140:18;:29;36159:9;36140:29;;;;;;;;;;;;;;;;;;;;;;;;;36110:59;36107:105;;;36195:5;36185:15;;36107:105;36285:50;36300:6;36308:9;36319:6;36327:7;36285:14;:50::i;:::-;34225:2118;;;;;;:::o;4261:192::-;4347:7;4380:1;4375;:6;;4383:12;4367:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4407:9;4423:1;4419;:5;4407:17;;4444:1;4437:8;;;4261:192;;;;;:::o;44757:163::-;44798:7;44819:15;44836;44855:19;:17;:19::i;:::-;44818:56;;;;44892:20;44904:7;44892;:11;;:20;;;;:::i;:::-;44885:27;;;;44757:163;:::o;5639:132::-;5697:7;5724:39;5728:1;5731;5724:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5717:46;;5639:132;;;;:::o;3376:181::-;3434:7;3454:9;3470:1;3466;:5;3454:17;;3495:1;3490;:6;;3482:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3548:1;3541:8;;;3376:181;;;;:::o;43452:518::-;43511:7;43520;43529;43538;43547;43556;43577:23;43602:12;43616:30;43650:63;43662:7;43671;;43680:32;43698:13;;43680;;:17;;:32;;;;:::i;:::-;43650:11;:63::i;:::-;43576:137;;;;;;43724:19;43746:10;:8;:10::i;:::-;43724:32;;43768:15;43785:23;43810:12;43826:39;43838:7;43847:4;43853:11;43826;:39::i;:::-;43767:98;;;;;;43884:7;43893:15;43910:4;43916:15;43933:4;43939:22;43876:86;;;;;;;;;;;;;;;;;;;43452:518;;;;;;;:::o;3831:136::-;3889:7;3916:43;3920:1;3923;3916:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3909:50;;3831:136;;;;:::o;37680:589::-;37806:21;37844:1;37830:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37806:40;;37875:4;37857;37862:1;37857:7;;;;;;;;;;;;;:23;;;;;;;;;;;37901:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37891:4;37896:1;37891:7;;;;;;;;;;;;;:32;;;;;;;;;;;37936:62;37953:4;37968:15;37986:11;37936:8;:62::i;:::-;38037:15;:66;;;38118:11;38144:1;38188:4;38215;38235:15;38037:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37680:589;;:::o;4703:471::-;4761:7;5011:1;5006;:6;5002:47;;;5036:1;5029:8;;;;5002:47;5061:9;5077:1;5073;:5;5061:17;;5106:1;5101;5097;:5;;;;;;:10;5089:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:1;5158:8;;;4703:471;;;;;:::o;38798:111::-;38861:23;;;;;;;;;;;:32;;:40;38894:6;38861:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38798:111;:::o;36351:1321::-;25702:4;25683:16;;:23;;;;;;;;;;;;;;;;;;36436:19:::1;36458:77;36502:32;36520:13;;36502;;:17;;:32;;;;:::i;:::-;36458:39;36483:13;;36458:20;:24;;:39;;;;:::i;:::-;:43;;:77;;;;:::i;:::-;36436:99;;36546:17;36566:37;36591:11;36566:20;:24;;:37;;;;:::i;:::-;36546:57;;36667:12;36682:16;36696:1;36682:9;:13;;:16;;;;:::i;:::-;36667:31;;36709:17;36729:19;36743:4;36729:9;:13;;:19;;;;:::i;:::-;36709:39;;37026:22;37051:21;37026:46;;37117:20;37140:21;37149:11;37140:4;:8;;:21;;;;:::i;:::-;37117:44;;37172:30;37189:12;37172:16;:30::i;:::-;37333:16;37352:41;37378:14;37352:21;:25;;:41;;;;:::i;:::-;37333:60;;37404:18;37425:36;37448:12;37425:18;37438:4;37425:8;:12;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;37404:57;;37511:35;37524:9;37535:10;37511:12;:35::i;:::-;37564:43;37579:4;37585:10;37597:9;37564:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37620:44;37639:24;37652:10;37639:8;:12;;:24;;;;:::i;:::-;37620:18;:44::i;:::-;25717:1;;;;;;;;25748:5:::0;25729:16;;:24;;;;;;;;;;;;;;;;;;36351:1321;:::o;39546:819::-;39658:7;39654:40;;39680:14;:12;:14::i;:::-;39654:40;39711:11;:19;39723:6;39711:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;39735:11;:22;39747:9;39735:22;;;;;;;;;;;;;;;;;;;;;;;;;39734:23;39711:46;39707:597;;;39774:48;39796:6;39804:9;39815:6;39774:21;:48::i;:::-;39707:597;;;39845:11;:19;39857:6;39845:19;;;;;;;;;;;;;;;;;;;;;;;;;39844:20;:46;;;;;39868:11;:22;39880:9;39868:22;;;;;;;;;;;;;;;;;;;;;;;;;39844:46;39840:464;;;39907:46;39927:6;39935:9;39946:6;39907:19;:46::i;:::-;39840:464;;;39976:11;:19;39988:6;39976:19;;;;;;;;;;;;;;;;;;;;;;;;;39975:20;:47;;;;;40000:11;:22;40012:9;40000:22;;;;;;;;;;;;;;;;;;;;;;;;;39999:23;39975:47;39971:333;;;40039:44;40057:6;40065:9;40076:6;40039:17;:44::i;:::-;39971:333;;;40105:11;:19;40117:6;40105:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40128:11;:22;40140:9;40128:22;;;;;;;;;;;;;;;;;;;;;;;;;40105:45;40101:203;;;40167:48;40189:6;40197:9;40208:6;40167:21;:48::i;:::-;40101:203;;;40248:44;40266:6;40274:9;40285:6;40248:17;:44::i;:::-;40101:203;39971:333;39840:464;39707:597;40320:7;40316:41;;40342:15;:13;:15::i;:::-;40316:41;39546:819;;;;:::o;44928:555::-;44978:7;44987;45007:15;45025:7;;45007:25;;45043:15;45061:7;;45043:25;;45084:9;45079:289;45103:9;:16;;;;45099:1;:20;45079:289;;;45169:7;45145;:21;45153:9;45163:1;45153:12;;;;;;;;;;;;;;;;;;;;;;;;;45145:21;;;;;;;;;;;;;;;;:31;:66;;;;45204:7;45180;:21;45188:9;45198:1;45188:12;;;;;;;;;;;;;;;;;;;;;;;;;45180:21;;;;;;;;;;;;;;;;:31;45145:66;45141:97;;;45221:7;;45230;;45213:25;;;;;;;;;45141:97;45263:34;45275:7;:21;45283:9;45293:1;45283:12;;;;;;;;;;;;;;;;;;;;;;;;;45275:21;;;;;;;;;;;;;;;;45263:7;:11;;:34;;;;:::i;:::-;45253:44;;45322:34;45334:7;:21;45342:9;45352:1;45342:12;;;;;;;;;;;;;;;;;;;;;;;;;45334:21;;;;;;;;;;;;;;;;45322:7;:11;;:34;;;;:::i;:::-;45312:44;;45121:3;;;;;;;45079:289;;;;45392:20;45404:7;;45392;;:11;;:20;;;;:::i;:::-;45382:7;:30;45378:61;;;45422:7;;45431;;45414:25;;;;;;;;45378:61;45458:7;45467;45450:25;;;;;;44928:555;;;:::o;6256:278::-;6342:7;6374:1;6370;:5;6377:12;6362:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6401:9;6417:1;6413;:5;;;;;;6401:17;;6525:1;6518:8;;;6256:278;;;;;:::o;43978:429::-;44085:7;44094;44103;44123:12;44138:28;44162:3;44138:19;44150:6;44138:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;44123:43;;44177:30;44210:43;44249:3;44210:34;44222:21;44210:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;44177:76;;44264:23;44290:44;44312:21;44290:17;44302:4;44290:7;:11;;:17;;;;:::i;:::-;:21;;:44;;;;:::i;:::-;44264:70;;44353:15;44370:4;44376:22;44345:54;;;;;;;;;43978:429;;;;;;;:::o;44415:334::-;44510:7;44519;44528;44548:15;44566:24;44578:11;44566:7;:11;;:24;;;;:::i;:::-;44548:42;;44601:12;44616:21;44625:11;44616:4;:8;;:21;;;;:::i;:::-;44601:36;;44648:23;44674:17;44686:4;44674:7;:11;;:17;;;;:::i;:::-;44648:43;;44710:7;44719:15;44736:4;44702:39;;;;;;;;;44415:334;;;;;;;:::o;38277:513::-;38425:62;38442:4;38457:15;38475:11;38425:8;:62::i;:::-;38530:15;:31;;;38569:9;38602:4;38622:11;38648:1;38691;38734:7;:5;:7::i;:::-;38756:15;38530:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38277:513;;:::o;33228:332::-;33285:1;33274:7;;:12;:34;;;;;33307:1;33290:13;;:18;33274:34;:56;;;;;33329:1;33312:13;;:18;33274:56;33271:68;;;33332:7;;33271:68;33369:7;;33351:15;:25;;;;33411:13;;33387:21;:37;;;;33459:13;;33435:21;:37;;;;33495:1;33485:7;:11;;;;33523:1;33507:13;:17;;;;33551:1;33535:13;:17;;;;33228:332;:::o;41520:590::-;41623:15;41640:23;41665:12;41679:23;41704:12;41718:27;41749:19;41760:7;41749:10;:19::i;:::-;41622:146;;;;;;;;;;;;41797:28;41817:7;41797;:15;41805:6;41797:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41779:7;:15;41787:6;41779:15;;;;;;;;;;;;;;;:46;;;;41854:28;41874:7;41854;:15;41862:6;41854:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41836:7;:15;41844:6;41836:15;;;;;;;;;;;;;;;:46;;;;41914:39;41937:15;41914:7;:18;41922:9;41914:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41893:7;:18;41901:9;41893:18;;;;;;;;;;;;;;;:60;;;;41964:44;41988:19;41964:23;:44::i;:::-;42019:23;42031:4;42037;42019:11;:23::i;:::-;42075:9;42058:44;;42067:6;42058:44;;;42086:15;42058:44;;;;;;;;;;;;;;;;;;41520:590;;;;;;;;;:::o;40910:602::-;41011:15;41028:23;41053:12;41067:23;41092:12;41106:27;41137:19;41148:7;41137:10;:19::i;:::-;41010:146;;;;;;;;;;;;41185:28;41205:7;41185;:15;41193:6;41185:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41167:7;:15;41175:6;41167:15;;;;;;;;;;;;;;;:46;;;;41245:39;41268:15;41245:7;:18;41253:9;41245:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41224:7;:18;41232:9;41224:18;;;;;;;;;;;;;;;:60;;;;41316:39;41339:15;41316:7;:18;41324:9;41316:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41295:7;:18;41303:9;41295:18;;;;;;;;;;;;;;;:60;;;;41366:44;41390:19;41366:23;:44::i;:::-;41421:23;41433:4;41439;41421:11;:23::i;:::-;41477:9;41460:44;;41469:6;41460:44;;;41488:15;41460:44;;;;;;;;;;;;;;;;;;40910:602;;;;;;;;;:::o;40373:529::-;40472:15;40489:23;40514:12;40528:23;40553:12;40567:27;40598:19;40609:7;40598:10;:19::i;:::-;40471:146;;;;;;;;;;;;40646:28;40666:7;40646;:15;40654:6;40646:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40628:7;:15;40636:6;40628:15;;;;;;;;;;;;;;;:46;;;;40706:39;40729:15;40706:7;:18;40714:9;40706:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;40685:7;:18;40693:9;40685:18;;;;;;;;;;;;;;;:60;;;;40756:44;40780:19;40756:23;:44::i;:::-;40811:23;40823:4;40829;40811:11;:23::i;:::-;40867:9;40850:44;;40859:6;40850:44;;;40878:15;40850:44;;;;;;;;;;;;;;;;;;40373:529;;;;;;;;;:::o;42118:661::-;42221:15;42238:23;42263:12;42277:23;42302:12;42316:27;42347:19;42358:7;42347:10;:19::i;:::-;42220:146;;;;;;;;;;;;42395:28;42415:7;42395;:15;42403:6;42395:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42377:7;:15;42385:6;42377:15;;;;;;;;;;;;;;;:46;;;;42452:28;42472:7;42452;:15;42460:6;42452:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42434:7;:15;42442:6;42434:15;;;;;;;;;;;;;;;:46;;;;42512:39;42535:15;42512:7;:18;42520:9;42512:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42491:7;:18;42499:9;42491:18;;;;;;;;;;;;;;;:60;;;;42583:39;42606:15;42583:7;:18;42591:9;42583:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42562:7;:18;42570:9;42562:18;;;;;;;;;;;;;;;:60;;;;42633:44;42657:19;42633:23;:44::i;:::-;42688:23;42700:4;42706;42688:11;:23::i;:::-;42744:9;42727:44;;42736:6;42727:44;;;42755:15;42727:44;;;;;;;;;;;;;;;;;;42118:661;;;;;;;;;:::o;33568:173::-;33622:15;;33612:7;:25;;;;33664:21;;33648:13;:37;;;;33712:21;;33696:13;:37;;;;33568:173::o;42787:408::-;42868:19;42890:10;:8;:10::i;:::-;42868:32;;42911:27;42941:36;42965:11;42941:19;:23;;:36;;;;:::i;:::-;42911:66;;43013:47;43040:19;43013:7;:22;43029:4;43013:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;42988:7;:22;43004:4;42988:22;;;;;;;;;;;;;;;:72;;;;43074:11;:26;43094:4;43074:26;;;;;;;;;;;;;;;;;;;;;;;;;43071:116;;;43140:47;43167:19;43140:7;:22;43156:4;43140:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;43115:7;:22;43131:4;43115:22;;;;;;;;;;;;;;;:72;;;;43071:116;42787:408;;;:::o;43203:147::-;43281:17;43293:4;43281:7;;:11;;:17;;;;:::i;:::-;43271:7;:27;;;;43322:20;43337:4;43322:10;;:14;;:20;;;;:::i;:::-;43309:10;:33;;;;43203:147;;:::o

Swarm Source

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