ETH Price: $3,439.61 (+1.42%)
Gas: 4 Gwei

Token

Master Shibu ($MSHIBU)
 

Overview

Max Total Supply

1,000,000,000,000 $MSHIBU

Holders

104

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
zoomercell.eth
Balance
27,648,656,001.408759046394675949 $MSHIBU

Value
$0.00
0x192a2ff96d045bb859b81b4343e0d80583f768b2
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:
MasterShibu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

// t.me/MasterShibuErc
// https://www.MasterShibu.com
// Check out our whitepaper and join the community!


// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.3;
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */ 
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);
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
    * @dev Returns the addition of two unsigned integers, with an overflow flag.
    *
    * _Available since v3.4._
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
    * @dev Returns the substraction of two unsigned integers, with an overflow flag.
    *
    * _Available since v3.4._
    */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
    * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
    *
    * _Available since v3.4._
    */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
    * @dev Returns the division of two unsigned integers, with a division by zero flag.
    *
    * _Available since v3.4._
    */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
    *
    * _Available since v3.4._
    */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
    * @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) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

 
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * reverting 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 a % b;
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
    * overflow (when the result is negative).
    *
    * CAUTION: This function is deprecated because it requires allocating memory for the error
    * message unnecessarily. For custom revert reasons use {trySub}.
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
    * @dev Returns the integer division of two unsigned integers, reverting with custom message on
    * division by zero. The result is rounded towards 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).
    *
    * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * reverting with custom message when dividing by zero.
    *
    * CAUTION: This function is deprecated because it requires allocating memory for the error
    * message unnecessarily. For custom revert reasons use {tryMod}.
    *
    * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    *  - an externally-owned account
    *  - a contract in construction
    *  - an address where a contract will be created
    *  - an address where a contract lived, but was destroyed
    * ====
    */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
    * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
    * `recipient`, forwarding all available gas and reverting on errors.
    *
    * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
    * of certain opcodes, possibly making contracts go over the 2300 gas limit
    * imposed by `transfer`, making them unable to receive funds via
    * `transfer`. {sendValue} removes this limitation.
    *
    * https://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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
    * but performing a static call.
    *
    * _Available since v3.3._
    */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
    * but performing a delegate call.
    *
    * _Available since v3.4._
    */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

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

    /**
    * @dev Returns the address of the current owner.
    */
    function owner() public view virtual 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 MasterShibu is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    uint8 private _decimals = 18;

    // 
    string private _name = "Master Shibu";                                           // name
    string private _symbol = "$MSHIBU";                                            // symbol
    uint256 private _tTotal = 1000000000000 * 10**18; // supply is 1 Trillion

    // % to holders
    uint256 public defaultTaxFee = 0;
    uint256 private maxReflection = 1;
    uint256 public _taxFee = defaultTaxFee;
    uint256 private _previousTaxFee = _taxFee;

    // % to swap & send to marketing wallet
    uint256 private maxMarketingFee = 10; // check settingFees
    uint256 public defaultMarketingFee = 10;
    uint256 public _marketingFee = defaultMarketingFee;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 public _marketingFee4Sellers = 10; // Once changed to less than maxMarketingFee or equal, it can no longer be upped.

    bool public feesOnSellersAndBuyers = true;
    
    //TX & MAX WALLET

    uint256 public _maxTxAmount = _tTotal/100; // 
    uint256 public _maxWalletAmount = 12500000000 * 10**18; // 1.25% Tokens // 12,500,000,000 token
    uint256 public numTokensToExchangeForMarketing = _tTotal.div(10000);
    address payable public marketingWallet = payable(0x8d090DEAE23F2c82EdD5cb915f90b44f1Fff09fe);

    //

    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;
    
    mapping (address => bool) public _isBlacklisted;

    address[] private _excluded;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tFeeTotal;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndSend;
    bool public SwapAndSendEnabled = true;

    event SwapAndSendEnabledUpdated(bool enabled);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = false;
    }

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

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;

        _taxFee = 0;
        _marketingFee = 0;
    }

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

    //to recieve ETH
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    
     function addToBlackList(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isBlacklisted[addresses[i]] = true;
      }
    }
    
      function removeFromBlackList(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing);
        return (tTransferAmount, tFee, tMarketing);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing);
        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 _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_marketingFee).div(
            10**2
        );
    }

    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 from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "This address is blacklisted");

        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            
            if(to != uniswapV2Pair) {
                require(balanceOf(to) + amount <= _maxWalletAmount, "TOKEN: Balance exceeds wallet size!");
            } }
            
            
       

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

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

        if (
            overMinTokenBalance &&
            !inSwapAndSend &&
            from != uniswapV2Pair &&
            SwapAndSendEnabled
        ) {
            SwapAndSend(contractTokenBalance);
        }

        if(feesOnSellersAndBuyers) {
            setFees(to);
        }

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

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

        _tokenTransfer(from,to,amount,takeFee);
        }
    

    function setFees(address recipient) private {
        _taxFee = defaultTaxFee;
        _marketingFee = defaultMarketingFee;
        if (recipient == uniswapV2Pair) { // sell
            _marketingFee = _marketingFee4Sellers;
        }
    }

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    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 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(tMarketing);
        _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 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(tMarketing);
        _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 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketing(tMarketing);
        _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 tMarketing) = _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);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function setDefaultMarketingFee(uint256 marketingFee) external onlyOwner() {
        require(marketingFee <= maxMarketingFee);
        defaultMarketingFee = marketingFee;
    }

    function setMarketingFee4Sellers(uint256 marketingFee4Sellers) external onlyOwner() {
        require(marketingFee4Sellers <= maxMarketingFee);
        _marketingFee4Sellers = marketingFee4Sellers;
    }
    
    function setReflection(uint256 taxfee) external onlyOwner() {
        require(taxfee <= maxReflection);
        _taxFee = taxfee;
    }

    function setFeesOnSellersAndBuyers(bool _enabled) public onlyOwner() {
        
        feesOnSellersAndBuyers = _enabled;
    }

    function setSwapAndSendEnabled(bool _enabled) public onlyOwner() {
        SwapAndSendEnabled = _enabled;
        emit SwapAndSendEnabledUpdated(_enabled);
    }

    function setnumTokensToExchangeForMarketing(uint256 _numTokensToExchangeForMarketing) public onlyOwner() {
        numTokensToExchangeForMarketing = _numTokensToExchangeForMarketing;
    }

    function _setMarketingWallet(address payable wallet) external onlyOwner() {
        marketingWallet = wallet;
    }
    
    function _setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount;
    }
    

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndSendEnabledUpdated","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":"SwapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee4Sellers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"_setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlackList","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":[],"name":"defaultMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnSellersAndBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToExchangeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setDefaultMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnSellersAndBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee4Sellers","type":"uint256"}],"name":"setMarketingFee4Sellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxfee","type":"uint256"}],"name":"setReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensToExchangeForMarketing","type":"uint256"}],"name":"setnumTokensToExchangeForMarketing","outputs":[],"stateMutability":"nonpayable","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"}]

60c06040526012600060146101000a81548160ff021916908360ff1602179055506040518060400160405280600c81526020017f4d61737465722053686962750000000000000000000000000000000000000000815250600190805190602001906200006d929190620006c2565b506040518060400160405280600781526020017f244d53484942550000000000000000000000000000000000000000000000000081525060029080519060200190620000bb929190620006c2565b506c0c9f2c9cd04674edea4000000060035560006004556001600555600454600655600654600755600a600855600a600955600954600a55600a54600b55600a600c556001600d60006101000a81548160ff02191690831515021790555060646003546200012a919062000827565b600e556b2863c1f5cdae42f954000000600f556200015b6127106003546200067960201b620025291790919060201c565b601055738d090deae23f2c82edd5cb915f90b44f1fff09fe601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600354600019620001c591906200090e565b600019620001d491906200085f565b601a556001601b60016101000a81548160ff021916908315150217905550348015620001ff57600080fd5b50620002106200069160201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3601a5460126000620002e16200069160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037f57600080fd5b505afa15801562000394573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ba919062000789565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041d57600080fd5b505afa15801562000432573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000458919062000789565b6040518363ffffffff1660e01b815260040162000477929190620007dd565b602060405180830381600087803b1580156200049257600080fd5b505af1158015620004a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cd919062000789565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160156000620005506200069960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006096200069160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200066a91906200080a565b60405180910390a350620009f2565b6000818362000689919062000827565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006d090620008d8565b90600052602060002090601f016020900481019282620006f4576000855562000740565b82601f106200070f57805160ff191683800117855562000740565b8280016001018555821562000740579182015b828111156200073f57825182559160200191906001019062000722565b5b5090506200074f919062000753565b5090565b5b808211156200076e57600081600090555060010162000754565b5090565b6000815190506200078381620009d8565b92915050565b600060208284031215620007a257620007a1620009d3565b5b6000620007b28482850162000772565b91505092915050565b620007c6816200089a565b82525050565b620007d781620008ce565b82525050565b6000604082019050620007f46000830185620007bb565b620008036020830184620007bb565b9392505050565b6000602082019050620008216000830184620007cc565b92915050565b60006200083482620008ce565b91506200084183620008ce565b92508262000854576200085362000975565b5b828204905092915050565b60006200086c82620008ce565b91506200087983620008ce565b9250828210156200088f576200088e62000946565b5b828203905092915050565b6000620008a782620008ae565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620008f157607f821691505b60208210811415620009085762000907620009a4565b5b50919050565b60006200091b82620008ce565b91506200092883620008ce565b9250826200093b576200093a62000975565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620009e3816200089a565b8114620009ef57600080fd5b50565b60805160601c60a05160601c61547462000a48600039600081816115aa015281816129da01528181612ace0152613029015260008181610c1301528181612dd401528181612ec40152612eeb01526154746000f3fe6080604052600436106102975760003560e01c806357e0a1d01161015a578063a3864430116100c1578063d54994db1161007a578063d54994db14610a4d578063dab522a814610a76578063dd62ed3e14610a9f578063ea2f0b3714610adc578063f2fde38b14610b05578063ff89757014610b2e5761029e565b8063a386443014610927578063a457c2d714610952578063a9059cbb1461098f578063bc951f98146109cc578063c537bd8f146109f7578063cba851b314610a225761029e565b806388f820201161011357806388f82020146108155780638da5cb5b1461085257806395d89b411461087d5780639f646214146108a8578063a062e3ba146108d3578063a08f6760146108fe5761029e565b806357e0a1d0146107175780636c0a24eb1461074057806370a082311461076b578063715018a6146107a857806375f0a874146107bf5780637d1db4a5146107ea5761029e565b80632d838119116101fe5780634549b039116101b75780634549b039146105f757806349bd5a5e146106345780634a49ac4c1461065f57806350a4b72e1461068857806352390c02146106b15780635342acb4146106da5761029e565b80632d838119146104d5578063313ce567146105125780633685d4191461053d57806339509351146105665780633b124fe7146105a3578063437823ec146105ce5761029e565b80631cdd3be3116102505780631cdd3be3146103b55780631ff53b60146103f257806322976e0d1461041b57806323b872dd146104465780632663236f146104835780632a7d0d33146104ac5761029e565b806306fdde03146102a3578063095ea7b3146102ce57806313114a9d1461030b5780631694505e1461033657806318160ddd146103615780631bbae6e01461038c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b57565b6040516102c591906149cd565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f0919061454c565b610be9565b6040516103029190614997565b60405180910390f35b34801561031757600080fd5b50610320610c07565b60405161032d9190614b8f565b60405180910390f35b34801561034257600080fd5b5061034b610c11565b60405161035891906149b2565b60405180910390f35b34801561036d57600080fd5b50610376610c35565b6040516103839190614b8f565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190614606565b610c3f565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190614432565b610cc5565b6040516103e99190614997565b60405180910390f35b3480156103fe57600080fd5b506104196004803603810190610414919061448c565b610ce5565b005b34801561042757600080fd5b50610430610da5565b60405161043d9190614b8f565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906144f9565b610dab565b60405161047a9190614997565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a591906145d9565b610e84565b005b3480156104b857600080fd5b506104d360048036038101906104ce9190614606565b610f54565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190614606565b610fda565b6040516105099190614b8f565b60405180910390f35b34801561051e57600080fd5b50610527611048565b6040516105349190614c04565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190614432565b61105e565b005b34801561057257600080fd5b5061058d6004803603810190610588919061454c565b611394565b60405161059a9190614997565b60405180910390f35b3480156105af57600080fd5b506105b8611447565b6040516105c59190614b8f565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f09190614432565b61144d565b005b34801561060357600080fd5b5061061e60048036038101906106199190614633565b611524565b60405161062b9190614b8f565b60405180910390f35b34801561064057600080fd5b506106496115a8565b6040516106569190614961565b60405180910390f35b34801561066b57600080fd5b5061068660048036038101906106819190614432565b6115cc565b005b34801561069457600080fd5b506106af60048036038101906106aa9190614606565b6116a3565b005b3480156106bd57600080fd5b506106d860048036038101906106d39190614432565b611738565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190614432565b6119d3565b60405161070e9190614997565b60405180910390f35b34801561072357600080fd5b5061073e600480360381019061073991906145d9565b611a29565b005b34801561074c57600080fd5b50610755611ac2565b6040516107629190614b8f565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190614432565b611ac8565b60405161079f9190614b8f565b60405180910390f35b3480156107b457600080fd5b506107bd611bb3565b005b3480156107cb57600080fd5b506107d4611ced565b6040516107e1919061497c565b60405180910390f35b3480156107f657600080fd5b506107ff611d13565b60405161080c9190614b8f565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190614432565b611d19565b6040516108499190614997565b60405180910390f35b34801561085e57600080fd5b50610867611d6f565b6040516108749190614961565b60405180910390f35b34801561088957600080fd5b50610892611d98565b60405161089f91906149cd565b60405180910390f35b3480156108b457600080fd5b506108bd611e2a565b6040516108ca9190614b8f565b60405180910390f35b3480156108df57600080fd5b506108e8611e30565b6040516108f59190614997565b60405180910390f35b34801561090a57600080fd5b5061092560048036038101906109209190614606565b611e43565b005b34801561093357600080fd5b5061093c611ed8565b6040516109499190614b8f565b60405180910390f35b34801561095e57600080fd5b506109796004803603810190610974919061454c565b611ede565b6040516109869190614997565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b1919061454c565b611fab565b6040516109c39190614997565b60405180910390f35b3480156109d857600080fd5b506109e1611fc9565b6040516109ee9190614b8f565b60405180910390f35b348015610a0357600080fd5b50610a0c611fcf565b604051610a199190614997565b60405180910390f35b348015610a2e57600080fd5b50610a37611fe2565b604051610a449190614b8f565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f9190614606565b611fe8565b005b348015610a8257600080fd5b50610a9d6004803603810190610a989190614606565b61207d565b005b348015610aab57600080fd5b50610ac66004803603810190610ac191906144b9565b612103565b604051610ad39190614b8f565b60405180910390f35b348015610ae857600080fd5b50610b036004803603810190610afe9190614432565b61218a565b005b348015610b1157600080fd5b50610b2c6004803603810190610b279190614432565b612261565b005b348015610b3a57600080fd5b50610b556004803603810190610b50919061458c565b61240a565b005b606060018054610b6690614e6b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9290614e6b565b8015610bdf5780601f10610bb457610100808354040283529160200191610bdf565b820191906000526020600020905b815481529060010190602001808311610bc257829003601f168201915b5050505050905090565b6000610bfd610bf661253f565b8484612547565b6001905092915050565b6000601954905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354905090565b610c4761253f565b73ffffffffffffffffffffffffffffffffffffffff16610c65611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290614aef565b60405180910390fd5b80600e8190555050565b60176020528060005260406000206000915054906101000a900460ff1681565b610ced61253f565b73ffffffffffffffffffffffffffffffffffffffff16610d0b611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5890614aef565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6000610db8848484612712565b610e7984610dc461253f565b610e74856040518060600160405280602881526020016153f260289139601460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e2a61253f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c289092919063ffffffff16565b612547565b600190509392505050565b610e8c61253f565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614aef565b60405180910390fd5b80601b60016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610f499190614997565b60405180910390a150565b610f5c61253f565b73ffffffffffffffffffffffffffffffffffffffff16610f7a611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790614aef565b60405180910390fd5b80600f8190555050565b6000601a54821115611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890614a0f565b60405180910390fd5b600061102b612c7d565b9050611040818461252990919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b61106661253f565b73ffffffffffffffffffffffffffffffffffffffff16611084611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190614aef565b60405180910390fd5b601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614a6f565b60405180910390fd5b60005b601880549050811015611390578173ffffffffffffffffffffffffffffffffffffffff16601882815481106111a1576111a0614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561137d57601860016018805490506111fc9190614d55565b8154811061120d5761120c614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166018828154811061124c5761124b614fa2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601880548061134357611342614f73565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611390565b808061138890614e9d565b915050611169565b5050565b600061143d6113a161253f565b8461143885601460006113b261253f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b612547565b6001905092915050565b60065481565b61145561253f565b73ffffffffffffffffffffffffffffffffffffffff16611473611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614aef565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060035483111561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290614aaf565b60405180910390fd5b8161158b57600061157b84612cbe565b50505050509050809150506115a2565b600061159684612cbe565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6115d461253f565b73ffffffffffffffffffffffffffffffffffffffff166115f2611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f90614aef565b60405180910390fd5b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116ab61253f565b73ffffffffffffffffffffffffffffffffffffffff166116c9611d6f565b73ffffffffffffffffffffffffffffffffffffffff161461171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171690614aef565b60405180910390fd5b60055481111561172e57600080fd5b8060068190555050565b61174061253f565b73ffffffffffffffffffffffffffffffffffffffff1661175e611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab90614aef565b60405180910390fd5b601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183890614a6f565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611915576118d1601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fda565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611a3161253f565b73ffffffffffffffffffffffffffffffffffffffff16611a4f611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90614aef565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b600f5481565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b6357601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611bae565b611bab601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fda565b90505b919050565b611bbb61253f565b73ffffffffffffffffffffffffffffffffffffffff16611bd9611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690614aef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611da790614e6b565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd390614e6b565b8015611e205780601f10611df557610100808354040283529160200191611e20565b820191906000526020600020905b815481529060010190602001808311611e0357829003601f168201915b5050505050905090565b60095481565b601b60019054906101000a900460ff1681565b611e4b61253f565b73ffffffffffffffffffffffffffffffffffffffff16611e69611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614aef565b60405180910390fd5b600854811115611ece57600080fd5b80600c8190555050565b60105481565b6000611fa1611eeb61253f565b84611f9c8560405180606001604052806025815260200161541a6025913960146000611f1561253f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c289092919063ffffffff16565b612547565b6001905092915050565b6000611fbf611fb861253f565b8484612712565b6001905092915050565b600c5481565b600d60009054906101000a900460ff1681565b60045481565b611ff061253f565b73ffffffffffffffffffffffffffffffffffffffff1661200e611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90614aef565b60405180910390fd5b60085481111561207357600080fd5b8060098190555050565b61208561253f565b73ffffffffffffffffffffffffffffffffffffffff166120a3611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090614aef565b60405180910390fd5b8060108190555050565b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61219261253f565b73ffffffffffffffffffffffffffffffffffffffff166121b0611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90614aef565b60405180910390fd5b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61226961253f565b73ffffffffffffffffffffffffffffffffffffffff16612287611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490614aef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490614a2f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61241261253f565b73ffffffffffffffffffffffffffffffffffffffff16612430611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90614aef565b60405180910390fd5b60005b82829050811015612524576001601760008585858181106124ad576124ac614fa2565b5b90506020020160208101906124c29190614432565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061251d90614e9d565b9050612489565b505050565b600081836125379190614cca565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90614b6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90614a4f565b60405180910390fd5b80601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127059190614b8f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614b2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e9906149ef565b60405180910390fd5b60008111612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c90614b0f565b60405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128d95750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f90614a8f565b60405180910390fd5b612920611d6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561298e575061295e611d6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a8557600e548111156129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90614acf565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a8457600f5481612a3884611ac8565b612a429190614c74565b1115612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a90614b4f565b60405180910390fd5b5b5b6000612a9030611ac8565b905060006010548210159050600e548210612aab57600e5491505b808015612ac55750601b60009054906101000a900460ff16155b8015612b1d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b355750601b60019054906101000a900460ff165b15612b4457612b4382612d1a565b5b600d60009054906101000a900460ff1615612b6357612b6284613015565b5b600060019050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c0a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c1457600090505b612c2086868684613088565b505050505050565b6000838311158290612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6791906149cd565b60405180910390fd5b5082840390509392505050565b6000806000612c8a613399565b91509150612ca1818361252990919063ffffffff16565b9250505090565b60008183612cb69190614c74565b905092915050565b6000806000806000806000806000612cd58a61364c565b9250925092506000806000612cf38d8686612cee612c7d565b6136a6565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601b60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612d5257612d51614fd1565b5b604051908082528060200260200182016040528015612d805781602001602082028036833780820191505090505b5090503081600081518110612d9857612d97614fa2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612e3857600080fd5b505afa158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e70919061445f565b81600181518110612e8457612e83614fa2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ee9307f000000000000000000000000000000000000000000000000000000000000000084612547565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f4b959493929190614baa565b600060405180830381600087803b158015612f6557600080fd5b505af1158015612f79573d6000803e3d6000fd5b5050505060004790506000811115612ff557601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ff3573d6000803e3d6000fd5b505b50506000601b60006101000a81548160ff02191690831515021790555050565b600454600681905550600954600a819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561308557600c54600a819055505b50565b806130965761309561372f565b5b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131395750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561314e57613149848484613772565b613385565b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131f15750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613206576132018484846139d2565b613384565b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132aa5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132bf576132ba848484613c32565b613383565b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133615750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337657613371848484613dfd565b613382565b613381848484613c32565b5b5b5b5b80613393576133926140f2565b5b50505050565b6000806000601a5490506000600354905060005b60188054905081101561360f578260126000601884815481106133d3576133d2614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134c1575081601360006018848154811061345957613458614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156134d857601a5460035494509450505050613648565b61356860126000601884815481106134f3576134f2614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461410690919063ffffffff16565b92506135fa601360006018848154811061358557613584614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361410690919063ffffffff16565b9150808061360790614e9d565b9150506133ad565b50613627600354601a5461252990919063ffffffff16565b82101561363f57601a54600354935093505050613648565b81819350935050505b9091565b60008060008061365b8561411c565b905060006136688661414d565b9050600061369182613683858a61410690919063ffffffff16565b61410690919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806136bf858961417e90919063ffffffff16565b905060006136d6868961417e90919063ffffffff16565b905060006136ed878961417e90919063ffffffff16565b9050600061371682613708858761410690919063ffffffff16565b61410690919063ffffffff16565b9050838184965096509650505050509450945094915050565b600060065414801561374357506000600a54145b1561374d57613770565b600654600781905550600a54600b8190555060006006819055506000600a819055505b565b60008060008060008061378487612cbe565b9550955095509550955095506137e287601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061387786601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061390c85601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395881614194565b6139628483614339565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516139bf9190614b8f565b60405180910390a3505050505050505050565b6000806000806000806139e487612cbe565b955095509550955095509550613a4286601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ad783601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b6c85601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bb881614194565b613bc28483614339565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c1f9190614b8f565b60405180910390a3505050505050505050565b600080600080600080613c4487612cbe565b955095509550955095509550613ca286601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3785601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8381614194565b613d8d8483614339565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613dea9190614b8f565b60405180910390a3505050505050505050565b600080600080600080613e0f87612cbe565b955095509550955095509550613e6d87601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0286601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9783601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402c85601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061407881614194565b6140828483614339565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140df9190614b8f565b60405180910390a3505050505050505050565b600754600681905550600b54600a81905550565b600081836141149190614d55565b905092915050565b600061414660646141386006548561417e90919063ffffffff16565b61252990919063ffffffff16565b9050919050565b60006141776064614169600a548561417e90919063ffffffff16565b61252990919063ffffffff16565b9050919050565b6000818361418c9190614cfb565b905092915050565b600061419e612c7d565b905060006141b5828461417e90919063ffffffff16565b905061420981601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614334576142f083601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61434e82601a5461410690919063ffffffff16565b601a8190555061436981601954612ca890919063ffffffff16565b6019819055505050565b60008135905061438281615395565b92915050565b60008151905061439781615395565b92915050565b6000813590506143ac816153ac565b92915050565b60008083601f8401126143c8576143c7615005565b5b8235905067ffffffffffffffff8111156143e5576143e4615000565b5b6020830191508360208202830111156144015761440061500a565b5b9250929050565b600081359050614417816153c3565b92915050565b60008135905061442c816153da565b92915050565b60006020828403121561444857614447615014565b5b600061445684828501614373565b91505092915050565b60006020828403121561447557614474615014565b5b600061448384828501614388565b91505092915050565b6000602082840312156144a2576144a1615014565b5b60006144b08482850161439d565b91505092915050565b600080604083850312156144d0576144cf615014565b5b60006144de85828601614373565b92505060206144ef85828601614373565b9150509250929050565b60008060006060848603121561451257614511615014565b5b600061452086828701614373565b935050602061453186828701614373565b92505060406145428682870161441d565b9150509250925092565b6000806040838503121561456357614562615014565b5b600061457185828601614373565b92505060206145828582860161441d565b9150509250929050565b600080602083850312156145a3576145a2615014565b5b600083013567ffffffffffffffff8111156145c1576145c061500f565b5b6145cd858286016143b2565b92509250509250929050565b6000602082840312156145ef576145ee615014565b5b60006145fd84828501614408565b91505092915050565b60006020828403121561461c5761461b615014565b5b600061462a8482850161441d565b91505092915050565b6000806040838503121561464a57614649615014565b5b60006146588582860161441d565b925050602061466985828601614408565b9150509250929050565b600061467f838361469a565b60208301905092915050565b61469481614d9b565b82525050565b6146a381614d89565b82525050565b6146b281614d89565b82525050565b60006146c382614c2f565b6146cd8185614c52565b93506146d883614c1f565b8060005b838110156147095781516146f08882614673565b97506146fb83614c45565b9250506001810190506146dc565b5085935050505092915050565b61471f81614dad565b82525050565b61472e81614df0565b82525050565b61473d81614e02565b82525050565b600061474e82614c3a565b6147588185614c63565b9350614768818560208601614e38565b61477181615019565b840191505092915050565b6000614789602383614c63565b91506147948261502a565b604082019050919050565b60006147ac602a83614c63565b91506147b782615079565b604082019050919050565b60006147cf602683614c63565b91506147da826150c8565b604082019050919050565b60006147f2602283614c63565b91506147fd82615117565b604082019050919050565b6000614815601b83614c63565b915061482082615166565b602082019050919050565b6000614838601b83614c63565b91506148438261518f565b602082019050919050565b600061485b601f83614c63565b9150614866826151b8565b602082019050919050565b600061487e602883614c63565b9150614889826151e1565b604082019050919050565b60006148a1602083614c63565b91506148ac82615230565b602082019050919050565b60006148c4602983614c63565b91506148cf82615259565b604082019050919050565b60006148e7602583614c63565b91506148f2826152a8565b604082019050919050565b600061490a602383614c63565b9150614915826152f7565b604082019050919050565b600061492d602483614c63565b915061493882615346565b604082019050919050565b61494c81614dd9565b82525050565b61495b81614de3565b82525050565b600060208201905061497660008301846146a9565b92915050565b6000602082019050614991600083018461468b565b92915050565b60006020820190506149ac6000830184614716565b92915050565b60006020820190506149c76000830184614725565b92915050565b600060208201905081810360008301526149e78184614743565b905092915050565b60006020820190508181036000830152614a088161477c565b9050919050565b60006020820190508181036000830152614a288161479f565b9050919050565b60006020820190508181036000830152614a48816147c2565b9050919050565b60006020820190508181036000830152614a68816147e5565b9050919050565b60006020820190508181036000830152614a8881614808565b9050919050565b60006020820190508181036000830152614aa88161482b565b9050919050565b60006020820190508181036000830152614ac88161484e565b9050919050565b60006020820190508181036000830152614ae881614871565b9050919050565b60006020820190508181036000830152614b0881614894565b9050919050565b60006020820190508181036000830152614b28816148b7565b9050919050565b60006020820190508181036000830152614b48816148da565b9050919050565b60006020820190508181036000830152614b68816148fd565b9050919050565b60006020820190508181036000830152614b8881614920565b9050919050565b6000602082019050614ba46000830184614943565b92915050565b600060a082019050614bbf6000830188614943565b614bcc6020830187614734565b8181036040830152614bde81866146b8565b9050614bed60608301856146a9565b614bfa6080830184614943565b9695505050505050565b6000602082019050614c196000830184614952565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614c7f82614dd9565b9150614c8a83614dd9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cbf57614cbe614ee6565b5b828201905092915050565b6000614cd582614dd9565b9150614ce083614dd9565b925082614cf057614cef614f15565b5b828204905092915050565b6000614d0682614dd9565b9150614d1183614dd9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4a57614d49614ee6565b5b828202905092915050565b6000614d6082614dd9565b9150614d6b83614dd9565b925082821015614d7e57614d7d614ee6565b5b828203905092915050565b6000614d9482614db9565b9050919050565b6000614da682614db9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614dfb82614e14565b9050919050565b6000614e0d82614dd9565b9050919050565b6000614e1f82614e26565b9050919050565b6000614e3182614db9565b9050919050565b60005b83811015614e56578082015181840152602081019050614e3b565b83811115614e65576000848401525b50505050565b60006002820490506001821680614e8357607f821691505b60208210811415614e9757614e96614f44565b5b50919050565b6000614ea882614dd9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614edb57614eda614ee6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61539e81614d89565b81146153a957600080fd5b50565b6153b581614d9b565b81146153c057600080fd5b50565b6153cc81614dad565b81146153d757600080fd5b50565b6153e381614dd9565b81146153ee57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203941607bf4482eac64e124fe56191b915e625be7c724c299b675e7660096717964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102975760003560e01c806357e0a1d01161015a578063a3864430116100c1578063d54994db1161007a578063d54994db14610a4d578063dab522a814610a76578063dd62ed3e14610a9f578063ea2f0b3714610adc578063f2fde38b14610b05578063ff89757014610b2e5761029e565b8063a386443014610927578063a457c2d714610952578063a9059cbb1461098f578063bc951f98146109cc578063c537bd8f146109f7578063cba851b314610a225761029e565b806388f820201161011357806388f82020146108155780638da5cb5b1461085257806395d89b411461087d5780639f646214146108a8578063a062e3ba146108d3578063a08f6760146108fe5761029e565b806357e0a1d0146107175780636c0a24eb1461074057806370a082311461076b578063715018a6146107a857806375f0a874146107bf5780637d1db4a5146107ea5761029e565b80632d838119116101fe5780634549b039116101b75780634549b039146105f757806349bd5a5e146106345780634a49ac4c1461065f57806350a4b72e1461068857806352390c02146106b15780635342acb4146106da5761029e565b80632d838119146104d5578063313ce567146105125780633685d4191461053d57806339509351146105665780633b124fe7146105a3578063437823ec146105ce5761029e565b80631cdd3be3116102505780631cdd3be3146103b55780631ff53b60146103f257806322976e0d1461041b57806323b872dd146104465780632663236f146104835780632a7d0d33146104ac5761029e565b806306fdde03146102a3578063095ea7b3146102ce57806313114a9d1461030b5780631694505e1461033657806318160ddd146103615780631bbae6e01461038c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b57565b6040516102c591906149cd565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f0919061454c565b610be9565b6040516103029190614997565b60405180910390f35b34801561031757600080fd5b50610320610c07565b60405161032d9190614b8f565b60405180910390f35b34801561034257600080fd5b5061034b610c11565b60405161035891906149b2565b60405180910390f35b34801561036d57600080fd5b50610376610c35565b6040516103839190614b8f565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190614606565b610c3f565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190614432565b610cc5565b6040516103e99190614997565b60405180910390f35b3480156103fe57600080fd5b506104196004803603810190610414919061448c565b610ce5565b005b34801561042757600080fd5b50610430610da5565b60405161043d9190614b8f565b60405180910390f35b34801561045257600080fd5b5061046d600480360381019061046891906144f9565b610dab565b60405161047a9190614997565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a591906145d9565b610e84565b005b3480156104b857600080fd5b506104d360048036038101906104ce9190614606565b610f54565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190614606565b610fda565b6040516105099190614b8f565b60405180910390f35b34801561051e57600080fd5b50610527611048565b6040516105349190614c04565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f9190614432565b61105e565b005b34801561057257600080fd5b5061058d6004803603810190610588919061454c565b611394565b60405161059a9190614997565b60405180910390f35b3480156105af57600080fd5b506105b8611447565b6040516105c59190614b8f565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f09190614432565b61144d565b005b34801561060357600080fd5b5061061e60048036038101906106199190614633565b611524565b60405161062b9190614b8f565b60405180910390f35b34801561064057600080fd5b506106496115a8565b6040516106569190614961565b60405180910390f35b34801561066b57600080fd5b5061068660048036038101906106819190614432565b6115cc565b005b34801561069457600080fd5b506106af60048036038101906106aa9190614606565b6116a3565b005b3480156106bd57600080fd5b506106d860048036038101906106d39190614432565b611738565b005b3480156106e657600080fd5b5061070160048036038101906106fc9190614432565b6119d3565b60405161070e9190614997565b60405180910390f35b34801561072357600080fd5b5061073e600480360381019061073991906145d9565b611a29565b005b34801561074c57600080fd5b50610755611ac2565b6040516107629190614b8f565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190614432565b611ac8565b60405161079f9190614b8f565b60405180910390f35b3480156107b457600080fd5b506107bd611bb3565b005b3480156107cb57600080fd5b506107d4611ced565b6040516107e1919061497c565b60405180910390f35b3480156107f657600080fd5b506107ff611d13565b60405161080c9190614b8f565b60405180910390f35b34801561082157600080fd5b5061083c60048036038101906108379190614432565b611d19565b6040516108499190614997565b60405180910390f35b34801561085e57600080fd5b50610867611d6f565b6040516108749190614961565b60405180910390f35b34801561088957600080fd5b50610892611d98565b60405161089f91906149cd565b60405180910390f35b3480156108b457600080fd5b506108bd611e2a565b6040516108ca9190614b8f565b60405180910390f35b3480156108df57600080fd5b506108e8611e30565b6040516108f59190614997565b60405180910390f35b34801561090a57600080fd5b5061092560048036038101906109209190614606565b611e43565b005b34801561093357600080fd5b5061093c611ed8565b6040516109499190614b8f565b60405180910390f35b34801561095e57600080fd5b506109796004803603810190610974919061454c565b611ede565b6040516109869190614997565b60405180910390f35b34801561099b57600080fd5b506109b660048036038101906109b1919061454c565b611fab565b6040516109c39190614997565b60405180910390f35b3480156109d857600080fd5b506109e1611fc9565b6040516109ee9190614b8f565b60405180910390f35b348015610a0357600080fd5b50610a0c611fcf565b604051610a199190614997565b60405180910390f35b348015610a2e57600080fd5b50610a37611fe2565b604051610a449190614b8f565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f9190614606565b611fe8565b005b348015610a8257600080fd5b50610a9d6004803603810190610a989190614606565b61207d565b005b348015610aab57600080fd5b50610ac66004803603810190610ac191906144b9565b612103565b604051610ad39190614b8f565b60405180910390f35b348015610ae857600080fd5b50610b036004803603810190610afe9190614432565b61218a565b005b348015610b1157600080fd5b50610b2c6004803603810190610b279190614432565b612261565b005b348015610b3a57600080fd5b50610b556004803603810190610b50919061458c565b61240a565b005b606060018054610b6690614e6b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9290614e6b565b8015610bdf5780601f10610bb457610100808354040283529160200191610bdf565b820191906000526020600020905b815481529060010190602001808311610bc257829003601f168201915b5050505050905090565b6000610bfd610bf661253f565b8484612547565b6001905092915050565b6000601954905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600354905090565b610c4761253f565b73ffffffffffffffffffffffffffffffffffffffff16610c65611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290614aef565b60405180910390fd5b80600e8190555050565b60176020528060005260406000206000915054906101000a900460ff1681565b610ced61253f565b73ffffffffffffffffffffffffffffffffffffffff16610d0b611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5890614aef565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6000610db8848484612712565b610e7984610dc461253f565b610e74856040518060600160405280602881526020016153f260289139601460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e2a61253f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c289092919063ffffffff16565b612547565b600190509392505050565b610e8c61253f565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614aef565b60405180910390fd5b80601b60016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610f499190614997565b60405180910390a150565b610f5c61253f565b73ffffffffffffffffffffffffffffffffffffffff16610f7a611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790614aef565b60405180910390fd5b80600f8190555050565b6000601a54821115611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890614a0f565b60405180910390fd5b600061102b612c7d565b9050611040818461252990919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b61106661253f565b73ffffffffffffffffffffffffffffffffffffffff16611084611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190614aef565b60405180910390fd5b601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614a6f565b60405180910390fd5b60005b601880549050811015611390578173ffffffffffffffffffffffffffffffffffffffff16601882815481106111a1576111a0614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561137d57601860016018805490506111fc9190614d55565b8154811061120d5761120c614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166018828154811061124c5761124b614fa2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601880548061134357611342614f73565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611390565b808061138890614e9d565b915050611169565b5050565b600061143d6113a161253f565b8461143885601460006113b261253f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b612547565b6001905092915050565b60065481565b61145561253f565b73ffffffffffffffffffffffffffffffffffffffff16611473611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090614aef565b60405180910390fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060035483111561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290614aaf565b60405180910390fd5b8161158b57600061157b84612cbe565b50505050509050809150506115a2565b600061159684612cbe565b50505050915050809150505b92915050565b7f0000000000000000000000005b44b8d4947309f2ca834f019783f45fb8150b7881565b6115d461253f565b73ffffffffffffffffffffffffffffffffffffffff166115f2611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f90614aef565b60405180910390fd5b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116ab61253f565b73ffffffffffffffffffffffffffffffffffffffff166116c9611d6f565b73ffffffffffffffffffffffffffffffffffffffff161461171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171690614aef565b60405180910390fd5b60055481111561172e57600080fd5b8060068190555050565b61174061253f565b73ffffffffffffffffffffffffffffffffffffffff1661175e611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab90614aef565b60405180910390fd5b601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183890614a6f565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611915576118d1601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fda565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611a3161253f565b73ffffffffffffffffffffffffffffffffffffffff16611a4f611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90614aef565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b600f5481565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b6357601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611bae565b611bab601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fda565b90505b919050565b611bbb61253f565b73ffffffffffffffffffffffffffffffffffffffff16611bd9611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690614aef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611da790614e6b565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd390614e6b565b8015611e205780601f10611df557610100808354040283529160200191611e20565b820191906000526020600020905b815481529060010190602001808311611e0357829003601f168201915b5050505050905090565b60095481565b601b60019054906101000a900460ff1681565b611e4b61253f565b73ffffffffffffffffffffffffffffffffffffffff16611e69611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614aef565b60405180910390fd5b600854811115611ece57600080fd5b80600c8190555050565b60105481565b6000611fa1611eeb61253f565b84611f9c8560405180606001604052806025815260200161541a6025913960146000611f1561253f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c289092919063ffffffff16565b612547565b6001905092915050565b6000611fbf611fb861253f565b8484612712565b6001905092915050565b600c5481565b600d60009054906101000a900460ff1681565b60045481565b611ff061253f565b73ffffffffffffffffffffffffffffffffffffffff1661200e611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90614aef565b60405180910390fd5b60085481111561207357600080fd5b8060098190555050565b61208561253f565b73ffffffffffffffffffffffffffffffffffffffff166120a3611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090614aef565b60405180910390fd5b8060108190555050565b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61219261253f565b73ffffffffffffffffffffffffffffffffffffffff166121b0611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90614aef565b60405180910390fd5b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61226961253f565b73ffffffffffffffffffffffffffffffffffffffff16612287611d6f565b73ffffffffffffffffffffffffffffffffffffffff16146122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490614aef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490614a2f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61241261253f565b73ffffffffffffffffffffffffffffffffffffffff16612430611d6f565b73ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90614aef565b60405180910390fd5b60005b82829050811015612524576001601760008585858181106124ad576124ac614fa2565b5b90506020020160208101906124c29190614432565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061251d90614e9d565b9050612489565b505050565b600081836125379190614cca565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90614b6f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90614a4f565b60405180910390fd5b80601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127059190614b8f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614b2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e9906149ef565b60405180910390fd5b60008111612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c90614b0f565b60405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128d95750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f90614a8f565b60405180910390fd5b612920611d6f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561298e575061295e611d6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a8557600e548111156129d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cf90614acf565b60405180910390fd5b7f0000000000000000000000005b44b8d4947309f2ca834f019783f45fb8150b7873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a8457600f5481612a3884611ac8565b612a429190614c74565b1115612a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7a90614b4f565b60405180910390fd5b5b5b6000612a9030611ac8565b905060006010548210159050600e548210612aab57600e5491505b808015612ac55750601b60009054906101000a900460ff16155b8015612b1d57507f0000000000000000000000005b44b8d4947309f2ca834f019783f45fb8150b7873ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b355750601b60019054906101000a900460ff165b15612b4457612b4382612d1a565b5b600d60009054906101000a900460ff1615612b6357612b6284613015565b5b600060019050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c0a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c1457600090505b612c2086868684613088565b505050505050565b6000838311158290612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6791906149cd565b60405180910390fd5b5082840390509392505050565b6000806000612c8a613399565b91509150612ca1818361252990919063ffffffff16565b9250505090565b60008183612cb69190614c74565b905092915050565b6000806000806000806000806000612cd58a61364c565b9250925092506000806000612cf38d8686612cee612c7d565b6136a6565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601b60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612d5257612d51614fd1565b5b604051908082528060200260200182016040528015612d805781602001602082028036833780820191505090505b5090503081600081518110612d9857612d97614fa2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612e3857600080fd5b505afa158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e70919061445f565b81600181518110612e8457612e83614fa2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ee9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612547565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f4b959493929190614baa565b600060405180830381600087803b158015612f6557600080fd5b505af1158015612f79573d6000803e3d6000fd5b5050505060004790506000811115612ff557601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ff3573d6000803e3d6000fd5b505b50506000601b60006101000a81548160ff02191690831515021790555050565b600454600681905550600954600a819055507f0000000000000000000000005b44b8d4947309f2ca834f019783f45fb8150b7873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561308557600c54600a819055505b50565b806130965761309561372f565b5b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131395750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561314e57613149848484613772565b613385565b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131f15750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613206576132018484846139d2565b613384565b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132aa5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132bf576132ba848484613c32565b613383565b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133615750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561337657613371848484613dfd565b613382565b613381848484613c32565b5b5b5b5b80613393576133926140f2565b5b50505050565b6000806000601a5490506000600354905060005b60188054905081101561360f578260126000601884815481106133d3576133d2614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134c1575081601360006018848154811061345957613458614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156134d857601a5460035494509450505050613648565b61356860126000601884815481106134f3576134f2614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461410690919063ffffffff16565b92506135fa601360006018848154811061358557613584614fa2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361410690919063ffffffff16565b9150808061360790614e9d565b9150506133ad565b50613627600354601a5461252990919063ffffffff16565b82101561363f57601a54600354935093505050613648565b81819350935050505b9091565b60008060008061365b8561411c565b905060006136688661414d565b9050600061369182613683858a61410690919063ffffffff16565b61410690919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806136bf858961417e90919063ffffffff16565b905060006136d6868961417e90919063ffffffff16565b905060006136ed878961417e90919063ffffffff16565b9050600061371682613708858761410690919063ffffffff16565b61410690919063ffffffff16565b9050838184965096509650505050509450945094915050565b600060065414801561374357506000600a54145b1561374d57613770565b600654600781905550600a54600b8190555060006006819055506000600a819055505b565b60008060008060008061378487612cbe565b9550955095509550955095506137e287601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061387786601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061390c85601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395881614194565b6139628483614339565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516139bf9190614b8f565b60405180910390a3505050505050505050565b6000806000806000806139e487612cbe565b955095509550955095509550613a4286601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ad783601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b6c85601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bb881614194565b613bc28483614339565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c1f9190614b8f565b60405180910390a3505050505050505050565b600080600080600080613c4487612cbe565b955095509550955095509550613ca286601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d3785601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8381614194565b613d8d8483614339565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613dea9190614b8f565b60405180910390a3505050505050505050565b600080600080600080613e0f87612cbe565b955095509550955095509550613e6d87601360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0286601260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461410690919063ffffffff16565b601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f9783601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402c85601260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061407881614194565b6140828483614339565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140df9190614b8f565b60405180910390a3505050505050505050565b600754600681905550600b54600a81905550565b600081836141149190614d55565b905092915050565b600061414660646141386006548561417e90919063ffffffff16565b61252990919063ffffffff16565b9050919050565b60006141776064614169600a548561417e90919063ffffffff16565b61252990919063ffffffff16565b9050919050565b6000818361418c9190614cfb565b905092915050565b600061419e612c7d565b905060006141b5828461417e90919063ffffffff16565b905061420981601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614334576142f083601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ca890919063ffffffff16565b601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61434e82601a5461410690919063ffffffff16565b601a8190555061436981601954612ca890919063ffffffff16565b6019819055505050565b60008135905061438281615395565b92915050565b60008151905061439781615395565b92915050565b6000813590506143ac816153ac565b92915050565b60008083601f8401126143c8576143c7615005565b5b8235905067ffffffffffffffff8111156143e5576143e4615000565b5b6020830191508360208202830111156144015761440061500a565b5b9250929050565b600081359050614417816153c3565b92915050565b60008135905061442c816153da565b92915050565b60006020828403121561444857614447615014565b5b600061445684828501614373565b91505092915050565b60006020828403121561447557614474615014565b5b600061448384828501614388565b91505092915050565b6000602082840312156144a2576144a1615014565b5b60006144b08482850161439d565b91505092915050565b600080604083850312156144d0576144cf615014565b5b60006144de85828601614373565b92505060206144ef85828601614373565b9150509250929050565b60008060006060848603121561451257614511615014565b5b600061452086828701614373565b935050602061453186828701614373565b92505060406145428682870161441d565b9150509250925092565b6000806040838503121561456357614562615014565b5b600061457185828601614373565b92505060206145828582860161441d565b9150509250929050565b600080602083850312156145a3576145a2615014565b5b600083013567ffffffffffffffff8111156145c1576145c061500f565b5b6145cd858286016143b2565b92509250509250929050565b6000602082840312156145ef576145ee615014565b5b60006145fd84828501614408565b91505092915050565b60006020828403121561461c5761461b615014565b5b600061462a8482850161441d565b91505092915050565b6000806040838503121561464a57614649615014565b5b60006146588582860161441d565b925050602061466985828601614408565b9150509250929050565b600061467f838361469a565b60208301905092915050565b61469481614d9b565b82525050565b6146a381614d89565b82525050565b6146b281614d89565b82525050565b60006146c382614c2f565b6146cd8185614c52565b93506146d883614c1f565b8060005b838110156147095781516146f08882614673565b97506146fb83614c45565b9250506001810190506146dc565b5085935050505092915050565b61471f81614dad565b82525050565b61472e81614df0565b82525050565b61473d81614e02565b82525050565b600061474e82614c3a565b6147588185614c63565b9350614768818560208601614e38565b61477181615019565b840191505092915050565b6000614789602383614c63565b91506147948261502a565b604082019050919050565b60006147ac602a83614c63565b91506147b782615079565b604082019050919050565b60006147cf602683614c63565b91506147da826150c8565b604082019050919050565b60006147f2602283614c63565b91506147fd82615117565b604082019050919050565b6000614815601b83614c63565b915061482082615166565b602082019050919050565b6000614838601b83614c63565b91506148438261518f565b602082019050919050565b600061485b601f83614c63565b9150614866826151b8565b602082019050919050565b600061487e602883614c63565b9150614889826151e1565b604082019050919050565b60006148a1602083614c63565b91506148ac82615230565b602082019050919050565b60006148c4602983614c63565b91506148cf82615259565b604082019050919050565b60006148e7602583614c63565b91506148f2826152a8565b604082019050919050565b600061490a602383614c63565b9150614915826152f7565b604082019050919050565b600061492d602483614c63565b915061493882615346565b604082019050919050565b61494c81614dd9565b82525050565b61495b81614de3565b82525050565b600060208201905061497660008301846146a9565b92915050565b6000602082019050614991600083018461468b565b92915050565b60006020820190506149ac6000830184614716565b92915050565b60006020820190506149c76000830184614725565b92915050565b600060208201905081810360008301526149e78184614743565b905092915050565b60006020820190508181036000830152614a088161477c565b9050919050565b60006020820190508181036000830152614a288161479f565b9050919050565b60006020820190508181036000830152614a48816147c2565b9050919050565b60006020820190508181036000830152614a68816147e5565b9050919050565b60006020820190508181036000830152614a8881614808565b9050919050565b60006020820190508181036000830152614aa88161482b565b9050919050565b60006020820190508181036000830152614ac88161484e565b9050919050565b60006020820190508181036000830152614ae881614871565b9050919050565b60006020820190508181036000830152614b0881614894565b9050919050565b60006020820190508181036000830152614b28816148b7565b9050919050565b60006020820190508181036000830152614b48816148da565b9050919050565b60006020820190508181036000830152614b68816148fd565b9050919050565b60006020820190508181036000830152614b8881614920565b9050919050565b6000602082019050614ba46000830184614943565b92915050565b600060a082019050614bbf6000830188614943565b614bcc6020830187614734565b8181036040830152614bde81866146b8565b9050614bed60608301856146a9565b614bfa6080830184614943565b9695505050505050565b6000602082019050614c196000830184614952565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614c7f82614dd9565b9150614c8a83614dd9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cbf57614cbe614ee6565b5b828201905092915050565b6000614cd582614dd9565b9150614ce083614dd9565b925082614cf057614cef614f15565b5b828204905092915050565b6000614d0682614dd9565b9150614d1183614dd9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d4a57614d49614ee6565b5b828202905092915050565b6000614d6082614dd9565b9150614d6b83614dd9565b925082821015614d7e57614d7d614ee6565b5b828203905092915050565b6000614d9482614db9565b9050919050565b6000614da682614db9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614dfb82614e14565b9050919050565b6000614e0d82614dd9565b9050919050565b6000614e1f82614e26565b9050919050565b6000614e3182614db9565b9050919050565b60005b83811015614e56578082015181840152602081019050614e3b565b83811115614e65576000848401525b50505050565b60006002820490506001821680614e8357607f821691505b60208210811415614e9757614e96614f44565b5b50919050565b6000614ea882614dd9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614edb57614eda614ee6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61539e81614d89565b81146153a957600080fd5b50565b6153b581614d9b565b81146153c057600080fd5b50565b6153cc81614dad565b81146153d757600080fd5b50565b6153e381614dd9565b81146153ee57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203941607bf4482eac64e124fe56191b915e625be7c724c299b675e7660096717964736f6c63430008070033

Deployed Bytecode Sourcemap

27873:18774:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30886:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31798:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32919:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29858:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31163:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46532:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29626:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46261:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28661:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31967:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45891:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46390:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33458:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31072:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34174:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32288:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28411:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34661:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33014:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29916:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35698:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45606:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33719:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38456:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45752:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29041:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31266:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19357:148;;;;;;;;;;;;;:::i;:::-;;29216:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28989:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32791:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18714:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30977;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28615:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29988:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45388:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29142:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32514:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31472:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28778:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28910;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28332:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45201:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46063:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31647:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34782:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19657:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35496:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30886:83;30923:13;30956:5;30949:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30886:83;:::o;31798:161::-;31873:4;31890:39;31899:12;:10;:12::i;:::-;31913:7;31922:6;31890:8;:39::i;:::-;31947:4;31940:11;;31798:161;;;;:::o;32919:87::-;32961:7;32988:10;;32981:17;;32919:87;:::o;29858:51::-;;;:::o;31163:95::-;31216:7;31243;;31236:14;;31163:95;:::o;46532:112::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46625:11:::1;46610:12;:26;;;;46532:112:::0;:::o;29626:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;46261:117::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46364:6:::1;46346:15;;:24;;;;;;;;;;;;;;;;;;46261:117:::0;:::o;28661:50::-;;;;:::o;31967:313::-;32065:4;32082:36;32092:6;32100:9;32111:6;32082:9;:36::i;:::-;32129:121;32138:6;32146:12;:10;:12::i;:::-;32160:89;32198:6;32160:89;;;;;;;;;;;;;;;;;:11;:19;32172:6;32160:19;;;;;;;;;;;;;;;:33;32180:12;:10;:12::i;:::-;32160:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32129:8;:121::i;:::-;32268:4;32261:11;;31967:313;;;;;:::o;45891:164::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45988:8:::1;45967:18;;:29;;;;;;;;;;;;;;;;;;46012:35;46038:8;46012:35;;;;;;:::i;:::-;;;;;;;;45891:164:::0;:::o;46390:128::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46495:15:::1;46476:16;:34;;;;46390:128:::0;:::o;33458:253::-;33524:7;33563;;33552;:18;;33544:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33628:19;33651:10;:8;:10::i;:::-;33628:33;;33679:24;33691:11;33679:7;:11;;:24;;;;:::i;:::-;33672:31;;;33458:253;;;:::o;31072:83::-;31113:5;31138:9;;;;;;;;;;;31131:16;;31072:83;:::o;34174:479::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34256:11:::1;:20;34268:7;34256:20;;;;;;;;;;;;;;;;;;;;;;;;;34248:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34324:9;34319:327;34343:9;:16;;;;34339:1;:20;34319:327;;;34401:7;34385:23;;:9;34395:1;34385:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;34381:254;;;34444:9;34473:1;34454:9;:16;;;;:20;;;;:::i;:::-;34444:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34429:9;34439:1;34429:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34513:1;34494:7;:16;34502:7;34494:16;;;;;;;;;;;;;;;:20;;;;34556:5;34533:11;:20;34545:7;34533:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34580:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34614:5;;34381:254;34361:3;;;;;:::i;:::-;;;;34319:327;;;;34174:479:::0;:::o;32288:218::-;32376:4;32393:83;32402:12;:10;:12::i;:::-;32416:7;32425:50;32464:10;32425:11;:25;32437:12;:10;:12::i;:::-;32425:25;;;;;;;;;;;;;;;:34;32451:7;32425:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32393:8;:83::i;:::-;32494:4;32487:11;;32288:218;;;;:::o;28411:38::-;;;;:::o;34661:113::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34762:4:::1;34732:18;:27;34751:7;34732:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34661:113:::0;:::o;33014:436::-;33104:7;33143;;33132;:18;;33124:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33202:17;33197:246;;33237:15;33261:19;33272:7;33261:10;:19::i;:::-;33236:44;;;;;;;33302:7;33295:14;;;;;33197:246;33344:23;33375:19;33386:7;33375:10;:19::i;:::-;33342:52;;;;;;;33416:15;33409:22;;;33014:436;;;;;:::o;29916:38::-;;;:::o;35698:115::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35800:5:::1;35774:14;:23;35789:7;35774:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;35698:115:::0;:::o;45606:138::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45695:13:::1;;45685:6;:23;;45677:32;;;::::0;::::1;;45730:6;45720:7;:16;;;;45606:138:::0;:::o;33719:447::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33916:11:::1;:20;33928:7;33916:20;;;;;;;;;;;;;;;;;;;;;;;;;33915:21;33907:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34001:1;33982:7;:16;33990:7;33982:16;;;;;;;;;;;;;;;;:20;33979:108;;;34038:37;34058:7;:16;34066:7;34058:16;;;;;;;;;;;;;;;;34038:19;:37::i;:::-;34019:7;:16;34027:7;34019:16;;;;;;;;;;;;;;;:56;;;;33979:108;34120:4;34097:11;:20;34109:7;34097:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34135:9;34150:7;34135:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33719:447:::0;:::o;38456:123::-;38520:4;38544:18;:27;38563:7;38544:27;;;;;;;;;;;;;;;;;;;;;;;;;38537:34;;38456:123;;;:::o;45752:131::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45867:8:::1;45842:22;;:33;;;;;;;;;;;;;;;;;;45752:131:::0;:::o;29041:54::-;;;;:::o;31266:198::-;31332:7;31356:11;:20;31368:7;31356:20;;;;;;;;;;;;;;;;;;;;;;;;;31352:49;;;31385:7;:16;31393:7;31385:16;;;;;;;;;;;;;;;;31378:23;;;;31352:49;31419:37;31439:7;:16;31447:7;31439:16;;;;;;;;;;;;;;;;31419:19;:37::i;:::-;31412:44;;31266:198;;;;:::o;19357:148::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19464:1:::1;19427:40;;19448:6;::::0;::::1;;;;;;;;19427:40;;;;;;;;;;;;19495:1;19478:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;19357:148::o:0;29216:92::-;;;;;;;;;;;;;:::o;28989:41::-;;;;:::o;32791:120::-;32859:4;32883:11;:20;32895:7;32883:20;;;;;;;;;;;;;;;;;;;;;;;;;32876:27;;32791:120;;;:::o;18714:87::-;18760:7;18787:6;;;;;;;;;;;18780:13;;18714:87;:::o;30977:::-;31016:13;31049:7;31042:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30977:87;:::o;28615:39::-;;;;:::o;29988:37::-;;;;;;;;;;;;;:::o;45388:206::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45515:15:::1;;45491:20;:39;;45483:48;;;::::0;::::1;;45566:20;45542:21;:44;;;;45388:206:::0;:::o;29142:67::-;;;;:::o;32514:269::-;32607:4;32624:129;32633:12;:10;:12::i;:::-;32647:7;32656:96;32695:15;32656:96;;;;;;;;;;;;;;;;;:11;:25;32668:12;:10;:12::i;:::-;32656:25;;;;;;;;;;;;;;;:34;32682:7;32656:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;32624:8;:129::i;:::-;32771:4;32764:11;;32514:269;;;;:::o;31472:167::-;31550:4;31567:42;31577:12;:10;:12::i;:::-;31591:9;31602:6;31567:9;:42::i;:::-;31627:4;31620:11;;31472:167;;;;:::o;28778:41::-;;;;:::o;28910:::-;;;;;;;;;;;;;:::o;28332:32::-;;;;:::o;45201:179::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45311:15:::1;;45295:12;:31;;45287:40;;;::::0;::::1;;45360:12;45338:19;:34;;;;45201:179:::0;:::o;46063:190::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46213:32:::1;46179:31;:66;;;;46063:190:::0;:::o;31647:143::-;31728:7;31755:11;:18;31767:5;31755:18;;;;;;;;;;;;;;;:27;31774:7;31755:27;;;;;;;;;;;;;;;;31748:34;;31647:143;;;;:::o;34782:112::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34881:5:::1;34851:18;:27;34870:7;34851:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34782:112:::0;:::o;19657:244::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19766:1:::1;19746:22;;:8;:22;;;;19738:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19856:8;19827:38;;19848:6;::::0;::::1;;;;;;;;19827:38;;;;;;;;;;;;19885:8;19876:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;19657:244:::0;:::o;35496:188::-;18943:12;:10;:12::i;:::-;18932:23;;:7;:5;:7::i;:::-;:23;;;18924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35583:9:::1;35578:99;35598:9;;:16;;35594:1;:20;35578:99;;;35663:4;35632:14;:28;35647:9;;35657:1;35647:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;35632:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35616:3;;;;:::i;:::-;;;35578:99;;;;35496:188:::0;;:::o;5913:98::-;5971:7;6002:1;5998;:5;;;;:::i;:::-;5991:12;;5913:98;;;;:::o;9553:::-;9606:7;9633:10;9626:17;;9553:98;:::o;38587:337::-;38697:1;38680:19;;:5;:19;;;;38672:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38778:1;38759:21;;:7;:21;;;;38751:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38862:6;38832:11;:18;38844:5;38832:18;;;;;;;;;;;;;;;:27;38851:7;38832:27;;;;;;;;;;;;;;;:36;;;;38900:7;38884:32;;38893:5;38884:32;;;38909:6;38884:32;;;;;;:::i;:::-;;;;;;;;38587:337;;;:::o;38932:1994::-;39070:1;39054:18;;:4;:18;;;;39046:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39147:1;39133:16;;:2;:16;;;;39125:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39217:1;39208:6;:10;39200:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39284:14;:20;39299:4;39284:20;;;;;;;;;;;;;;;;;;;;;;;;;39283:21;:44;;;;;39309:14;:18;39324:2;39309:18;;;;;;;;;;;;;;;;;;;;;;;;;39308:19;39283:44;39275:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;39383:7;:5;:7::i;:::-;39375:15;;:4;:15;;;;:32;;;;;39400:7;:5;:7::i;:::-;39394:13;;:2;:13;;;;39375:32;39372:307;;;39442:12;;39432:6;:22;;39424:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39537:13;39531:19;;:2;:19;;;39528:149;;39605:16;;39595:6;39579:13;39589:2;39579:9;:13::i;:::-;:22;;;;:::i;:::-;:42;;39571:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;39528:149;39372:307;40003:28;40034:24;40052:4;40034:9;:24::i;:::-;40003:55;;40069:24;40120:31;;40096:20;:55;;40069:82;;40191:12;;40167:20;:36;40164:112;;40252:12;;40229:35;;40164:112;40306:19;:50;;;;;40343:13;;;;;;;;;;;40342:14;40306:50;:88;;;;;40381:13;40373:21;;:4;:21;;;;40306:88;:123;;;;;40411:18;;;;;;;;;;;40306:123;40288:213;;;40456:33;40468:20;40456:11;:33::i;:::-;40288:213;40516:22;;;;;;;;;;;40513:65;;;40555:11;40563:2;40555:7;:11::i;:::-;40513:65;40651:12;40666:4;40651:19;;40770:18;:24;40789:4;40770:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;40798:18;:22;40817:2;40798:22;;;;;;;;;;;;;;;;;;;;;;;;;40770:50;40767:97;;;40847:5;40837:15;;40767:97;40876:38;40891:4;40896:2;40899:6;40906:7;40876:14;:38::i;:::-;39035:1891;;;38932:1994;;;:::o;7032:206::-;7118:7;7176:1;7171;:6;;7179:12;7163:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7218:1;7214;:5;7207:12;;7032:206;;;;;:::o;37023:163::-;37064:7;37085:15;37102;37121:19;:17;:19::i;:::-;37084:56;;;;37158:20;37170:7;37158;:11;;:20;;;;:::i;:::-;37151:27;;;;37023:163;:::o;5592:98::-;5650:7;5681:1;5677;:5;;;;:::i;:::-;5670:12;;5592:98;;;;:::o;35821:419::-;35880:7;35889;35898;35907;35916;35925;35946:23;35971:12;35985:18;36007:20;36019:7;36007:11;:20::i;:::-;35945:82;;;;;;36039:15;36056:23;36081:12;36097:50;36109:7;36118:4;36124:10;36136;:8;:10::i;:::-;36097:11;:50::i;:::-;36038:109;;;;;;36166:7;36175:15;36192:4;36198:15;36215:4;36221:10;36158:74;;;;;;;;;;;;;;;;;;35821:419;;;;;;;:::o;41194:794::-;30136:4;30120:13;;:20;;;;;;;;;;;;;;;;;;41336:21:::1;41374:1;41360:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41336:40;;41405:4;41387;41392:1;41387:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;41431:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41421:4;41426:1;41421:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;41466:71;41483:4;41498:15;41516:20;41466:8;:71::i;:::-;41576:15;:66;;;41657:20;41692:1;41736:4;41763;41783:15;41576:233;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41822:26;41851:21;41822:50;;41907:1;41886:18;:22;41883:98;;;41925:15;;;;;;;;;;;:24;;:44;41950:18;41925:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41883:98;41265:723;;30179:5:::0;30163:13;;:21;;;;;;;;;;;;;;;;;;41194:794;:::o;40940:246::-;41005:13;;40995:7;:23;;;;41045:19;;41029:13;:35;;;;41092:13;41079:26;;:9;:26;;;41075:104;;;41146:21;;41130:13;:37;;;;41075:104;40940:246;:::o;42069:818::-;42180:7;42176:40;;42202:14;:12;:14::i;:::-;42176:40;42233:11;:19;42245:6;42233:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;42257:11;:22;42269:9;42257:22;;;;;;;;;;;;;;;;;;;;;;;;;42256:23;42233:46;42229:597;;;42296:48;42318:6;42326:9;42337:6;42296:21;:48::i;:::-;42229:597;;;42367:11;:19;42379:6;42367:19;;;;;;;;;;;;;;;;;;;;;;;;;42366:20;:46;;;;;42390:11;:22;42402:9;42390:22;;;;;;;;;;;;;;;;;;;;;;;;;42366:46;42362:464;;;42429:46;42449:6;42457:9;42468:6;42429:19;:46::i;:::-;42362:464;;;42498:11;:19;42510:6;42498:19;;;;;;;;;;;;;;;;;;;;;;;;;42497:20;:47;;;;;42522:11;:22;42534:9;42522:22;;;;;;;;;;;;;;;;;;;;;;;;;42521:23;42497:47;42493:333;;;42561:44;42579:6;42587:9;42598:6;42561:17;:44::i;:::-;42493:333;;;42627:11;:19;42639:6;42627:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42650:11;:22;42662:9;42650:22;;;;;;;;;;;;;;;;;;;;;;;;;42627:45;42623:203;;;42689:48;42711:6;42719:9;42730:6;42689:21;:48::i;:::-;42623:203;;;42770:44;42788:6;42796:9;42807:6;42770:17;:44::i;:::-;42623:203;42493:333;42362:464;42229:597;42842:7;42838:41;;42864:15;:13;:15::i;:::-;42838:41;42069:818;;;;:::o;37194:555::-;37244:7;37253;37273:15;37291:7;;37273:25;;37309:15;37327:7;;37309:25;;37350:9;37345:289;37369:9;:16;;;;37365:1;:20;37345:289;;;37435:7;37411;:21;37419:9;37429:1;37419:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37411:21;;;;;;;;;;;;;;;;:31;:66;;;;37470:7;37446;:21;37454:9;37464:1;37454:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37446:21;;;;;;;;;;;;;;;;:31;37411:66;37407:97;;;37487:7;;37496;;37479:25;;;;;;;;;37407:97;37529:34;37541:7;:21;37549:9;37559:1;37549:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37541:21;;;;;;;;;;;;;;;;37529:7;:11;;:34;;;;:::i;:::-;37519:44;;37588:34;37600:7;:21;37608:9;37618:1;37608:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37600:21;;;;;;;;;;;;;;;;37588:7;:11;;:34;;;;:::i;:::-;37578:44;;37387:3;;;;;:::i;:::-;;;;37345:289;;;;37658:20;37670:7;;37658;;:11;;:20;;;;:::i;:::-;37648:7;:30;37644:61;;;37688:7;;37697;;37680:25;;;;;;;;37644:61;37724:7;37733;37716:25;;;;;;37194:555;;;:::o;36248:330::-;36308:7;36317;36326;36346:12;36361:24;36377:7;36361:15;:24::i;:::-;36346:39;;36396:18;36417:30;36439:7;36417:21;:30::i;:::-;36396:51;;36458:23;36484:33;36506:10;36484:17;36496:4;36484:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36458:59;;36536:15;36553:4;36559:10;36528:42;;;;;;;;;36248:330;;;;;:::o;36586:429::-;36701:7;36710;36719;36739:15;36757:24;36769:11;36757:7;:11;;:24;;;;:::i;:::-;36739:42;;36792:12;36807:21;36816:11;36807:4;:8;;:21;;;;:::i;:::-;36792:36;;36839:18;36860:27;36875:11;36860:10;:14;;:27;;;;:::i;:::-;36839:48;;36898:23;36924:33;36946:10;36924:17;36936:4;36924:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36898:59;;36976:7;36985:15;37002:4;36968:39;;;;;;;;;;36586:429;;;;;;;;:::o;34902:234::-;34959:1;34948:7;;:12;:34;;;;;34981:1;34964:13;;:18;34948:34;34945:46;;;34984:7;;34945:46;35021:7;;35003:15;:25;;;;35063:13;;35039:21;:37;;;;35099:1;35089:7;:11;;;;35127:1;35111:13;:17;;;;34902:234;:::o;43988:563::-;44091:15;44108:23;44133:12;44147:23;44172:12;44186:18;44208:19;44219:7;44208:10;:19::i;:::-;44090:137;;;;;;;;;;;;44256:28;44276:7;44256;:15;44264:6;44256:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44238:7;:15;44246:6;44238:15;;;;;;;;;;;;;;;:46;;;;44313:28;44333:7;44313;:15;44321:6;44313:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44295:7;:15;44303:6;44295:15;;;;;;;;;;;;;;;:46;;;;44373:39;44396:15;44373:7;:18;44381:9;44373:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44352:7;:18;44360:9;44352:18;;;;;;;;;;;;;;;:60;;;;44423:26;44438:10;44423:14;:26::i;:::-;44460:23;44472:4;44478;44460:11;:23::i;:::-;44516:9;44499:44;;44508:6;44499:44;;;44527:15;44499:44;;;;;;:::i;:::-;;;;;;;;44079:472;;;;;;43988:563;;;:::o;43405:575::-;43506:15;43523:23;43548:12;43562:23;43587:12;43601:18;43623:19;43634:7;43623:10;:19::i;:::-;43505:137;;;;;;;;;;;;43671:28;43691:7;43671;:15;43679:6;43671:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43653:7;:15;43661:6;43653:15;;;;;;;;;;;;;;;:46;;;;43731:39;43754:15;43731:7;:18;43739:9;43731:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43710:7;:18;43718:9;43710:18;;;;;;;;;;;;;;;:60;;;;43802:39;43825:15;43802:7;:18;43810:9;43802:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43781:7;:18;43789:9;43781:18;;;;;;;;;;;;;;;:60;;;;43852:26;43867:10;43852:14;:26::i;:::-;43889:23;43901:4;43907;43889:11;:23::i;:::-;43945:9;43928:44;;43937:6;43928:44;;;43956:15;43928:44;;;;;;:::i;:::-;;;;;;;;43494:486;;;;;;43405:575;;;:::o;42895:502::-;42994:15;43011:23;43036:12;43050:23;43075:12;43089:18;43111:19;43122:7;43111:10;:19::i;:::-;42993:137;;;;;;;;;;;;43159:28;43179:7;43159;:15;43167:6;43159:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43141:7;:15;43149:6;43141:15;;;;;;;;;;;;;;;:46;;;;43219:39;43242:15;43219:7;:18;43227:9;43219:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43198:7;:18;43206:9;43198:18;;;;;;;;;;;;;;;:60;;;;43269:26;43284:10;43269:14;:26::i;:::-;43306:23;43318:4;43324;43306:11;:23::i;:::-;43362:9;43345:44;;43354:6;43345:44;;;43373:15;43345:44;;;;;;:::i;:::-;;;;;;;;42982:415;;;;;;42895:502;;;:::o;44559:634::-;44662:15;44679:23;44704:12;44718:23;44743:12;44757:18;44779:19;44790:7;44779:10;:19::i;:::-;44661:137;;;;;;;;;;;;44827:28;44847:7;44827;:15;44835:6;44827:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44809:7;:15;44817:6;44809:15;;;;;;;;;;;;;;;:46;;;;44884:28;44904:7;44884;:15;44892:6;44884:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44866:7;:15;44874:6;44866:15;;;;;;;;;;;;;;;:46;;;;44944:39;44967:15;44944:7;:18;44952:9;44944:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44923:7;:18;44931:9;44923:18;;;;;;;;;;;;;;;:60;;;;45015:39;45038:15;45015:7;:18;45023:9;45015:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44994:7;:18;45002:9;44994:18;;;;;;;;;;;;;;;:60;;;;45065:26;45080:10;45065:14;:26::i;:::-;45102:23;45114:4;45120;45102:11;:23::i;:::-;45158:9;45141:44;;45150:6;45141:44;;;45169:15;45141:44;;;;;;:::i;:::-;;;;;;;;44650:543;;;;;;44559:634;;;:::o;35144:125::-;35198:15;;35188:7;:25;;;;35240:21;;35224:13;:37;;;;35144:125::o;5698:98::-;5756:7;5787:1;5783;:5;;;;:::i;:::-;5776:12;;5698:98;;;;:::o;38120:154::-;38184:7;38211:55;38250:5;38211:20;38223:7;;38211;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;38204:62;;38120:154;;;:::o;38282:166::-;38352:7;38379:61;38424:5;38379:26;38391:13;;38379:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;38372:68;;38282:166;;;:::o;5804:98::-;5862:7;5893:1;5889;:5;;;;:::i;:::-;5882:12;;5804:98;;;;:::o;37757:355::-;37820:19;37843:10;:8;:10::i;:::-;37820:33;;37864:18;37885:27;37900:11;37885:10;:14;;:27;;;;:::i;:::-;37864:48;;37948:38;37975:10;37948:7;:22;37964:4;37948:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37923:7;:22;37939:4;37923:22;;;;;;;;;;;;;;;:63;;;;38000:11;:26;38020:4;38000:26;;;;;;;;;;;;;;;;;;;;;;;;;37997:107;;;38066:38;38093:10;38066:7;:22;38082:4;38066:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;38041:7;:22;38057:4;38041:22;;;;;;;;;;;;;;;:63;;;;37997:107;37809:303;;37757:355;:::o;35336:147::-;35414:17;35426:4;35414:7;;:11;;:17;;;;:::i;:::-;35404:7;:27;;;;35455:20;35470:4;35455:10;;:14;;:20;;;;:::i;:::-;35442:10;:33;;;;35336:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;301:155;;;;:::o;479:568::-;552:8;562:6;612:3;605:4;597:6;593:17;589:27;579:122;;620:79;;:::i;:::-;579:122;733:6;720:20;710:30;;763:18;755:6;752:30;749:117;;;785:79;;:::i;:::-;749:117;899:4;891:6;887:17;875:29;;953:3;945:4;937:6;933:17;923:8;919:32;916:41;913:128;;;960:79;;:::i;:::-;913:128;479:568;;;;;:::o;1053:133::-;1096:5;1134:6;1121:20;1112:29;;1150:30;1174:5;1150:30;:::i;:::-;1053:133;;;;:::o;1192:139::-;1238:5;1276:6;1263:20;1254:29;;1292:33;1319:5;1292:33;:::i;:::-;1192:139;;;;:::o;1337:329::-;1396:6;1445:2;1433:9;1424:7;1420:23;1416:32;1413:119;;;1451:79;;:::i;:::-;1413:119;1571:1;1596:53;1641:7;1632:6;1621:9;1617:22;1596:53;:::i;:::-;1586:63;;1542:117;1337:329;;;;:::o;1672:351::-;1742:6;1791:2;1779:9;1770:7;1766:23;1762:32;1759:119;;;1797:79;;:::i;:::-;1759:119;1917:1;1942:64;1998:7;1989:6;1978:9;1974:22;1942:64;:::i;:::-;1932:74;;1888:128;1672:351;;;;:::o;2029:345::-;2096:6;2145:2;2133:9;2124:7;2120:23;2116:32;2113:119;;;2151:79;;:::i;:::-;2113:119;2271:1;2296:61;2349:7;2340:6;2329:9;2325:22;2296:61;:::i;:::-;2286:71;;2242:125;2029:345;;;;:::o;2380:474::-;2448:6;2456;2505:2;2493:9;2484:7;2480:23;2476:32;2473:119;;;2511:79;;:::i;:::-;2473:119;2631:1;2656:53;2701:7;2692:6;2681:9;2677:22;2656:53;:::i;:::-;2646:63;;2602:117;2758:2;2784:53;2829:7;2820:6;2809:9;2805:22;2784:53;:::i;:::-;2774:63;;2729:118;2380:474;;;;;:::o;2860:619::-;2937:6;2945;2953;3002:2;2990:9;2981:7;2977:23;2973:32;2970:119;;;3008:79;;:::i;:::-;2970:119;3128:1;3153:53;3198:7;3189:6;3178:9;3174:22;3153:53;:::i;:::-;3143:63;;3099:117;3255:2;3281:53;3326:7;3317:6;3306:9;3302:22;3281:53;:::i;:::-;3271:63;;3226:118;3383:2;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3354:118;2860:619;;;;;:::o;3485:474::-;3553:6;3561;3610:2;3598:9;3589:7;3585:23;3581:32;3578:119;;;3616:79;;:::i;:::-;3578:119;3736:1;3761:53;3806:7;3797:6;3786:9;3782:22;3761:53;:::i;:::-;3751:63;;3707:117;3863:2;3889:53;3934:7;3925:6;3914:9;3910:22;3889:53;:::i;:::-;3879:63;;3834:118;3485:474;;;;;:::o;3965:559::-;4051:6;4059;4108:2;4096:9;4087:7;4083:23;4079:32;4076:119;;;4114:79;;:::i;:::-;4076:119;4262:1;4251:9;4247:17;4234:31;4292:18;4284:6;4281:30;4278:117;;;4314:79;;:::i;:::-;4278:117;4427:80;4499:7;4490:6;4479:9;4475:22;4427:80;:::i;:::-;4409:98;;;;4205:312;3965:559;;;;;:::o;4530:323::-;4586:6;4635:2;4623:9;4614:7;4610:23;4606:32;4603:119;;;4641:79;;:::i;:::-;4603:119;4761:1;4786:50;4828:7;4819:6;4808:9;4804:22;4786:50;:::i;:::-;4776:60;;4732:114;4530:323;;;;:::o;4859:329::-;4918:6;4967:2;4955:9;4946:7;4942:23;4938:32;4935:119;;;4973:79;;:::i;:::-;4935:119;5093:1;5118:53;5163:7;5154:6;5143:9;5139:22;5118:53;:::i;:::-;5108:63;;5064:117;4859:329;;;;:::o;5194:468::-;5259:6;5267;5316:2;5304:9;5295:7;5291:23;5287:32;5284:119;;;5322:79;;:::i;:::-;5284:119;5442:1;5467:53;5512:7;5503:6;5492:9;5488:22;5467:53;:::i;:::-;5457:63;;5413:117;5569:2;5595:50;5637:7;5628:6;5617:9;5613:22;5595:50;:::i;:::-;5585:60;;5540:115;5194:468;;;;;:::o;5668:179::-;5737:10;5758:46;5800:3;5792:6;5758:46;:::i;:::-;5836:4;5831:3;5827:14;5813:28;;5668:179;;;;:::o;5853:142::-;5956:32;5982:5;5956:32;:::i;:::-;5951:3;5944:45;5853:142;;:::o;6001:108::-;6078:24;6096:5;6078:24;:::i;:::-;6073:3;6066:37;6001:108;;:::o;6115:118::-;6202:24;6220:5;6202:24;:::i;:::-;6197:3;6190:37;6115:118;;:::o;6269:732::-;6388:3;6417:54;6465:5;6417:54;:::i;:::-;6487:86;6566:6;6561:3;6487:86;:::i;:::-;6480:93;;6597:56;6647:5;6597:56;:::i;:::-;6676:7;6707:1;6692:284;6717:6;6714:1;6711:13;6692:284;;;6793:6;6787:13;6820:63;6879:3;6864:13;6820:63;:::i;:::-;6813:70;;6906:60;6959:6;6906:60;:::i;:::-;6896:70;;6752:224;6739:1;6736;6732:9;6727:14;;6692:284;;;6696:14;6992:3;6985:10;;6393:608;;;6269:732;;;;:::o;7007:109::-;7088:21;7103:5;7088:21;:::i;:::-;7083:3;7076:34;7007:109;;:::o;7122:185::-;7236:64;7294:5;7236:64;:::i;:::-;7231:3;7224:77;7122:185;;:::o;7313:147::-;7408:45;7447:5;7408:45;:::i;:::-;7403:3;7396:58;7313:147;;:::o;7466:364::-;7554:3;7582:39;7615:5;7582:39;:::i;:::-;7637:71;7701:6;7696:3;7637:71;:::i;:::-;7630:78;;7717:52;7762:6;7757:3;7750:4;7743:5;7739:16;7717:52;:::i;:::-;7794:29;7816:6;7794:29;:::i;:::-;7789:3;7785:39;7778:46;;7558:272;7466:364;;;;:::o;7836:366::-;7978:3;7999:67;8063:2;8058:3;7999:67;:::i;:::-;7992:74;;8075:93;8164:3;8075:93;:::i;:::-;8193:2;8188:3;8184:12;8177:19;;7836:366;;;:::o;8208:::-;8350:3;8371:67;8435:2;8430:3;8371:67;:::i;:::-;8364:74;;8447:93;8536:3;8447:93;:::i;:::-;8565:2;8560:3;8556:12;8549:19;;8208:366;;;:::o;8580:::-;8722:3;8743:67;8807:2;8802:3;8743:67;:::i;:::-;8736:74;;8819:93;8908:3;8819:93;:::i;:::-;8937:2;8932:3;8928:12;8921:19;;8580:366;;;:::o;8952:::-;9094:3;9115:67;9179:2;9174:3;9115:67;:::i;:::-;9108:74;;9191:93;9280:3;9191:93;:::i;:::-;9309:2;9304:3;9300:12;9293:19;;8952:366;;;:::o;9324:::-;9466:3;9487:67;9551:2;9546:3;9487:67;:::i;:::-;9480:74;;9563:93;9652:3;9563:93;:::i;:::-;9681:2;9676:3;9672:12;9665:19;;9324:366;;;:::o;9696:::-;9838:3;9859:67;9923:2;9918:3;9859:67;:::i;:::-;9852:74;;9935:93;10024:3;9935:93;:::i;:::-;10053:2;10048:3;10044:12;10037:19;;9696:366;;;:::o;10068:::-;10210:3;10231:67;10295:2;10290:3;10231:67;:::i;:::-;10224:74;;10307:93;10396:3;10307:93;:::i;:::-;10425:2;10420:3;10416:12;10409:19;;10068:366;;;:::o;10440:::-;10582:3;10603:67;10667:2;10662:3;10603:67;:::i;:::-;10596:74;;10679:93;10768:3;10679:93;:::i;:::-;10797:2;10792:3;10788:12;10781:19;;10440:366;;;:::o;10812:::-;10954:3;10975:67;11039:2;11034:3;10975:67;:::i;:::-;10968:74;;11051:93;11140:3;11051:93;:::i;:::-;11169:2;11164:3;11160:12;11153:19;;10812:366;;;:::o;11184:::-;11326:3;11347:67;11411:2;11406:3;11347:67;:::i;:::-;11340:74;;11423:93;11512:3;11423:93;:::i;:::-;11541:2;11536:3;11532:12;11525:19;;11184:366;;;:::o;11556:::-;11698:3;11719:67;11783:2;11778:3;11719:67;:::i;:::-;11712:74;;11795:93;11884:3;11795:93;:::i;:::-;11913:2;11908:3;11904:12;11897:19;;11556:366;;;:::o;11928:::-;12070:3;12091:67;12155:2;12150:3;12091:67;:::i;:::-;12084:74;;12167:93;12256:3;12167:93;:::i;:::-;12285:2;12280:3;12276:12;12269:19;;11928:366;;;:::o;12300:::-;12442:3;12463:67;12527:2;12522:3;12463:67;:::i;:::-;12456:74;;12539:93;12628:3;12539:93;:::i;:::-;12657:2;12652:3;12648:12;12641:19;;12300:366;;;:::o;12672:118::-;12759:24;12777:5;12759:24;:::i;:::-;12754:3;12747:37;12672:118;;:::o;12796:112::-;12879:22;12895:5;12879:22;:::i;:::-;12874:3;12867:35;12796:112;;:::o;12914:222::-;13007:4;13045:2;13034:9;13030:18;13022:26;;13058:71;13126:1;13115:9;13111:17;13102:6;13058:71;:::i;:::-;12914:222;;;;:::o;13142:254::-;13251:4;13289:2;13278:9;13274:18;13266:26;;13302:87;13386:1;13375:9;13371:17;13362:6;13302:87;:::i;:::-;13142:254;;;;:::o;13402:210::-;13489:4;13527:2;13516:9;13512:18;13504:26;;13540:65;13602:1;13591:9;13587:17;13578:6;13540:65;:::i;:::-;13402:210;;;;:::o;13618:276::-;13738:4;13776:2;13765:9;13761:18;13753:26;;13789:98;13884:1;13873:9;13869:17;13860:6;13789:98;:::i;:::-;13618:276;;;;:::o;13900:313::-;14013:4;14051:2;14040:9;14036:18;14028:26;;14100:9;14094:4;14090:20;14086:1;14075:9;14071:17;14064:47;14128:78;14201:4;14192:6;14128:78;:::i;:::-;14120:86;;13900:313;;;;:::o;14219:419::-;14385:4;14423:2;14412:9;14408:18;14400:26;;14472:9;14466:4;14462:20;14458:1;14447:9;14443:17;14436:47;14500:131;14626:4;14500:131;:::i;:::-;14492:139;;14219:419;;;:::o;14644:::-;14810:4;14848:2;14837:9;14833:18;14825:26;;14897:9;14891:4;14887:20;14883:1;14872:9;14868:17;14861:47;14925:131;15051:4;14925:131;:::i;:::-;14917:139;;14644:419;;;:::o;15069:::-;15235:4;15273:2;15262:9;15258:18;15250:26;;15322:9;15316:4;15312:20;15308:1;15297:9;15293:17;15286:47;15350:131;15476:4;15350:131;:::i;:::-;15342:139;;15069:419;;;:::o;15494:::-;15660:4;15698:2;15687:9;15683:18;15675:26;;15747:9;15741:4;15737:20;15733:1;15722:9;15718:17;15711:47;15775:131;15901:4;15775:131;:::i;:::-;15767:139;;15494:419;;;:::o;15919:::-;16085:4;16123:2;16112:9;16108:18;16100:26;;16172:9;16166:4;16162:20;16158:1;16147:9;16143:17;16136:47;16200:131;16326:4;16200:131;:::i;:::-;16192:139;;15919:419;;;:::o;16344:::-;16510:4;16548:2;16537:9;16533:18;16525:26;;16597:9;16591:4;16587:20;16583:1;16572:9;16568:17;16561:47;16625:131;16751:4;16625:131;:::i;:::-;16617:139;;16344:419;;;:::o;16769:::-;16935:4;16973:2;16962:9;16958:18;16950:26;;17022:9;17016:4;17012:20;17008:1;16997:9;16993:17;16986:47;17050:131;17176:4;17050:131;:::i;:::-;17042:139;;16769:419;;;:::o;17194:::-;17360:4;17398:2;17387:9;17383:18;17375:26;;17447:9;17441:4;17437:20;17433:1;17422:9;17418:17;17411:47;17475:131;17601:4;17475:131;:::i;:::-;17467:139;;17194:419;;;:::o;17619:::-;17785:4;17823:2;17812:9;17808:18;17800:26;;17872:9;17866:4;17862:20;17858:1;17847:9;17843:17;17836:47;17900:131;18026:4;17900:131;:::i;:::-;17892:139;;17619:419;;;:::o;18044:::-;18210:4;18248:2;18237:9;18233:18;18225:26;;18297:9;18291:4;18287:20;18283:1;18272:9;18268:17;18261:47;18325:131;18451:4;18325:131;:::i;:::-;18317:139;;18044:419;;;:::o;18469:::-;18635:4;18673:2;18662:9;18658:18;18650:26;;18722:9;18716:4;18712:20;18708:1;18697:9;18693:17;18686:47;18750:131;18876:4;18750:131;:::i;:::-;18742:139;;18469:419;;;:::o;18894:::-;19060:4;19098:2;19087:9;19083:18;19075:26;;19147:9;19141:4;19137:20;19133:1;19122:9;19118:17;19111:47;19175:131;19301:4;19175:131;:::i;:::-;19167:139;;18894:419;;;:::o;19319:::-;19485:4;19523:2;19512:9;19508:18;19500:26;;19572:9;19566:4;19562:20;19558:1;19547:9;19543:17;19536:47;19600:131;19726:4;19600:131;:::i;:::-;19592:139;;19319:419;;;:::o;19744:222::-;19837:4;19875:2;19864:9;19860:18;19852:26;;19888:71;19956:1;19945:9;19941:17;19932:6;19888:71;:::i;:::-;19744:222;;;;:::o;19972:831::-;20235:4;20273:3;20262:9;20258:19;20250:27;;20287:71;20355:1;20344:9;20340:17;20331:6;20287:71;:::i;:::-;20368:80;20444:2;20433:9;20429:18;20420:6;20368:80;:::i;:::-;20495:9;20489:4;20485:20;20480:2;20469:9;20465:18;20458:48;20523:108;20626:4;20617:6;20523:108;:::i;:::-;20515:116;;20641:72;20709:2;20698:9;20694:18;20685:6;20641:72;:::i;:::-;20723:73;20791:3;20780:9;20776:19;20767:6;20723:73;:::i;:::-;19972:831;;;;;;;;:::o;20809:214::-;20898:4;20936:2;20925:9;20921:18;20913:26;;20949:67;21013:1;21002:9;20998:17;20989:6;20949:67;:::i;:::-;20809:214;;;;:::o;21110:132::-;21177:4;21200:3;21192:11;;21230:4;21225:3;21221:14;21213:22;;21110:132;;;:::o;21248:114::-;21315:6;21349:5;21343:12;21333:22;;21248:114;;;:::o;21368:99::-;21420:6;21454:5;21448:12;21438:22;;21368:99;;;:::o;21473:113::-;21543:4;21575;21570:3;21566:14;21558:22;;21473:113;;;:::o;21592:184::-;21691:11;21725:6;21720:3;21713:19;21765:4;21760:3;21756:14;21741:29;;21592:184;;;;:::o;21782:169::-;21866:11;21900:6;21895:3;21888:19;21940:4;21935:3;21931:14;21916:29;;21782:169;;;;:::o;21957:305::-;21997:3;22016:20;22034:1;22016:20;:::i;:::-;22011:25;;22050:20;22068:1;22050:20;:::i;:::-;22045:25;;22204:1;22136:66;22132:74;22129:1;22126:81;22123:107;;;22210:18;;:::i;:::-;22123:107;22254:1;22251;22247:9;22240:16;;21957:305;;;;:::o;22268:185::-;22308:1;22325:20;22343:1;22325:20;:::i;:::-;22320:25;;22359:20;22377:1;22359:20;:::i;:::-;22354:25;;22398:1;22388:35;;22403:18;;:::i;:::-;22388:35;22445:1;22442;22438:9;22433:14;;22268:185;;;;:::o;22459:348::-;22499:7;22522:20;22540:1;22522:20;:::i;:::-;22517:25;;22556:20;22574:1;22556:20;:::i;:::-;22551:25;;22744:1;22676:66;22672:74;22669:1;22666:81;22661:1;22654:9;22647:17;22643:105;22640:131;;;22751:18;;:::i;:::-;22640:131;22799:1;22796;22792:9;22781:20;;22459:348;;;;:::o;22813:191::-;22853:4;22873:20;22891:1;22873:20;:::i;:::-;22868:25;;22907:20;22925:1;22907:20;:::i;:::-;22902:25;;22946:1;22943;22940:8;22937:34;;;22951:18;;:::i;:::-;22937:34;22996:1;22993;22989:9;22981:17;;22813:191;;;;:::o;23010:96::-;23047:7;23076:24;23094:5;23076:24;:::i;:::-;23065:35;;23010:96;;;:::o;23112:104::-;23157:7;23186:24;23204:5;23186:24;:::i;:::-;23175:35;;23112:104;;;:::o;23222:90::-;23256:7;23299:5;23292:13;23285:21;23274:32;;23222:90;;;:::o;23318:126::-;23355:7;23395:42;23388:5;23384:54;23373:65;;23318:126;;;:::o;23450:77::-;23487:7;23516:5;23505:16;;23450:77;;;:::o;23533:86::-;23568:7;23608:4;23601:5;23597:16;23586:27;;23533:86;;;:::o;23625:153::-;23702:9;23735:37;23766:5;23735:37;:::i;:::-;23722:50;;23625:153;;;:::o;23784:121::-;23842:9;23875:24;23893:5;23875:24;:::i;:::-;23862:37;;23784:121;;;:::o;23911:126::-;23961:9;23994:37;24025:5;23994:37;:::i;:::-;23981:50;;23911:126;;;:::o;24043:113::-;24093:9;24126:24;24144:5;24126:24;:::i;:::-;24113:37;;24043:113;;;:::o;24162:307::-;24230:1;24240:113;24254:6;24251:1;24248:13;24240:113;;;24339:1;24334:3;24330:11;24324:18;24320:1;24315:3;24311:11;24304:39;24276:2;24273:1;24269:10;24264:15;;24240:113;;;24371:6;24368:1;24365:13;24362:101;;;24451:1;24442:6;24437:3;24433:16;24426:27;24362:101;24211:258;24162:307;;;:::o;24475:320::-;24519:6;24556:1;24550:4;24546:12;24536:22;;24603:1;24597:4;24593:12;24624:18;24614:81;;24680:4;24672:6;24668:17;24658:27;;24614:81;24742:2;24734:6;24731:14;24711:18;24708:38;24705:84;;;24761:18;;:::i;:::-;24705:84;24526:269;24475:320;;;:::o;24801:233::-;24840:3;24863:24;24881:5;24863:24;:::i;:::-;24854:33;;24909:66;24902:5;24899:77;24896:103;;;24979:18;;:::i;:::-;24896:103;25026:1;25019:5;25015:13;25008:20;;24801:233;;;:::o;25040:180::-;25088:77;25085:1;25078:88;25185:4;25182:1;25175:15;25209:4;25206:1;25199:15;25226:180;25274:77;25271:1;25264:88;25371:4;25368:1;25361:15;25395:4;25392:1;25385:15;25412:180;25460:77;25457:1;25450:88;25557:4;25554:1;25547:15;25581:4;25578:1;25571:15;25598:180;25646:77;25643:1;25636:88;25743:4;25740:1;25733:15;25767:4;25764:1;25757:15;25784:180;25832:77;25829:1;25822:88;25929:4;25926:1;25919:15;25953:4;25950:1;25943:15;25970:180;26018:77;26015:1;26008:88;26115:4;26112:1;26105:15;26139:4;26136:1;26129:15;26156:117;26265:1;26262;26255:12;26279:117;26388:1;26385;26378:12;26402:117;26511:1;26508;26501:12;26525:117;26634:1;26631;26624:12;26648:117;26757:1;26754;26747:12;26771:102;26812:6;26863:2;26859:7;26854:2;26847:5;26843:14;26839:28;26829:38;;26771:102;;;:::o;26879:222::-;27019:34;27015:1;27007:6;27003:14;26996:58;27088:5;27083:2;27075:6;27071:15;27064:30;26879:222;:::o;27107:229::-;27247:34;27243:1;27235:6;27231:14;27224:58;27316:12;27311:2;27303:6;27299:15;27292:37;27107:229;:::o;27342:225::-;27482:34;27478:1;27470:6;27466:14;27459:58;27551:8;27546:2;27538:6;27534:15;27527:33;27342:225;:::o;27573:221::-;27713:34;27709:1;27701:6;27697:14;27690:58;27782:4;27777:2;27769:6;27765:15;27758:29;27573:221;:::o;27800:177::-;27940:29;27936:1;27928:6;27924:14;27917:53;27800:177;:::o;27983:::-;28123:29;28119:1;28111:6;28107:14;28100:53;27983:177;:::o;28166:181::-;28306:33;28302:1;28294:6;28290:14;28283:57;28166:181;:::o;28353:227::-;28493:34;28489:1;28481:6;28477:14;28470:58;28562:10;28557:2;28549:6;28545:15;28538:35;28353:227;:::o;28586:182::-;28726:34;28722:1;28714:6;28710:14;28703:58;28586:182;:::o;28774:228::-;28914:34;28910:1;28902:6;28898:14;28891:58;28983:11;28978:2;28970:6;28966:15;28959:36;28774:228;:::o;29008:224::-;29148:34;29144:1;29136:6;29132:14;29125:58;29217:7;29212:2;29204:6;29200:15;29193:32;29008:224;:::o;29238:222::-;29378:34;29374:1;29366:6;29362:14;29355:58;29447:5;29442:2;29434:6;29430:15;29423:30;29238:222;:::o;29466:223::-;29606:34;29602:1;29594:6;29590:14;29583:58;29675:6;29670:2;29662:6;29658:15;29651:31;29466:223;:::o;29695:122::-;29768:24;29786:5;29768:24;:::i;:::-;29761:5;29758:35;29748:63;;29807:1;29804;29797:12;29748:63;29695:122;:::o;29823:138::-;29904:32;29930:5;29904:32;:::i;:::-;29897:5;29894:43;29884:71;;29951:1;29948;29941:12;29884:71;29823:138;:::o;29967:116::-;30037:21;30052:5;30037:21;:::i;:::-;30030:5;30027:32;30017:60;;30073:1;30070;30063:12;30017:60;29967:116;:::o;30089:122::-;30162:24;30180:5;30162:24;:::i;:::-;30155:5;30152:35;30142:63;;30201:1;30198;30191:12;30142:63;30089:122;:::o

Swarm Source

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