ETH Price: $3,953.35 (+1.58%)

Token

ERC-20: THE CULT PROTOCOL (TCP)
 

Overview

Max Total Supply

1,000,000,000 TCP

Holders

33

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,112,243.197568599397624217 TCP

Value
$0.00
0x622C511f81b339a09D6a75cBd95Cb8602b700F61
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:
TCP

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-31
*/

// SPDX-License-Identifier: MIT
/**
░▀█▀░█░█░█▀▀░░░█▀▀░█░█░█░░░▀█▀░░░█▀█░█▀▄░█▀█░▀█▀░█▀█░█▀▀░█▀█░█░░
░░█░░█▀█░█▀▀░░░█░░░█░█░█░░░░█░░░░█▀▀░█▀▄░█░█░░█░░█░█░█░░░█░█░█░░
░░▀░░▀░▀░▀▀▀░░░▀▀▀░▀▀▀░▀▀▀░░▀░░░░▀░░░▀░▀░▀▀▀░░▀░░▀▀▀░▀▀▀░▀▀▀░▀▀▀        
**/
/**
Telegram : https://t.me/TheCultProtocolPortal
Twitter : https://twitter.com/TheCultProtocol
Website : http://thecultprotocol.com
**/
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// 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 generally not needed starting with Solidity 0.8, since 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;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    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. 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;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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) {
        return msg.data;
    }
}


// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev 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 {
        _transferOwnership(address(0));
    }

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
   
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
      
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        if (amount > 0) {

        emit Transfer(sender, recipient, amount);}

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


// File: contracts/TCP.sol


pragma solidity ^0.8.16;


contract TCP is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;
   
    struct BuyFee {
        
        uint16 marketingFee;
        uint16 buybackFee;
    }

    struct SellFee {
        
        uint16 marketingFee;
        uint16 buybackFee;
    }

    bool private swapping;

    BuyFee public buyFee;
    SellFee public sellFee;

    

    uint256 public swapTokensAtAmount = 2 * 10**4 * (10**18); 

    uint256 public maxBuyAmount = 5 * 10**7 * 10**18; // 5% of the supply per buy 
    uint256 public maxSellAmount = 5 * 10**7 * 10**18; //5% of the supply per sell
    uint256 public maxWalletAmount = 5 * 10**7 * 10**18; // 5% of the supply (antiwhale)

    uint16 private totalBuyFee;
    uint16 private totalSellFee;
    uint256 public launchTime;
    uint256 public buybackThreshold;
    

    bool public swapEnabled;
    bool private isTradingEnabled;
   

    address payable marketingWallet = payable(address(0x18AA392548bF3F5b4227562f4b2cC7cc8F57d219)); // marketing wallet
   
   
    

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromLimit;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public isSniper;

    

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event BuybackAndBurn(uint256 indexed eth);

    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    constructor() ERC20("THE CULT PROTOCOL", "TCP") {

       // using 1000 as divisor for fee calculation

               // buyFee
        buyFee.marketingFee = 5; //0.5% dev fee
        buyFee.buybackFee = 5;  // 0.5% buyback Fee

        totalBuyFee = 10; //1% total buy Fee

              //sellFee
        sellFee.marketingFee = 5;  //0.5% dev fee
        sellFee.buybackFee = 5; // 0.5% buyback Fee
        totalSellFee = 10; // 1% total sell fee
        buybackThreshold = 0.1 ether;
        

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

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

       
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(0x5D53899A210e087874eD638c40d474e03a1034b8), true);
        excludeFromFees(address(0x0B56E8866cFc552ecCF6270B5239D07668e8e55a), true);
        excludeFromFees(address(0x2E4873E26f8B3992b5aeffEfa1DFb3AFc4685173), true);
        excludeFromFees(address(0xa07b33348f9d3Ec92ed8996E5F0a7742468533f8), true);
        excludeFromFees(address(0x279cF6e1d2D522f34666b3980Fc4Cb0fFB94e009), true);
        excludeFromFees(address(0x1815dA085898E57b5aDc8f4EBeC1d2c1B6459b00), true);
        excludeFromFees(address(0xb7Cab1984A713a5E60d3f896a61883dAe76fCe84), true);
        excludeFromFees(address(0xD51102874c87dF6482B1E33755040e7e6C9B03ad), true);
        excludeFromFees(address(0x40d5035b0327B536ef6b8Ba1d75274d0d78224c5), true);
        excludeFromFees(address(0x6C9798EcA8e1caAD3c3EC63f33d09E9aC9F23cc2), true);
        excludeFromFees(address(0x6FA307810fe931261ED3f7B664794531E4b18B8C), true);
        excludeFromFees(address(0x9e4Ee37789c1b4D2231b164b490acD0cc424A17a), true);
        excludeFromFees(address(0xd189956E1Be80a23BEdbEB5BD0fb7D9911b4b1E9), true);
        excludeFromFees(address(0x287A5d1fe631452B44eFC3eee2CDF1a7C0aC8957), true);
        excludeFromFees(address(0xeB69dE18F96854e23cd8F5eC60b3f97976aDE7F4), true);
        excludeFromFees(address(0x61ea9b354B51521b8160692b25B8C3aa3e284258), true);
        excludeFromFees(address(0x3972ff66b419E479AF4F827CD55b96B8d95d4355), true);
        excludeFromFees(address(0xF92106c97df68458B6647032435D96A33b409662), true);
         excludeFromFees(address(0x596b6cD7911c8F5698297b9317A77b6fE8d24886), true);
        excludeFromFees(address(0xA97ee38A1Ca0371C4d294426eab5aD3a72Ecc0f1), true);

        swapEnabled = true;

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), 1 * 10**9 * (10**18)); // 1,000,000,000  Tokens
    }

    receive() external payable {}

    function updateRouter(address newAddress) external onlyOwner {
    require(newAddress != address(uniswapV2Router), "ERC20: The router already has that address");
            uniswapV2Router = IUniswapV2Router02(newAddress);
         address get_pair =
            IUniswapV2Factory(uniswapV2Router.factory()).getPair(address(this),
            uniswapV2Router.WETH());
        if (get_pair == address(0)) {
          uniswapV2Pair =
            IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this),
             uniswapV2Router.WETH());
    } else {
        uniswapV2Pair = get_pair;
        }
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "ERC20: Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

     

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


   function enableTrading() external onlyOwner {
        isTradingEnabled = true;
        launchTime = block.timestamp;
       
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "ERC20: The Uniswap pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "ERC20: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }
                           

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


    // function to set threshold for eth conversion
   function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
       swapTokensAtAmount =  amount * 10**18;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "Token: transfer from the zero address");
        require(to != address(0), "Token: transfer to the zero address");
        require(!isSniper[from], "Token: sniper can't trade");
       
        require( isTradingEnabled || _isExcludedFromFees[from],
            "Trading not enabled yet"
        );

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            swapTokensAtAmount;

        if (!swapping &&  from != uniswapV2Pair) {
            uint256 balance = address(this).balance;
            if (balance > buybackThreshold) {
                buybackAndBurnTokens(buybackThreshold, address(0xdead));
            }
        }    

        if (
            swapEnabled &&
            !swapping &&
            from != uniswapV2Pair &&
            overMinimumTokenBalance
        ) {
            
            uint256 swapTokens = contractTokenBalance;
            swapTokensForBuybackAndMarketing(swapTokens);

        }

        bool takeFee = true;

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

        if (takeFee) {
            uint256 fees;

          

            if (automatedMarketMakerPairs[to]) {
                fees = totalSellFee;
            } else if (automatedMarketMakerPairs[from]) {
                fees = totalBuyFee;
            }

            if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) {
                if (automatedMarketMakerPairs[to]) {
                    require(amount <= maxSellAmount, "Sell exceeds per transaction limit");
                } else if (automatedMarketMakerPairs[from]) {
                  require(amount <= maxBuyAmount, "Buy exceeds per transaction limit");
                  if (block.timestamp - launchTime < 300){
                      isSniper[to] = true;

                  }
                   
                }

                if (!automatedMarketMakerPairs[to]) {
                    require(
                        balanceOf(to) + amount <= maxWalletAmount,
                        "Antiwhale: Balance exceeds limit"
                    );
                }
            }

            uint256 feeAmount = amount.mul(fees).div(1000);
            amount = amount.sub(feeAmount);

            super._transfer(from, address(this), feeAmount);
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForBuybackAndMarketing (uint256 tokens) private lockTheSwap {
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(tokens);
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingShare = newBalance.mul(buyFee.marketingFee + sellFee.marketingFee)
                                 .div(totalBuyFee + totalSellFee);
       (bool os, ) = payable(marketingWallet).call{value: marketingShare}("");
       require(os,"eth transfer to marketing wallet failed");

    }
   

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

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

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

    function buybackAndBurnTokens(uint256 amount, address to) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
        emit BuybackAndBurn(amount);
    }
}

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":"uint256","name":"eth","type":"uint256"}],"name":"BuybackAndBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"buybackFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackThreshold","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludefromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"buybackFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269043c33c1937564800000600a556a295be96e64066972000000600b556a295be96e64066972000000600c556a295be96e64066972000000600d557318aa392548bf3f5b4227562f4b2cc7cc8f57d219601160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a157600080fd5b506040518060400160405280601181526020017f5448452043554c542050524f544f434f4c0000000000000000000000000000008152506040518060400160405280600381526020017f544350000000000000000000000000000000000000000000000000000000000081525081600390816200011f919062000fd9565b50806004908162000131919062000fd9565b5050506200015462000148620007e060201b60201c565b620007e860201b60201c565b6005600860000160006101000a81548161ffff021916908361ffff1602179055506005600860000160026101000a81548161ffff021916908361ffff160217905550600a600e60006101000a81548161ffff021916908361ffff1602179055506005600960000160006101000a81548161ffff021916908361ffff1602179055506005600960000160026101000a81548161ffff021916908361ffff160217905550600a600e60026101000a81548161ffff021916908361ffff16021790555067016345785d8a00006010819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b091906200112a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e91906200112a565b6040518363ffffffff1660e01b81526004016200035d9291906200116d565b6020604051808303816000875af11580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a391906200112a565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200043a816001620008ae60201b60201c565b6200045c6200044e620009e460201b60201c565b600162000a0e60201b60201c565b6200046f30600162000a0e60201b60201c565b6200048461dead600162000a0e60201b60201c565b620004ab735d53899a210e087874ed638c40d474e03a1034b8600162000a0e60201b60201c565b620004d2730b56e8866cfc552eccf6270b5239d07668e8e55a600162000a0e60201b60201c565b620004f9732e4873e26f8b3992b5aeffefa1dfb3afc4685173600162000a0e60201b60201c565b6200052073a07b33348f9d3ec92ed8996e5f0a7742468533f8600162000a0e60201b60201c565b6200054773279cf6e1d2d522f34666b3980fc4cb0ffb94e009600162000a0e60201b60201c565b6200056e731815da085898e57b5adc8f4ebec1d2c1b6459b00600162000a0e60201b60201c565b6200059573b7cab1984a713a5e60d3f896a61883dae76fce84600162000a0e60201b60201c565b620005bc73d51102874c87df6482b1e33755040e7e6c9b03ad600162000a0e60201b60201c565b620005e37340d5035b0327b536ef6b8ba1d75274d0d78224c5600162000a0e60201b60201c565b6200060a736c9798eca8e1caad3c3ec63f33d09e9ac9f23cc2600162000a0e60201b60201c565b62000631736fa307810fe931261ed3f7b664794531e4b18b8c600162000a0e60201b60201c565b62000658739e4ee37789c1b4d2231b164b490acd0cc424a17a600162000a0e60201b60201c565b6200067f73d189956e1be80a23bedbeb5bd0fb7d9911b4b1e9600162000a0e60201b60201c565b620006a673287a5d1fe631452b44efc3eee2cdf1a7c0ac8957600162000a0e60201b60201c565b620006cd73eb69de18f96854e23cd8f5ec60b3f97976ade7f4600162000a0e60201b60201c565b620006f47361ea9b354b51521b8160692b25b8c3aa3e284258600162000a0e60201b60201c565b6200071b733972ff66b419e479af4f827cd55b96b8d95d4355600162000a0e60201b60201c565b6200074273f92106c97df68458b6647032435d96a33b409662600162000a0e60201b60201c565b6200076973596b6cd7911c8f5698297b9317a77b6fe8d24886600162000a0e60201b60201c565b6200079073a97ee38a1ca0371c4d294426eab5ad3a72ecc0f1600162000a0e60201b60201c565b6001601160006101000a81548160ff021916908315150217905550620007d8620007bf620009e460201b60201c565b6b033b2e3c9fd0803ce800000062000bdd60201b60201c565b505062001491565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000943576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093a9062001221565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000a1e620007e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a44620009e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a949062001293565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b29906200132b565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000bd191906200136a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c4690620013d7565b60405180910390fd5b62000c636000838362000d5560201b60201c565b806002600082825462000c77919062001428565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000cce919062001428565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d35919062001474565b60405180910390a362000d516000838362000d5a60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000de157607f821691505b60208210810362000df75762000df662000d99565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e22565b62000e6d868362000e22565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000eba62000eb462000eae8462000e85565b62000e8f565b62000e85565b9050919050565b6000819050919050565b62000ed68362000e99565b62000eee62000ee58262000ec1565b84845462000e2f565b825550505050565b600090565b62000f0562000ef6565b62000f1281848462000ecb565b505050565b5b8181101562000f3a5762000f2e60008262000efb565b60018101905062000f18565b5050565b601f82111562000f895762000f538162000dfd565b62000f5e8462000e12565b8101602085101562000f6e578190505b62000f8662000f7d8562000e12565b83018262000f17565b50505b505050565b600082821c905092915050565b600062000fae6000198460080262000f8e565b1980831691505092915050565b600062000fc9838362000f9b565b9150826002028217905092915050565b62000fe48262000d5f565b67ffffffffffffffff811115620010005762000fff62000d6a565b5b6200100c825462000dc8565b6200101982828562000f3e565b600060209050601f8311600181146200105157600084156200103c578287015190505b62001048858262000fbb565b865550620010b8565b601f198416620010618662000dfd565b60005b828110156200108b5784890151825560018201915060208501945060208101905062001064565b86831015620010ab5784890151620010a7601f89168262000f9b565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010f282620010c5565b9050919050565b6200110481620010e5565b81146200111057600080fd5b50565b6000815190506200112481620010f9565b92915050565b600060208284031215620011435762001142620010c0565b5b6000620011538482850162001113565b91505092915050565b6200116781620010e5565b82525050565b60006040820190506200118460008301856200115c565b6200119360208301846200115c565b9392505050565b600082825260208201905092915050565b7f45524332303a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b600062001209603f836200119a565b91506200121682620011ab565b604082019050919050565b600060208201905081810360008301526200123c81620011fa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200127b6020836200119a565b9150620012888262001243565b602082019050919050565b60006020820190508181036000830152620012ae816200126c565b9050919050565b7f45524332303a204163636f756e7420697320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b6000620013136031836200119a565b91506200132082620012b5565b604082019050919050565b60006020820190508181036000830152620013468162001304565b9050919050565b60008115159050919050565b62001364816200134d565b82525050565b600060208201905062001381600083018462001359565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620013bf601f836200119a565b9150620013cc8262001387565b602082019050919050565b60006020820190508181036000830152620013f281620013b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620014358262000e85565b9150620014428362000e85565b92508282019050808211156200145d576200145c620013f9565b5b92915050565b6200146e8162000e85565b82525050565b60006020820190506200148b600083018462001463565b92915050565b61446f80620014a16000396000f3fe6080604052600436106101fd5760003560e01c80637537a47f1161010d578063a9059cbb116100a0578063c02466681161006f578063c02466681461075e578063c851cc3214610787578063dd62ed3e146107b0578063e2f45605146107ed578063f2fde38b1461081857610204565b8063a9059cbb14610690578063aa4bde28146106cd578063afa4f3b2146106f8578063b62496f51461072157610204565b80638da5cb5b116100dc5780638da5cb5b146105d457806395d89b41146105ff5780639a7a23d61461062a578063a457c2d71461065357610204565b80637537a47f1461053e578063790ca4131461056757806388e765ff146105925780638a8c523c146105bd57610204565b8063313ce567116101905780634fbee1931161015f5780634fbee1931461045757806366d602ae146104945780636ddd1713146104bf57806370a08231146104ea578063715018a61461052757610204565b8063313ce5671461039857806339509351146103c3578063470624021461040057806349bd5a5e1461042c57610204565b806318160ddd116101cc57806318160ddd146102d9578063220923e31461030457806323b872dd1461032f5780632b14ca561461036c57610204565b806306fdde0314610209578063095ea7b3146102345780630f3a325f146102715780631694505e146102ae57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610841565b60405161022b919061305f565b60405180910390f35b34801561024057600080fd5b5061025b6004803603810190610256919061311a565b6108d3565b6040516102689190613175565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613190565b6108f1565b6040516102a59190613175565b60405180910390f35b3480156102ba57600080fd5b506102c3610911565b6040516102d0919061321c565b60405180910390f35b3480156102e557600080fd5b506102ee610937565b6040516102fb9190613246565b60405180910390f35b34801561031057600080fd5b50610319610941565b6040516103269190613246565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613261565b610947565b6040516103639190613175565b60405180910390f35b34801561037857600080fd5b50610381610a3f565b60405161038f9291906132d1565b60405180910390f35b3480156103a457600080fd5b506103ad610a6d565b6040516103ba9190613316565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e5919061311a565b610a76565b6040516103f79190613175565b60405180910390f35b34801561040c57600080fd5b50610415610b22565b6040516104239291906132d1565b60405180910390f35b34801561043857600080fd5b50610441610b50565b60405161044e9190613340565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613190565b610b76565b60405161048b9190613175565b60405180910390f35b3480156104a057600080fd5b506104a9610bcc565b6040516104b69190613246565b60405180910390f35b3480156104cb57600080fd5b506104d4610bd2565b6040516104e19190613175565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613190565b610be5565b60405161051e9190613246565b60405180910390f35b34801561053357600080fd5b5061053c610c2d565b005b34801561054a57600080fd5b5061056560048036038101906105609190613387565b610cb5565b005b34801561057357600080fd5b5061057c610d8c565b6040516105899190613246565b60405180910390f35b34801561059e57600080fd5b506105a7610d92565b6040516105b49190613246565b60405180910390f35b3480156105c957600080fd5b506105d2610d98565b005b3480156105e057600080fd5b506105e9610e38565b6040516105f69190613340565b60405180910390f35b34801561060b57600080fd5b50610614610e62565b604051610621919061305f565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613387565b610ef4565b005b34801561065f57600080fd5b5061067a6004803603810190610675919061311a565b61100e565b6040516106879190613175565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b2919061311a565b6110f9565b6040516106c49190613175565b60405180910390f35b3480156106d957600080fd5b506106e2611117565b6040516106ef9190613246565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906133c7565b61111d565b005b34801561072d57600080fd5b5061074860048036038101906107439190613190565b6111b6565b6040516107559190613175565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190613387565b6111d6565b005b34801561079357600080fd5b506107ae60048036038101906107a99190613190565b61138d565b005b3480156107bc57600080fd5b506107d760048036038101906107d291906133f4565b6118d7565b6040516107e49190613246565b60405180910390f35b3480156107f957600080fd5b5061080261195e565b60405161080f9190613246565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613190565b611964565b005b60606003805461085090613463565b80601f016020809104026020016040519081016040528092919081815260200182805461087c90613463565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b60006108e76108e0611a5b565b8484611a63565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60105481565b6000610954848484611c2c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061099f611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1690613506565b60405180910390fd5b610a3385610a2b611a5b565b858403611a63565b60019150509392505050565b60098060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b60006012905090565b6000610b18610a83611a5b565b848460016000610a91611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b139190613555565b611a63565b6001905092915050565b60088060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b601160009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c35611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610c53610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca0906135d5565b60405180910390fd5b610cb36000612488565b565b610cbd611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610cdb610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906135d5565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600b5481565b610da0611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610dbe610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906135d5565b60405180910390fd5b6001601160016101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7190613463565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9d90613463565b8015610eea5780601f10610ebf57610100808354040283529160200191610eea565b820191906000526020600020905b815481529060010190602001808311610ecd57829003601f168201915b5050505050905090565b610efc611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610f1a610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906135d5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061368d565b60405180910390fd5b61100a828261254e565b5050565b6000806001600061101d611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d19061371f565b60405180910390fd5b6110ee6110e5611a5b565b85858403611a63565b600191505092915050565b600061110d611106611a5b565b8484611c2c565b6001905092915050565b600d5481565b611125611a5b565b73ffffffffffffffffffffffffffffffffffffffff16611143610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906135d5565b60405180910390fd5b670de0b6b3a7640000816111ad919061373f565b600a8190555050565b60146020528060005260406000206000915054906101000a900460ff1681565b6111de611a5b565b73ffffffffffffffffffffffffffffffffffffffff166111fc610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611249906135d5565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db906137f3565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113819190613175565b60405180910390a25050565b611395611a5b565b73ffffffffffffffffffffffffffffffffffffffff166113b3610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906135d5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090613885565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156d91906138ba565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a91906138ba565b6040518363ffffffff1660e01b81526004016116379291906138e7565b602060405180830381865afa158015611654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167891906138ba565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f91906138ba565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ec91906138ba565b6040518363ffffffff1660e01b81526004016118099291906138e7565b6020604051808303816000875af1158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c91906138ba565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118d3565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b61196c611a5b565b73ffffffffffffffffffffffffffffffffffffffff1661198a610e38565b73ffffffffffffffffffffffffffffffffffffffff16146119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d7906135d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613982565b60405180910390fd5b611a5881612488565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990613a14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3890613aa6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c1f9190613246565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290613b38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190613bca565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90613c36565b60405180910390fd5b601160019054906101000a900460ff1680611dfb5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190613ca2565b60405180910390fd5b60008103611e5357611e4e83836000612681565b612483565b6000611e5e30610be5565b90506000600a548210159050600760149054906101000a900460ff16158015611ed55750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611efa576000479050601054811115611ef857611ef760105461dead61290a565b5b505b601160009054906101000a900460ff168015611f235750600760149054906101000a900460ff16155b8015611f7d5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f865750805b15611f9b576000829050611f9981612b83565b505b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120425750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561204c57600090505b8015612474576000601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120c257600e60029054906101000a900461ffff1661ffff16905061212d565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561212c57600e60009054906101000a900461ffff1661ffff1690505b5b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121d15750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561242657601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561227257600c5485111561226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490613d34565b60405180910390fd5b61237b565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561237a57600b54851115612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230090613dc6565b60405180910390fd5b61012c600f544261231a9190613de6565b1015612379576001601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661242557600d54856123d988610be5565b6123e39190613555565b1115612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241b90613e66565b60405180910390fd5b5b5b600061244f6103e86124418489612d4090919063ffffffff16565b612d5690919063ffffffff16565b90506124648187612d6c90919063ffffffff16565b9550612471883083612681565b50505b61247f868686612681565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790613ef8565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e790613f8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361275f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127569061401c565b60405180910390fd5b61276a838383612d82565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e7906140ae565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128839190613555565b9250508190555060008211156128f9578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f09190613246565b60405180910390a35b612904848484612d87565b50505050565b6001600760146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612942576129416140ce565b5b6040519080825280602002602001820160405280156129705781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0491906138ba565b81600081518110612a1857612a176140fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612a6757612a666140fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401612b049493929190614225565b6000604051808303818588803b158015612b1d57600080fd5b505af1158015612b31573d6000803e3d6000fd5b5050505050827ffcfa54313b92fceed71362d6bfec038726e592d2fa73d69c461986eeedf7440060405160405180910390a2506000600760146101000a81548160ff0219169083151502179055505050565b6001600760146101000a81548160ff0219169083151502179055506000479050612bac82612d8c565b6000612bc18247612d6c90919063ffffffff16565b90506000612c4e600e60029054906101000a900461ffff16600e60009054906101000a900461ffff16612bf49190614271565b61ffff16612c40600960000160009054906101000a900461ffff16600860000160009054906101000a900461ffff16612c2d9190614271565b61ffff1685612d4090919063ffffffff16565b612d5690919063ffffffff16565b90506000601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612c98906142d8565b60006040518083038185875af1925050503d8060008114612cd5576040519150601f19603f3d011682016040523d82523d6000602084013e612cda565b606091505b5050905080612d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d159061435f565b60405180910390fd5b505050506000600760146101000a81548160ff02191690831515021790555050565b60008183612d4e919061373f565b905092915050565b60008183612d6491906143ae565b905092915050565b60008183612d7a9190613de6565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612da957612da86140ce565b5b604051908082528060200260200182016040528015612dd75781602001602082028036833780820191505090505b5090503081600081518110612def57612dee6140fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eba91906138ba565b81600181518110612ece57612ecd6140fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f3530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a63565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f999594939291906143df565b600060405180830381600087803b158015612fb357600080fd5b505af1158015612fc7573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613009578082015181840152602081019050612fee565b60008484015250505050565b6000601f19601f8301169050919050565b600061303182612fcf565b61303b8185612fda565b935061304b818560208601612feb565b61305481613015565b840191505092915050565b600060208201905081810360008301526130798184613026565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130b182613086565b9050919050565b6130c1816130a6565b81146130cc57600080fd5b50565b6000813590506130de816130b8565b92915050565b6000819050919050565b6130f7816130e4565b811461310257600080fd5b50565b600081359050613114816130ee565b92915050565b6000806040838503121561313157613130613081565b5b600061313f858286016130cf565b925050602061315085828601613105565b9150509250929050565b60008115159050919050565b61316f8161315a565b82525050565b600060208201905061318a6000830184613166565b92915050565b6000602082840312156131a6576131a5613081565b5b60006131b4848285016130cf565b91505092915050565b6000819050919050565b60006131e26131dd6131d884613086565b6131bd565b613086565b9050919050565b60006131f4826131c7565b9050919050565b6000613206826131e9565b9050919050565b613216816131fb565b82525050565b6000602082019050613231600083018461320d565b92915050565b613240816130e4565b82525050565b600060208201905061325b6000830184613237565b92915050565b60008060006060848603121561327a57613279613081565b5b6000613288868287016130cf565b9350506020613299868287016130cf565b92505060406132aa86828701613105565b9150509250925092565b600061ffff82169050919050565b6132cb816132b4565b82525050565b60006040820190506132e660008301856132c2565b6132f360208301846132c2565b9392505050565b600060ff82169050919050565b613310816132fa565b82525050565b600060208201905061332b6000830184613307565b92915050565b61333a816130a6565b82525050565b60006020820190506133556000830184613331565b92915050565b6133648161315a565b811461336f57600080fd5b50565b6000813590506133818161335b565b92915050565b6000806040838503121561339e5761339d613081565b5b60006133ac858286016130cf565b92505060206133bd85828601613372565b9150509250929050565b6000602082840312156133dd576133dc613081565b5b60006133eb84828501613105565b91505092915050565b6000806040838503121561340b5761340a613081565b5b6000613419858286016130cf565b925050602061342a858286016130cf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061347b57607f821691505b60208210810361348e5761348d613434565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006134f0602883612fda565b91506134fb82613494565b604082019050919050565b6000602082019050818103600083015261351f816134e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613560826130e4565b915061356b836130e4565b925082820190508082111561358357613582613526565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135bf602083612fda565b91506135ca82613589565b602082019050919050565b600060208201905081810360008301526135ee816135b2565b9050919050565b7f45524332303a2054686520556e697377617020706169722063616e6e6f74206260008201527f652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d6160208201527f6b65725061697273000000000000000000000000000000000000000000000000604082015250565b6000613677604883612fda565b9150613682826135f5565b606082019050919050565b600060208201905081810360008301526136a68161366a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613709602583612fda565b9150613714826136ad565b604082019050919050565b60006020820190508181036000830152613738816136fc565b9050919050565b600061374a826130e4565b9150613755836130e4565b9250828202613763816130e4565b9150828204841483151761377a57613779613526565b5b5092915050565b7f45524332303a204163636f756e7420697320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b60006137dd603183612fda565b91506137e882613781565b604082019050919050565b6000602082019050818103600083015261380c816137d0565b9050919050565b7f45524332303a2054686520726f7574657220616c72656164792068617320746860008201527f6174206164647265737300000000000000000000000000000000000000000000602082015250565b600061386f602a83612fda565b915061387a82613813565b604082019050919050565b6000602082019050818103600083015261389e81613862565b9050919050565b6000815190506138b4816130b8565b92915050565b6000602082840312156138d0576138cf613081565b5b60006138de848285016138a5565b91505092915050565b60006040820190506138fc6000830185613331565b6139096020830184613331565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061396c602683612fda565b915061397782613910565b604082019050919050565b6000602082019050818103600083015261399b8161395f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139fe602483612fda565b9150613a09826139a2565b604082019050919050565b60006020820190508181036000830152613a2d816139f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a90602283612fda565b9150613a9b82613a34565b604082019050919050565b60006020820190508181036000830152613abf81613a83565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613b22602583612fda565b9150613b2d82613ac6565b604082019050919050565b60006020820190508181036000830152613b5181613b15565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613bb4602383612fda565b9150613bbf82613b58565b604082019050919050565b60006020820190508181036000830152613be381613ba7565b9050919050565b7f546f6b656e3a20736e697065722063616e277420747261646500000000000000600082015250565b6000613c20601983612fda565b9150613c2b82613bea565b602082019050919050565b60006020820190508181036000830152613c4f81613c13565b9050919050565b7f54726164696e67206e6f7420656e61626c656420796574000000000000000000600082015250565b6000613c8c601783612fda565b9150613c9782613c56565b602082019050919050565b60006020820190508181036000830152613cbb81613c7f565b9050919050565b7f53656c6c206578636565647320706572207472616e73616374696f6e206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d1e602283612fda565b9150613d2982613cc2565b604082019050919050565b60006020820190508181036000830152613d4d81613d11565b9050919050565b7f427579206578636565647320706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613db0602183612fda565b9150613dbb82613d54565b604082019050919050565b60006020820190508181036000830152613ddf81613da3565b9050919050565b6000613df1826130e4565b9150613dfc836130e4565b9250828203905081811115613e1457613e13613526565b5b92915050565b7f416e74697768616c653a2042616c616e63652065786365656473206c696d6974600082015250565b6000613e50602083612fda565b9150613e5b82613e1a565b602082019050919050565b60006020820190508181036000830152613e7f81613e43565b9050919050565b7f45524332303a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b6000613ee2603f83612fda565b9150613eed82613e86565b604082019050919050565b60006020820190508181036000830152613f1181613ed5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f74602583612fda565b9150613f7f82613f18565b604082019050919050565b60006020820190508181036000830152613fa381613f67565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614006602383612fda565b915061401182613faa565b604082019050919050565b6000602082019050818103600083015261403581613ff9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614098602683612fda565b91506140a38261403c565b604082019050919050565b600060208201905081810360008301526140c78161408b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061415161414c6141478461412c565b6131bd565b6130e4565b9050919050565b61416181614136565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61419c816130a6565b82525050565b60006141ae8383614193565b60208301905092915050565b6000602082019050919050565b60006141d282614167565b6141dc8185614172565b93506141e783614183565b8060005b838110156142185781516141ff88826141a2565b975061420a836141ba565b9250506001810190506141eb565b5085935050505092915050565b600060808201905061423a6000830187614158565b818103602083015261424c81866141c7565b905061425b6040830185613331565b6142686060830184613237565b95945050505050565b600061427c826132b4565b9150614287836132b4565b9250828201905061ffff8111156142a1576142a0613526565b5b92915050565b600081905092915050565b50565b60006142c26000836142a7565b91506142cd826142b2565b600082019050919050565b60006142e3826142b5565b9150819050919050565b7f657468207472616e7366657220746f206d61726b6574696e672077616c6c657460008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000614349602783612fda565b9150614354826142ed565b604082019050919050565b600060208201905081810360008301526143788161433c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143b9826130e4565b91506143c4836130e4565b9250826143d4576143d361437f565b5b828204905092915050565b600060a0820190506143f46000830188613237565b6144016020830187614158565b818103604083015261441381866141c7565b90506144226060830185613331565b61442f6080830184613237565b969550505050505056fea2646970667358221220d37ff991538dbc6bc1c9fc66ad085f7749ce7ff6bd41a93f477a56b6604be1f364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c80637537a47f1161010d578063a9059cbb116100a0578063c02466681161006f578063c02466681461075e578063c851cc3214610787578063dd62ed3e146107b0578063e2f45605146107ed578063f2fde38b1461081857610204565b8063a9059cbb14610690578063aa4bde28146106cd578063afa4f3b2146106f8578063b62496f51461072157610204565b80638da5cb5b116100dc5780638da5cb5b146105d457806395d89b41146105ff5780639a7a23d61461062a578063a457c2d71461065357610204565b80637537a47f1461053e578063790ca4131461056757806388e765ff146105925780638a8c523c146105bd57610204565b8063313ce567116101905780634fbee1931161015f5780634fbee1931461045757806366d602ae146104945780636ddd1713146104bf57806370a08231146104ea578063715018a61461052757610204565b8063313ce5671461039857806339509351146103c3578063470624021461040057806349bd5a5e1461042c57610204565b806318160ddd116101cc57806318160ddd146102d9578063220923e31461030457806323b872dd1461032f5780632b14ca561461036c57610204565b806306fdde0314610209578063095ea7b3146102345780630f3a325f146102715780631694505e146102ae57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610841565b60405161022b919061305f565b60405180910390f35b34801561024057600080fd5b5061025b6004803603810190610256919061311a565b6108d3565b6040516102689190613175565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613190565b6108f1565b6040516102a59190613175565b60405180910390f35b3480156102ba57600080fd5b506102c3610911565b6040516102d0919061321c565b60405180910390f35b3480156102e557600080fd5b506102ee610937565b6040516102fb9190613246565b60405180910390f35b34801561031057600080fd5b50610319610941565b6040516103269190613246565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190613261565b610947565b6040516103639190613175565b60405180910390f35b34801561037857600080fd5b50610381610a3f565b60405161038f9291906132d1565b60405180910390f35b3480156103a457600080fd5b506103ad610a6d565b6040516103ba9190613316565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e5919061311a565b610a76565b6040516103f79190613175565b60405180910390f35b34801561040c57600080fd5b50610415610b22565b6040516104239291906132d1565b60405180910390f35b34801561043857600080fd5b50610441610b50565b60405161044e9190613340565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613190565b610b76565b60405161048b9190613175565b60405180910390f35b3480156104a057600080fd5b506104a9610bcc565b6040516104b69190613246565b60405180910390f35b3480156104cb57600080fd5b506104d4610bd2565b6040516104e19190613175565b60405180910390f35b3480156104f657600080fd5b50610511600480360381019061050c9190613190565b610be5565b60405161051e9190613246565b60405180910390f35b34801561053357600080fd5b5061053c610c2d565b005b34801561054a57600080fd5b5061056560048036038101906105609190613387565b610cb5565b005b34801561057357600080fd5b5061057c610d8c565b6040516105899190613246565b60405180910390f35b34801561059e57600080fd5b506105a7610d92565b6040516105b49190613246565b60405180910390f35b3480156105c957600080fd5b506105d2610d98565b005b3480156105e057600080fd5b506105e9610e38565b6040516105f69190613340565b60405180910390f35b34801561060b57600080fd5b50610614610e62565b604051610621919061305f565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190613387565b610ef4565b005b34801561065f57600080fd5b5061067a6004803603810190610675919061311a565b61100e565b6040516106879190613175565b60405180910390f35b34801561069c57600080fd5b506106b760048036038101906106b2919061311a565b6110f9565b6040516106c49190613175565b60405180910390f35b3480156106d957600080fd5b506106e2611117565b6040516106ef9190613246565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a91906133c7565b61111d565b005b34801561072d57600080fd5b5061074860048036038101906107439190613190565b6111b6565b6040516107559190613175565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190613387565b6111d6565b005b34801561079357600080fd5b506107ae60048036038101906107a99190613190565b61138d565b005b3480156107bc57600080fd5b506107d760048036038101906107d291906133f4565b6118d7565b6040516107e49190613246565b60405180910390f35b3480156107f957600080fd5b5061080261195e565b60405161080f9190613246565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613190565b611964565b005b60606003805461085090613463565b80601f016020809104026020016040519081016040528092919081815260200182805461087c90613463565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b60006108e76108e0611a5b565b8484611a63565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60105481565b6000610954848484611c2c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061099f611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1690613506565b60405180910390fd5b610a3385610a2b611a5b565b858403611a63565b60019150509392505050565b60098060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b60006012905090565b6000610b18610a83611a5b565b848460016000610a91611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b139190613555565b611a63565b6001905092915050565b60088060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b601160009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c35611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610c53610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca0906135d5565b60405180910390fd5b610cb36000612488565b565b610cbd611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610cdb610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906135d5565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600b5481565b610da0611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610dbe610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906135d5565b60405180910390fd5b6001601160016101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7190613463565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9d90613463565b8015610eea5780601f10610ebf57610100808354040283529160200191610eea565b820191906000526020600020905b815481529060010190602001808311610ecd57829003601f168201915b5050505050905090565b610efc611a5b565b73ffffffffffffffffffffffffffffffffffffffff16610f1a610e38565b73ffffffffffffffffffffffffffffffffffffffff1614610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f67906135d5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061368d565b60405180910390fd5b61100a828261254e565b5050565b6000806001600061101d611a5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d19061371f565b60405180910390fd5b6110ee6110e5611a5b565b85858403611a63565b600191505092915050565b600061110d611106611a5b565b8484611c2c565b6001905092915050565b600d5481565b611125611a5b565b73ffffffffffffffffffffffffffffffffffffffff16611143610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906135d5565b60405180910390fd5b670de0b6b3a7640000816111ad919061373f565b600a8190555050565b60146020528060005260406000206000915054906101000a900460ff1681565b6111de611a5b565b73ffffffffffffffffffffffffffffffffffffffff166111fc610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611252576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611249906135d5565b60405180910390fd5b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db906137f3565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113819190613175565b60405180910390a25050565b611395611a5b565b73ffffffffffffffffffffffffffffffffffffffff166113b3610e38565b73ffffffffffffffffffffffffffffffffffffffff1614611409576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611400906135d5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090613885565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156d91906138ba565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161a91906138ba565b6040518363ffffffff1660e01b81526004016116379291906138e7565b602060405180830381865afa158015611654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167891906138ba565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f91906138ba565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ec91906138ba565b6040518363ffffffff1660e01b81526004016118099291906138e7565b6020604051808303816000875af1158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c91906138ba565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118d3565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b61196c611a5b565b73ffffffffffffffffffffffffffffffffffffffff1661198a610e38565b73ffffffffffffffffffffffffffffffffffffffff16146119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d7906135d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613982565b60405180910390fd5b611a5881612488565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990613a14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3890613aa6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c1f9190613246565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290613b38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190613bca565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90613c36565b60405180910390fd5b601160019054906101000a900460ff1680611dfb5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190613ca2565b60405180910390fd5b60008103611e5357611e4e83836000612681565b612483565b6000611e5e30610be5565b90506000600a548210159050600760149054906101000a900460ff16158015611ed55750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611efa576000479050601054811115611ef857611ef760105461dead61290a565b5b505b601160009054906101000a900460ff168015611f235750600760149054906101000a900460ff16155b8015611f7d5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f865750805b15611f9b576000829050611f9981612b83565b505b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120425750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561204c57600090505b8015612474576000601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120c257600e60029054906101000a900461ffff1661ffff16905061212d565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561212c57600e60009054906101000a900461ffff1661ffff1690505b5b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121d15750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561242657601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561227257600c5485111561226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490613d34565b60405180910390fd5b61237b565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561237a57600b54851115612309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230090613dc6565b60405180910390fd5b61012c600f544261231a9190613de6565b1015612379576001601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661242557600d54856123d988610be5565b6123e39190613555565b1115612424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241b90613e66565b60405180910390fd5b5b5b600061244f6103e86124418489612d4090919063ffffffff16565b612d5690919063ffffffff16565b90506124648187612d6c90919063ffffffff16565b9550612471883083612681565b50505b61247f868686612681565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790613ef8565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e790613f8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361275f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127569061401c565b60405180910390fd5b61276a838383612d82565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e7906140ae565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128839190613555565b9250508190555060008211156128f9578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f09190613246565b60405180910390a35b612904848484612d87565b50505050565b6001600760146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612942576129416140ce565b5b6040519080825280602002602001820160405280156129705781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0491906138ba565b81600081518110612a1857612a176140fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612a6757612a666140fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401612b049493929190614225565b6000604051808303818588803b158015612b1d57600080fd5b505af1158015612b31573d6000803e3d6000fd5b5050505050827ffcfa54313b92fceed71362d6bfec038726e592d2fa73d69c461986eeedf7440060405160405180910390a2506000600760146101000a81548160ff0219169083151502179055505050565b6001600760146101000a81548160ff0219169083151502179055506000479050612bac82612d8c565b6000612bc18247612d6c90919063ffffffff16565b90506000612c4e600e60029054906101000a900461ffff16600e60009054906101000a900461ffff16612bf49190614271565b61ffff16612c40600960000160009054906101000a900461ffff16600860000160009054906101000a900461ffff16612c2d9190614271565b61ffff1685612d4090919063ffffffff16565b612d5690919063ffffffff16565b90506000601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612c98906142d8565b60006040518083038185875af1925050503d8060008114612cd5576040519150601f19603f3d011682016040523d82523d6000602084013e612cda565b606091505b5050905080612d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d159061435f565b60405180910390fd5b505050506000600760146101000a81548160ff02191690831515021790555050565b60008183612d4e919061373f565b905092915050565b60008183612d6491906143ae565b905092915050565b60008183612d7a9190613de6565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612da957612da86140ce565b5b604051908082528060200260200182016040528015612dd75781602001602082028036833780820191505090505b5090503081600081518110612def57612dee6140fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eba91906138ba565b81600181518110612ece57612ecd6140fd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f3530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a63565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f999594939291906143df565b600060405180830381600087803b158015612fb357600080fd5b505af1158015612fc7573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613009578082015181840152602081019050612fee565b60008484015250505050565b6000601f19601f8301169050919050565b600061303182612fcf565b61303b8185612fda565b935061304b818560208601612feb565b61305481613015565b840191505092915050565b600060208201905081810360008301526130798184613026565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130b182613086565b9050919050565b6130c1816130a6565b81146130cc57600080fd5b50565b6000813590506130de816130b8565b92915050565b6000819050919050565b6130f7816130e4565b811461310257600080fd5b50565b600081359050613114816130ee565b92915050565b6000806040838503121561313157613130613081565b5b600061313f858286016130cf565b925050602061315085828601613105565b9150509250929050565b60008115159050919050565b61316f8161315a565b82525050565b600060208201905061318a6000830184613166565b92915050565b6000602082840312156131a6576131a5613081565b5b60006131b4848285016130cf565b91505092915050565b6000819050919050565b60006131e26131dd6131d884613086565b6131bd565b613086565b9050919050565b60006131f4826131c7565b9050919050565b6000613206826131e9565b9050919050565b613216816131fb565b82525050565b6000602082019050613231600083018461320d565b92915050565b613240816130e4565b82525050565b600060208201905061325b6000830184613237565b92915050565b60008060006060848603121561327a57613279613081565b5b6000613288868287016130cf565b9350506020613299868287016130cf565b92505060406132aa86828701613105565b9150509250925092565b600061ffff82169050919050565b6132cb816132b4565b82525050565b60006040820190506132e660008301856132c2565b6132f360208301846132c2565b9392505050565b600060ff82169050919050565b613310816132fa565b82525050565b600060208201905061332b6000830184613307565b92915050565b61333a816130a6565b82525050565b60006020820190506133556000830184613331565b92915050565b6133648161315a565b811461336f57600080fd5b50565b6000813590506133818161335b565b92915050565b6000806040838503121561339e5761339d613081565b5b60006133ac858286016130cf565b92505060206133bd85828601613372565b9150509250929050565b6000602082840312156133dd576133dc613081565b5b60006133eb84828501613105565b91505092915050565b6000806040838503121561340b5761340a613081565b5b6000613419858286016130cf565b925050602061342a858286016130cf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061347b57607f821691505b60208210810361348e5761348d613434565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006134f0602883612fda565b91506134fb82613494565b604082019050919050565b6000602082019050818103600083015261351f816134e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613560826130e4565b915061356b836130e4565b925082820190508082111561358357613582613526565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135bf602083612fda565b91506135ca82613589565b602082019050919050565b600060208201905081810360008301526135ee816135b2565b9050919050565b7f45524332303a2054686520556e697377617020706169722063616e6e6f74206260008201527f652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d6160208201527f6b65725061697273000000000000000000000000000000000000000000000000604082015250565b6000613677604883612fda565b9150613682826135f5565b606082019050919050565b600060208201905081810360008301526136a68161366a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613709602583612fda565b9150613714826136ad565b604082019050919050565b60006020820190508181036000830152613738816136fc565b9050919050565b600061374a826130e4565b9150613755836130e4565b9250828202613763816130e4565b9150828204841483151761377a57613779613526565b5b5092915050565b7f45524332303a204163636f756e7420697320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b60006137dd603183612fda565b91506137e882613781565b604082019050919050565b6000602082019050818103600083015261380c816137d0565b9050919050565b7f45524332303a2054686520726f7574657220616c72656164792068617320746860008201527f6174206164647265737300000000000000000000000000000000000000000000602082015250565b600061386f602a83612fda565b915061387a82613813565b604082019050919050565b6000602082019050818103600083015261389e81613862565b9050919050565b6000815190506138b4816130b8565b92915050565b6000602082840312156138d0576138cf613081565b5b60006138de848285016138a5565b91505092915050565b60006040820190506138fc6000830185613331565b6139096020830184613331565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061396c602683612fda565b915061397782613910565b604082019050919050565b6000602082019050818103600083015261399b8161395f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006139fe602483612fda565b9150613a09826139a2565b604082019050919050565b60006020820190508181036000830152613a2d816139f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a90602283612fda565b9150613a9b82613a34565b604082019050919050565b60006020820190508181036000830152613abf81613a83565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613b22602583612fda565b9150613b2d82613ac6565b604082019050919050565b60006020820190508181036000830152613b5181613b15565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613bb4602383612fda565b9150613bbf82613b58565b604082019050919050565b60006020820190508181036000830152613be381613ba7565b9050919050565b7f546f6b656e3a20736e697065722063616e277420747261646500000000000000600082015250565b6000613c20601983612fda565b9150613c2b82613bea565b602082019050919050565b60006020820190508181036000830152613c4f81613c13565b9050919050565b7f54726164696e67206e6f7420656e61626c656420796574000000000000000000600082015250565b6000613c8c601783612fda565b9150613c9782613c56565b602082019050919050565b60006020820190508181036000830152613cbb81613c7f565b9050919050565b7f53656c6c206578636565647320706572207472616e73616374696f6e206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d1e602283612fda565b9150613d2982613cc2565b604082019050919050565b60006020820190508181036000830152613d4d81613d11565b9050919050565b7f427579206578636565647320706572207472616e73616374696f6e206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613db0602183612fda565b9150613dbb82613d54565b604082019050919050565b60006020820190508181036000830152613ddf81613da3565b9050919050565b6000613df1826130e4565b9150613dfc836130e4565b9250828203905081811115613e1457613e13613526565b5b92915050565b7f416e74697768616c653a2042616c616e63652065786365656473206c696d6974600082015250565b6000613e50602083612fda565b9150613e5b82613e1a565b602082019050919050565b60006020820190508181036000830152613e7f81613e43565b9050919050565b7f45524332303a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b6000613ee2603f83612fda565b9150613eed82613e86565b604082019050919050565b60006020820190508181036000830152613f1181613ed5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f74602583612fda565b9150613f7f82613f18565b604082019050919050565b60006020820190508181036000830152613fa381613f67565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614006602383612fda565b915061401182613faa565b604082019050919050565b6000602082019050818103600083015261403581613ff9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614098602683612fda565b91506140a38261403c565b604082019050919050565b600060208201905081810360008301526140c78161408b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061415161414c6141478461412c565b6131bd565b6130e4565b9050919050565b61416181614136565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61419c816130a6565b82525050565b60006141ae8383614193565b60208301905092915050565b6000602082019050919050565b60006141d282614167565b6141dc8185614172565b93506141e783614183565b8060005b838110156142185781516141ff88826141a2565b975061420a836141ba565b9250506001810190506141eb565b5085935050505092915050565b600060808201905061423a6000830187614158565b818103602083015261424c81866141c7565b905061425b6040830185613331565b6142686060830184613237565b95945050505050565b600061427c826132b4565b9150614287836132b4565b9250828201905061ffff8111156142a1576142a0613526565b5b92915050565b600081905092915050565b50565b60006142c26000836142a7565b91506142cd826142b2565b600082019050919050565b60006142e3826142b5565b9150819050919050565b7f657468207472616e7366657220746f206d61726b6574696e672077616c6c657460008201527f206661696c656400000000000000000000000000000000000000000000000000602082015250565b6000614349602783612fda565b9150614354826142ed565b604082019050919050565b600060208201905081810360008301526143788161433c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143b9826130e4565b91506143c4836130e4565b9250826143d4576143d361437f565b5b828204905092915050565b600060a0820190506143f46000830188613237565b6144016020830187614158565b818103604083015261441381866141c7565b90506144226060830185613331565b61442f6080830184613237565b969550505050505056fea2646970667358221220d37ff991538dbc6bc1c9fc66ad085f7749ce7ff6bd41a93f477a56b6604be1f364736f6c63430008110033

Deployed Bytecode Sourcemap

35445:11732:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25390:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27557:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36766:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35518:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26510:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36325:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28208:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35861:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;26352:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29109:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35834:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35566:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42392:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36050:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36371:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26681:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18800:103;;;;;;;;;;;;;:::i;:::-;;41366:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36293:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35966:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41534:134;;;;;;;;;;;;;:::i;:::-;;18149:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25609:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41676:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29827:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27021:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36134:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42580:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36702:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41015:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40378:629;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27259:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35900:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19058:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25390:100;25444:13;25477:5;25470:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25390:100;:::o;27557:169::-;27640:4;27657:39;27666:12;:10;:12::i;:::-;27680:7;27689:6;27657:8;:39::i;:::-;27714:4;27707:11;;27557:169;;;;:::o;36766:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;35518:41::-;;;;;;;;;;;;;:::o;26510:108::-;26571:7;26598:12;;26591:19;;26510:108;:::o;36325:31::-;;;;:::o;28208:492::-;28348:4;28365:36;28375:6;28383:9;28394:6;28365:9;:36::i;:::-;28414:24;28441:11;:19;28453:6;28441:19;;;;;;;;;;;;;;;:33;28461:12;:10;:12::i;:::-;28441:33;;;;;;;;;;;;;;;;28414:60;;28513:6;28493:16;:26;;28485:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;28600:57;28609:6;28617:12;:10;:12::i;:::-;28650:6;28631:16;:25;28600:8;:57::i;:::-;28688:4;28681:11;;;28208:492;;;;;:::o;35861:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26352:93::-;26410:5;26435:2;26428:9;;26352:93;:::o;29109:215::-;29197:4;29214:80;29223:12;:10;:12::i;:::-;29237:7;29283:10;29246:11;:25;29258:12;:10;:12::i;:::-;29246:25;;;;;;;;;;;;;;;:34;29272:7;29246:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;29214:8;:80::i;:::-;29312:4;29305:11;;29109:215;;;;:::o;35834:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35566:29::-;;;;;;;;;;;;;:::o;42392:126::-;42458:4;42482:19;:28;42502:7;42482:28;;;;;;;;;;;;;;;;;;;;;;;;;42475:35;;42392:126;;;:::o;36050:49::-;;;;:::o;36371:23::-;;;;;;;;;;;;;:::o;26681:127::-;26755:7;26782:9;:18;26792:7;26782:18;;;;;;;;;;;;;;;;26775:25;;26681:127;;;:::o;18800:103::-;18380:12;:10;:12::i;:::-;18369:23;;:7;:5;:7::i;:::-;:23;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18865:30:::1;18892:1;18865:18;:30::i;:::-;18800:103::o:0;41366:159::-;18380:12;:10;:12::i;:::-;18369:23;;:7;:5;:7::i;:::-;:23;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41509:8:::1;41477:20;:29;41498:7;41477:29;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;41366:159:::0;;:::o;36293:25::-;;;;:::o;35966:48::-;;;;:::o;41534:134::-;18380:12;:10;:12::i;:::-;18369:23;;:7;:5;:7::i;:::-;:23;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41608:4:::1;41589:16;;:23;;;;;;;;;;;;;;;;;;41636:15;41623:10;:28;;;;41534:134::o:0;18149:87::-;18195:7;18222:6;;;;;;;;;;;18215:13;;18149:87;:::o;25609:104::-;25665:13;25698:7;25691:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25609:104;:::o;41676:319::-;18380:12;:10;:12::i;:::-;18369:23;;:7;:5;:7::i;:::-;:23;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41820:13:::1;;;;;;;;;;;41812:21;;:4;:21;;::::0;41790:143:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41946:41;41975:4;41981:5;41946:28;:41::i;:::-;41676:319:::0;;:::o;29827:413::-;29920:4;29937:24;29964:11;:25;29976:12;:10;:12::i;:::-;29964:25;;;;;;;;;;;;;;;:34;29990:7;29964:34;;;;;;;;;;;;;;;;29937:61;;30037:15;30017:16;:35;;30009:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30130:67;30139:12;:10;:12::i;:::-;30153:7;30181:15;30162:16;:34;30130:8;:67::i;:::-;30228:4;30221:11;;;29827:413;;;;:::o;27021:175::-;27107:4;27124:42;27134:12;:10;:12::i;:::-;27148:9;27159:6;27124:9;:42::i;:::-;27184:4;27177:11;;27021:175;;;;:::o;36134:51::-;;;;:::o;42580:121::-;18380:12;:10;:12::i;:::-;18369:23;;:7;:5;:7::i;:::-;:23;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42687:6:::1;42678;:15;;;;:::i;:::-;42656:18;:37;;;;42580:121:::0;:::o;36702:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;41015:334::-;18380:12;:10;:12::i;:::-;18369:23;;:7;:5;:7::i;:::-;:23;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41154:8:::1;41122:40;;:19;:28;41142:7;41122:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;41100:139:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41281:8;41250:19;:28;41270:7;41250:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41323:7;41307:34;;;41332:8;41307:34;;;;;;:::i;:::-;;;;;;;;41015:334:::0;;:::o;40378:629::-;18380:12;:10;:12::i;:::-;18369:23;;:7;:5;:7::i;:::-;:23;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40476:15:::1;;;;;;;;;;;40454:38;;:10;:38;;::::0;40446:93:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40591:10;40554:15;;:48;;;;;;;;;;;;;;;;;;40614:16;40664:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40646:52;;;40707:4;40727:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40646:104;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40614:136;;40785:1;40765:22;;:8;:22;;::::0;40761:239:::1;;40849:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40831:55;;;40895:4;40916:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40831:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40802:13;;:137;;;;;;;;;;;;;;;;;;40761:239;;;40980:8;40964:13;;:24;;;;;;;;;;;;;;;;;;40761:239;40439:568;40378:629:::0;:::o;27259:151::-;27348:7;27375:11;:18;27387:5;27375:18;;;;;;;;;;;;;;;:27;27394:7;27375:27;;;;;;;;;;;;;;;;27368:34;;27259:151;;;;:::o;35900:56::-;;;;:::o;19058:201::-;18380:12;:10;:12::i;:::-;18369:23;;:7;:5;:7::i;:::-;:23;;;18361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19167:1:::1;19147:22;;:8;:22;;::::0;19139:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19223:28;19242:8;19223:18;:28::i;:::-;19058:201:::0;:::o;16871:98::-;16924:7;16951:10;16944:17;;16871:98;:::o;33541:380::-;33694:1;33677:19;;:5;:19;;;33669:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33775:1;33756:21;;:7;:21;;;33748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33859:6;33829:11;:18;33841:5;33829:18;;;;;;;;;;;;;;;:27;33848:7;33829:27;;;;;;;;;;;;;;;:36;;;;33897:7;33881:32;;33890:5;33881:32;;;33906:6;33881:32;;;;;;:::i;:::-;;;;;;;;33541:380;;;:::o;42709:2850::-;42857:1;42841:18;;:4;:18;;;42833:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42934:1;42920:16;;:2;:16;;;42912:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42996:8;:14;43005:4;42996:14;;;;;;;;;;;;;;;;;;;;;;;;;42995:15;42987:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43069:16;;;;;;;;;;;:45;;;;43089:19;:25;43109:4;43089:25;;;;;;;;;;;;;;;;;;;;;;;;;43069:45;43060:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;43192:1;43182:6;:11;43178:93;;43210:28;43226:4;43232:2;43236:1;43210:15;:28::i;:::-;43253:7;;43178:93;43295:28;43326:24;43344:4;43326:9;:24::i;:::-;43295:55;;43361:28;43429:18;;43392:20;:55;;43361:86;;43465:8;;;;;;;;;;;43464:9;:35;;;;;43486:13;;;;;;;;;;;43478:21;;:4;:21;;;;43464:35;43460:243;;;43516:15;43534:21;43516:39;;43584:16;;43574:7;:26;43570:122;;;43621:55;43642:16;;43668:6;43621:20;:55::i;:::-;43570:122;43501:202;43460:243;43737:11;;;;;;;;;;;:37;;;;;43766:8;;;;;;;;;;;43765:9;43737:37;:75;;;;;43799:13;;;;;;;;;;;43791:21;;:4;:21;;;;43737:75;:115;;;;;43829:23;43737:115;43719:288;;;43893:18;43914:20;43893:41;;43949:44;43982:10;43949:32;:44::i;:::-;43864:143;43719:288;44019:12;44034:4;44019:19;;44140;:25;44160:4;44140:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44169:19;:23;44189:2;44169:23;;;;;;;;;;;;;;;;;;;;;;;;;44140:52;44136:101;;;44220:5;44210:15;;44136:101;44253:7;44249:1257;;;44277:12;44324:25;:29;44350:2;44324:29;;;;;;;;;;;;;;;;;;;;;;;;;44320:185;;;44381:12;;;;;;;;;;;44374:19;;;;44320:185;;;44419:25;:31;44445:4;44419:31;;;;;;;;;;;;;;;;;;;;;;;;;44415:90;;;44478:11;;;;;;;;;;;44471:18;;;;44415:90;44320:185;44526:20;:26;44547:4;44526:26;;;;;;;;;;;;;;;;;;;;;;;;;44525:27;:56;;;;;44557:20;:24;44578:2;44557:24;;;;;;;;;;;;;;;;;;;;;;;;;44556:25;44525:56;44521:802;;;44606:25;:29;44632:2;44606:29;;;;;;;;;;;;;;;;;;;;;;;;;44602:448;;;44678:13;;44668:6;:23;;44660:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44602:448;;;44760:25;:31;44786:4;44760:31;;;;;;;;;;;;;;;;;;;;;;;;;44756:294;;;44832:12;;44822:6;:22;;44814:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44938:3;44925:10;;44907:15;:28;;;;:::i;:::-;:34;44903:107;;;44982:4;44967:8;:12;44976:2;44967:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;44903:107;44756:294;44602:448;45075:25;:29;45101:2;45075:29;;;;;;;;;;;;;;;;;;;;;;;;;45070:238;;45189:15;;45179:6;45163:13;45173:2;45163:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;45129:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;45070:238;44521:802;45339:17;45359:26;45380:4;45359:16;45370:4;45359:6;:10;;:16;;;;:::i;:::-;:20;;:26;;;;:::i;:::-;45339:46;;45409:21;45420:9;45409:6;:10;;:21;;;;:::i;:::-;45400:30;;45447:47;45463:4;45477;45484:9;45447:15;:47::i;:::-;44262:1244;;44249:1257;45518:33;45534:4;45540:2;45544:6;45518:15;:33::i;:::-;42822:2737;;;42709:2850;;;;:::o;19419:191::-;19493:16;19512:6;;;;;;;;;;;19493:25;;19538:8;19529:6;;:17;;;;;;;;;;;;;;;;;;19593:8;19562:40;;19583:8;19562:40;;;;;;;;;;;;19482:128;19419:191;:::o;42003:352::-;42143:5;42108:40;;:25;:31;42134:4;42108:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;42086:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;42284:5;42250:25;:31;42276:4;42250:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42341:5;42307:40;;42335:4;42307:40;;;;;;;;;;;;42003:352;;:::o;30730:763::-;30888:1;30870:20;;:6;:20;;;30862:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30972:1;30951:23;;:9;:23;;;30943:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31027:47;31048:6;31056:9;31067:6;31027:20;:47::i;:::-;31087:21;31111:9;:17;31121:6;31111:17;;;;;;;;;;;;;;;;31087:41;;31164:6;31147:13;:23;;31139:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31285:6;31269:13;:22;31249:9;:17;31259:6;31249:17;;;;;;;;;;;;;;;:42;;;;31337:6;31313:9;:20;31323:9;31313:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;31369:1;31360:6;:10;31356:71;;;31407:9;31390:35;;31399:6;31390:35;;;31418:6;31390:35;;;;;;:::i;:::-;;;;;;;;31356:71;31439:46;31459:6;31467:9;31478:6;31439:19;:46::i;:::-;30851:642;30730:763;;;:::o;46735:439::-;37074:4;37063:8;;:15;;;;;;;;;;;;;;;;;;46824:21:::1;46862:1;46848:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46824:40;;46885:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46875:4;46880:1;46875:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;46936:4;46918;46923:1;46918:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;46954:15;;;;;;;;;;;:66;;;47028:6;47050:1;47066:4;47085:2;47102:15;46954:174;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;47159:6;47144:22;;;;;;;;;;46813:361;37112:5:::0;37101:8;;:16;;;;;;;;;;;;;;;;;;46735:439;;:::o;45567:558::-;37074:4;37063:8;;:15;;;;;;;;;;;;;;;;;;45657:22:::1;45682:21;45657:46;;45714:24;45731:6;45714:16;:24::i;:::-;45749:18;45770:41;45796:14;45770:21;:25;;:41;;;;:::i;:::-;45749:62;;45822:22;45847:125;45959:12;;;;;;;;;;;45945:11;;;;;;;;;;;:26;;;;:::i;:::-;45847:125;;:58;45884:7;:20;;;;;;;;;;;;45862:6;:19;;;;;;;;;;;;:42;;;;:::i;:::-;45847:58;;:10;:14;;:58;;;;:::i;:::-;:97;;:125;;;;:::i;:::-;45822:150;;45983:7;46004:15;;;;;;;;;;;45996:29;;46033:14;45996:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45982:70;;;46070:2;46062:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45646:479;;;;37112:5:::0;37101:8;;:16;;;;;;;;;;;;;;;;;;45567:558;:::o;12765:98::-;12823:7;12854:1;12850;:5;;;;:::i;:::-;12843:12;;12765:98;;;;:::o;13164:::-;13222:7;13253:1;13249;:5;;;;:::i;:::-;13242:12;;13164:98;;;;:::o;12408:::-;12466:7;12497:1;12493;:5;;;;:::i;:::-;12486:12;;12408:98;;;;:::o;34521:125::-;;;;:::o;35250:124::-;;;;:::o;46138:589::-;46264:21;46302:1;46288:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46264:40;;46333:4;46315;46320:1;46315:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46359:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46349:4;46354:1;46349:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46394:62;46411:4;46426:15;;;;;;;;;;;46444:11;46394:8;:62::i;:::-;46495:15;;;;;;;;;;;:66;;;46576:11;46602:1;46646:4;46673;46693:15;46495:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46193:534;46138:589;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:152::-;4203:9;4236:37;4267:5;4236:37;:::i;:::-;4223:50;;4127:152;;;:::o;4285:183::-;4398:63;4455:5;4398:63;:::i;:::-;4393:3;4386:76;4285:183;;:::o;4474:274::-;4593:4;4631:2;4620:9;4616:18;4608:26;;4644:97;4738:1;4727:9;4723:17;4714:6;4644:97;:::i;:::-;4474:274;;;;:::o;4754:118::-;4841:24;4859:5;4841:24;:::i;:::-;4836:3;4829:37;4754:118;;:::o;4878:222::-;4971:4;5009:2;4998:9;4994:18;4986:26;;5022:71;5090:1;5079:9;5075:17;5066:6;5022:71;:::i;:::-;4878:222;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:89::-;5767:7;5807:6;5800:5;5796:18;5785:29;;5731:89;;;:::o;5826:115::-;5911:23;5928:5;5911:23;:::i;:::-;5906:3;5899:36;5826:115;;:::o;5947:324::-;6064:4;6102:2;6091:9;6087:18;6079:26;;6115:69;6181:1;6170:9;6166:17;6157:6;6115:69;:::i;:::-;6194:70;6260:2;6249:9;6245:18;6236:6;6194:70;:::i;:::-;5947:324;;;;;:::o;6277:86::-;6312:7;6352:4;6345:5;6341:16;6330:27;;6277:86;;;:::o;6369:112::-;6452:22;6468:5;6452:22;:::i;:::-;6447:3;6440:35;6369:112;;:::o;6487:214::-;6576:4;6614:2;6603:9;6599:18;6591:26;;6627:67;6691:1;6680:9;6676:17;6667:6;6627:67;:::i;:::-;6487:214;;;;:::o;6707:118::-;6794:24;6812:5;6794:24;:::i;:::-;6789:3;6782:37;6707:118;;:::o;6831:222::-;6924:4;6962:2;6951:9;6947:18;6939:26;;6975:71;7043:1;7032:9;7028:17;7019:6;6975:71;:::i;:::-;6831:222;;;;:::o;7059:116::-;7129:21;7144:5;7129:21;:::i;:::-;7122:5;7119:32;7109:60;;7165:1;7162;7155:12;7109:60;7059:116;:::o;7181:133::-;7224:5;7262:6;7249:20;7240:29;;7278:30;7302:5;7278:30;:::i;:::-;7181:133;;;;:::o;7320:468::-;7385:6;7393;7442:2;7430:9;7421:7;7417:23;7413:32;7410:119;;;7448:79;;:::i;:::-;7410:119;7568:1;7593:53;7638:7;7629:6;7618:9;7614:22;7593:53;:::i;:::-;7583:63;;7539:117;7695:2;7721:50;7763:7;7754:6;7743:9;7739:22;7721:50;:::i;:::-;7711:60;;7666:115;7320:468;;;;;:::o;7794:329::-;7853:6;7902:2;7890:9;7881:7;7877:23;7873:32;7870:119;;;7908:79;;:::i;:::-;7870:119;8028:1;8053:53;8098:7;8089:6;8078:9;8074:22;8053:53;:::i;:::-;8043:63;;7999:117;7794:329;;;;:::o;8129:474::-;8197:6;8205;8254:2;8242:9;8233:7;8229:23;8225:32;8222:119;;;8260:79;;:::i;:::-;8222:119;8380:1;8405:53;8450:7;8441:6;8430:9;8426:22;8405:53;:::i;:::-;8395:63;;8351:117;8507:2;8533:53;8578:7;8569:6;8558:9;8554:22;8533:53;:::i;:::-;8523:63;;8478:118;8129:474;;;;;:::o;8609:180::-;8657:77;8654:1;8647:88;8754:4;8751:1;8744:15;8778:4;8775:1;8768:15;8795:320;8839:6;8876:1;8870:4;8866:12;8856:22;;8923:1;8917:4;8913:12;8944:18;8934:81;;9000:4;8992:6;8988:17;8978:27;;8934:81;9062:2;9054:6;9051:14;9031:18;9028:38;9025:84;;9081:18;;:::i;:::-;9025:84;8846:269;8795:320;;;:::o;9121:227::-;9261:34;9257:1;9249:6;9245:14;9238:58;9330:10;9325:2;9317:6;9313:15;9306:35;9121:227;:::o;9354:366::-;9496:3;9517:67;9581:2;9576:3;9517:67;:::i;:::-;9510:74;;9593:93;9682:3;9593:93;:::i;:::-;9711:2;9706:3;9702:12;9695:19;;9354:366;;;:::o;9726:419::-;9892:4;9930:2;9919:9;9915:18;9907:26;;9979:9;9973:4;9969:20;9965:1;9954:9;9950:17;9943:47;10007:131;10133:4;10007:131;:::i;:::-;9999:139;;9726:419;;;:::o;10151:180::-;10199:77;10196:1;10189:88;10296:4;10293:1;10286:15;10320:4;10317:1;10310:15;10337:191;10377:3;10396:20;10414:1;10396:20;:::i;:::-;10391:25;;10430:20;10448:1;10430:20;:::i;:::-;10425:25;;10473:1;10470;10466:9;10459:16;;10494:3;10491:1;10488:10;10485:36;;;10501:18;;:::i;:::-;10485:36;10337:191;;;;:::o;10534:182::-;10674:34;10670:1;10662:6;10658:14;10651:58;10534:182;:::o;10722:366::-;10864:3;10885:67;10949:2;10944:3;10885:67;:::i;:::-;10878:74;;10961:93;11050:3;10961:93;:::i;:::-;11079:2;11074:3;11070:12;11063:19;;10722:366;;;:::o;11094:419::-;11260:4;11298:2;11287:9;11283:18;11275:26;;11347:9;11341:4;11337:20;11333:1;11322:9;11318:17;11311:47;11375:131;11501:4;11375:131;:::i;:::-;11367:139;;11094:419;;;:::o;11519:296::-;11659:34;11655:1;11647:6;11643:14;11636:58;11728:34;11723:2;11715:6;11711:15;11704:59;11797:10;11792:2;11784:6;11780:15;11773:35;11519:296;:::o;11821:366::-;11963:3;11984:67;12048:2;12043:3;11984:67;:::i;:::-;11977:74;;12060:93;12149:3;12060:93;:::i;:::-;12178:2;12173:3;12169:12;12162:19;;11821:366;;;:::o;12193:419::-;12359:4;12397:2;12386:9;12382:18;12374:26;;12446:9;12440:4;12436:20;12432:1;12421:9;12417:17;12410:47;12474:131;12600:4;12474:131;:::i;:::-;12466:139;;12193:419;;;:::o;12618:224::-;12758:34;12754:1;12746:6;12742:14;12735:58;12827:7;12822:2;12814:6;12810:15;12803:32;12618:224;:::o;12848:366::-;12990:3;13011:67;13075:2;13070:3;13011:67;:::i;:::-;13004:74;;13087:93;13176:3;13087:93;:::i;:::-;13205:2;13200:3;13196:12;13189:19;;12848:366;;;:::o;13220:419::-;13386:4;13424:2;13413:9;13409:18;13401:26;;13473:9;13467:4;13463:20;13459:1;13448:9;13444:17;13437:47;13501:131;13627:4;13501:131;:::i;:::-;13493:139;;13220:419;;;:::o;13645:410::-;13685:7;13708:20;13726:1;13708:20;:::i;:::-;13703:25;;13742:20;13760:1;13742:20;:::i;:::-;13737:25;;13797:1;13794;13790:9;13819:30;13837:11;13819:30;:::i;:::-;13808:41;;13998:1;13989:7;13985:15;13982:1;13979:22;13959:1;13952:9;13932:83;13909:139;;14028:18;;:::i;:::-;13909:139;13693:362;13645:410;;;;:::o;14061:236::-;14201:34;14197:1;14189:6;14185:14;14178:58;14270:19;14265:2;14257:6;14253:15;14246:44;14061:236;:::o;14303:366::-;14445:3;14466:67;14530:2;14525:3;14466:67;:::i;:::-;14459:74;;14542:93;14631:3;14542:93;:::i;:::-;14660:2;14655:3;14651:12;14644:19;;14303:366;;;:::o;14675:419::-;14841:4;14879:2;14868:9;14864:18;14856:26;;14928:9;14922:4;14918:20;14914:1;14903:9;14899:17;14892:47;14956:131;15082:4;14956:131;:::i;:::-;14948:139;;14675:419;;;:::o;15100:229::-;15240:34;15236:1;15228:6;15224:14;15217:58;15309:12;15304:2;15296:6;15292:15;15285:37;15100:229;:::o;15335:366::-;15477:3;15498:67;15562:2;15557:3;15498:67;:::i;:::-;15491:74;;15574:93;15663:3;15574:93;:::i;:::-;15692:2;15687:3;15683:12;15676:19;;15335:366;;;:::o;15707:419::-;15873:4;15911:2;15900:9;15896:18;15888:26;;15960:9;15954:4;15950:20;15946:1;15935:9;15931:17;15924:47;15988:131;16114:4;15988:131;:::i;:::-;15980:139;;15707:419;;;:::o;16132:143::-;16189:5;16220:6;16214:13;16205:22;;16236:33;16263:5;16236:33;:::i;:::-;16132:143;;;;:::o;16281:351::-;16351:6;16400:2;16388:9;16379:7;16375:23;16371:32;16368:119;;;16406:79;;:::i;:::-;16368:119;16526:1;16551:64;16607:7;16598:6;16587:9;16583:22;16551:64;:::i;:::-;16541:74;;16497:128;16281:351;;;;:::o;16638:332::-;16759:4;16797:2;16786:9;16782:18;16774:26;;16810:71;16878:1;16867:9;16863:17;16854:6;16810:71;:::i;:::-;16891:72;16959:2;16948:9;16944:18;16935:6;16891:72;:::i;:::-;16638:332;;;;;:::o;16976:225::-;17116:34;17112:1;17104:6;17100:14;17093:58;17185:8;17180:2;17172:6;17168:15;17161:33;16976:225;:::o;17207:366::-;17349:3;17370:67;17434:2;17429:3;17370:67;:::i;:::-;17363:74;;17446:93;17535:3;17446:93;:::i;:::-;17564:2;17559:3;17555:12;17548:19;;17207:366;;;:::o;17579:419::-;17745:4;17783:2;17772:9;17768:18;17760:26;;17832:9;17826:4;17822:20;17818:1;17807:9;17803:17;17796:47;17860:131;17986:4;17860:131;:::i;:::-;17852:139;;17579:419;;;:::o;18004:223::-;18144:34;18140:1;18132:6;18128:14;18121:58;18213:6;18208:2;18200:6;18196:15;18189:31;18004:223;:::o;18233:366::-;18375:3;18396:67;18460:2;18455:3;18396:67;:::i;:::-;18389:74;;18472:93;18561:3;18472:93;:::i;:::-;18590:2;18585:3;18581:12;18574:19;;18233:366;;;:::o;18605:419::-;18771:4;18809:2;18798:9;18794:18;18786:26;;18858:9;18852:4;18848:20;18844:1;18833:9;18829:17;18822:47;18886:131;19012:4;18886:131;:::i;:::-;18878:139;;18605:419;;;:::o;19030:221::-;19170:34;19166:1;19158:6;19154:14;19147:58;19239:4;19234:2;19226:6;19222:15;19215:29;19030:221;:::o;19257:366::-;19399:3;19420:67;19484:2;19479:3;19420:67;:::i;:::-;19413:74;;19496:93;19585:3;19496:93;:::i;:::-;19614:2;19609:3;19605:12;19598:19;;19257:366;;;:::o;19629:419::-;19795:4;19833:2;19822:9;19818:18;19810:26;;19882:9;19876:4;19872:20;19868:1;19857:9;19853:17;19846:47;19910:131;20036:4;19910:131;:::i;:::-;19902:139;;19629:419;;;:::o;20054:224::-;20194:34;20190:1;20182:6;20178:14;20171:58;20263:7;20258:2;20250:6;20246:15;20239:32;20054:224;:::o;20284:366::-;20426:3;20447:67;20511:2;20506:3;20447:67;:::i;:::-;20440:74;;20523:93;20612:3;20523:93;:::i;:::-;20641:2;20636:3;20632:12;20625:19;;20284:366;;;:::o;20656:419::-;20822:4;20860:2;20849:9;20845:18;20837:26;;20909:9;20903:4;20899:20;20895:1;20884:9;20880:17;20873:47;20937:131;21063:4;20937:131;:::i;:::-;20929:139;;20656:419;;;:::o;21081:222::-;21221:34;21217:1;21209:6;21205:14;21198:58;21290:5;21285:2;21277:6;21273:15;21266:30;21081:222;:::o;21309:366::-;21451:3;21472:67;21536:2;21531:3;21472:67;:::i;:::-;21465:74;;21548:93;21637:3;21548:93;:::i;:::-;21666:2;21661:3;21657:12;21650:19;;21309:366;;;:::o;21681:419::-;21847:4;21885:2;21874:9;21870:18;21862:26;;21934:9;21928:4;21924:20;21920:1;21909:9;21905:17;21898:47;21962:131;22088:4;21962:131;:::i;:::-;21954:139;;21681:419;;;:::o;22106:175::-;22246:27;22242:1;22234:6;22230:14;22223:51;22106:175;:::o;22287:366::-;22429:3;22450:67;22514:2;22509:3;22450:67;:::i;:::-;22443:74;;22526:93;22615:3;22526:93;:::i;:::-;22644:2;22639:3;22635:12;22628:19;;22287:366;;;:::o;22659:419::-;22825:4;22863:2;22852:9;22848:18;22840:26;;22912:9;22906:4;22902:20;22898:1;22887:9;22883:17;22876:47;22940:131;23066:4;22940:131;:::i;:::-;22932:139;;22659:419;;;:::o;23084:173::-;23224:25;23220:1;23212:6;23208:14;23201:49;23084:173;:::o;23263:366::-;23405:3;23426:67;23490:2;23485:3;23426:67;:::i;:::-;23419:74;;23502:93;23591:3;23502:93;:::i;:::-;23620:2;23615:3;23611:12;23604:19;;23263:366;;;:::o;23635:419::-;23801:4;23839:2;23828:9;23824:18;23816:26;;23888:9;23882:4;23878:20;23874:1;23863:9;23859:17;23852:47;23916:131;24042:4;23916:131;:::i;:::-;23908:139;;23635:419;;;:::o;24060:221::-;24200:34;24196:1;24188:6;24184:14;24177:58;24269:4;24264:2;24256:6;24252:15;24245:29;24060:221;:::o;24287:366::-;24429:3;24450:67;24514:2;24509:3;24450:67;:::i;:::-;24443:74;;24526:93;24615:3;24526:93;:::i;:::-;24644:2;24639:3;24635:12;24628:19;;24287:366;;;:::o;24659:419::-;24825:4;24863:2;24852:9;24848:18;24840:26;;24912:9;24906:4;24902:20;24898:1;24887:9;24883:17;24876:47;24940:131;25066:4;24940:131;:::i;:::-;24932:139;;24659:419;;;:::o;25084:220::-;25224:34;25220:1;25212:6;25208:14;25201:58;25293:3;25288:2;25280:6;25276:15;25269:28;25084:220;:::o;25310:366::-;25452:3;25473:67;25537:2;25532:3;25473:67;:::i;:::-;25466:74;;25549:93;25638:3;25549:93;:::i;:::-;25667:2;25662:3;25658:12;25651:19;;25310:366;;;:::o;25682:419::-;25848:4;25886:2;25875:9;25871:18;25863:26;;25935:9;25929:4;25925:20;25921:1;25910:9;25906:17;25899:47;25963:131;26089:4;25963:131;:::i;:::-;25955:139;;25682:419;;;:::o;26107:194::-;26147:4;26167:20;26185:1;26167:20;:::i;:::-;26162:25;;26201:20;26219:1;26201:20;:::i;:::-;26196:25;;26245:1;26242;26238:9;26230:17;;26269:1;26263:4;26260:11;26257:37;;;26274:18;;:::i;:::-;26257:37;26107:194;;;;:::o;26307:182::-;26447:34;26443:1;26435:6;26431:14;26424:58;26307:182;:::o;26495:366::-;26637:3;26658:67;26722:2;26717:3;26658:67;:::i;:::-;26651:74;;26734:93;26823:3;26734:93;:::i;:::-;26852:2;26847:3;26843:12;26836:19;;26495:366;;;:::o;26867:419::-;27033:4;27071:2;27060:9;27056:18;27048:26;;27120:9;27114:4;27110:20;27106:1;27095:9;27091:17;27084:47;27148:131;27274:4;27148:131;:::i;:::-;27140:139;;26867:419;;;:::o;27292:250::-;27432:34;27428:1;27420:6;27416:14;27409:58;27501:33;27496:2;27488:6;27484:15;27477:58;27292:250;:::o;27548:366::-;27690:3;27711:67;27775:2;27770:3;27711:67;:::i;:::-;27704:74;;27787:93;27876:3;27787:93;:::i;:::-;27905:2;27900:3;27896:12;27889:19;;27548:366;;;:::o;27920:419::-;28086:4;28124:2;28113:9;28109:18;28101:26;;28173:9;28167:4;28163:20;28159:1;28148:9;28144:17;28137:47;28201:131;28327:4;28201:131;:::i;:::-;28193:139;;27920:419;;;:::o;28345:224::-;28485:34;28481:1;28473:6;28469:14;28462:58;28554:7;28549:2;28541:6;28537:15;28530:32;28345:224;:::o;28575:366::-;28717:3;28738:67;28802:2;28797:3;28738:67;:::i;:::-;28731:74;;28814:93;28903:3;28814:93;:::i;:::-;28932:2;28927:3;28923:12;28916:19;;28575:366;;;:::o;28947:419::-;29113:4;29151:2;29140:9;29136:18;29128:26;;29200:9;29194:4;29190:20;29186:1;29175:9;29171:17;29164:47;29228:131;29354:4;29228:131;:::i;:::-;29220:139;;28947:419;;;:::o;29372:222::-;29512:34;29508:1;29500:6;29496:14;29489:58;29581:5;29576:2;29568:6;29564:15;29557:30;29372:222;:::o;29600:366::-;29742:3;29763:67;29827:2;29822:3;29763:67;:::i;:::-;29756:74;;29839:93;29928:3;29839:93;:::i;:::-;29957:2;29952:3;29948:12;29941:19;;29600:366;;;:::o;29972:419::-;30138:4;30176:2;30165:9;30161:18;30153:26;;30225:9;30219:4;30215:20;30211:1;30200:9;30196:17;30189:47;30253:131;30379:4;30253:131;:::i;:::-;30245:139;;29972:419;;;:::o;30397:225::-;30537:34;30533:1;30525:6;30521:14;30514:58;30606:8;30601:2;30593:6;30589:15;30582:33;30397:225;:::o;30628:366::-;30770:3;30791:67;30855:2;30850:3;30791:67;:::i;:::-;30784:74;;30867:93;30956:3;30867:93;:::i;:::-;30985:2;30980:3;30976:12;30969:19;;30628:366;;;:::o;31000:419::-;31166:4;31204:2;31193:9;31189:18;31181:26;;31253:9;31247:4;31243:20;31239:1;31228:9;31224:17;31217:47;31281:131;31407:4;31281:131;:::i;:::-;31273:139;;31000:419;;;:::o;31425:180::-;31473:77;31470:1;31463:88;31570:4;31567:1;31560:15;31594:4;31591:1;31584:15;31611:180;31659:77;31656:1;31649:88;31756:4;31753:1;31746:15;31780:4;31777:1;31770:15;31797:85;31842:7;31871:5;31860:16;;31797:85;;;:::o;31888:158::-;31946:9;31979:61;31997:42;32006:32;32032:5;32006:32;:::i;:::-;31997:42;:::i;:::-;31979:61;:::i;:::-;31966:74;;31888:158;;;:::o;32052:147::-;32147:45;32186:5;32147:45;:::i;:::-;32142:3;32135:58;32052:147;;:::o;32205:114::-;32272:6;32306:5;32300:12;32290:22;;32205:114;;;:::o;32325:184::-;32424:11;32458:6;32453:3;32446:19;32498:4;32493:3;32489:14;32474:29;;32325:184;;;;:::o;32515:132::-;32582:4;32605:3;32597:11;;32635:4;32630:3;32626:14;32618:22;;32515:132;;;:::o;32653:108::-;32730:24;32748:5;32730:24;:::i;:::-;32725:3;32718:37;32653:108;;:::o;32767:179::-;32836:10;32857:46;32899:3;32891:6;32857:46;:::i;:::-;32935:4;32930:3;32926:14;32912:28;;32767:179;;;;:::o;32952:113::-;33022:4;33054;33049:3;33045:14;33037:22;;32952:113;;;:::o;33101:732::-;33220:3;33249:54;33297:5;33249:54;:::i;:::-;33319:86;33398:6;33393:3;33319:86;:::i;:::-;33312:93;;33429:56;33479:5;33429:56;:::i;:::-;33508:7;33539:1;33524:284;33549:6;33546:1;33543:13;33524:284;;;33625:6;33619:13;33652:63;33711:3;33696:13;33652:63;:::i;:::-;33645:70;;33738:60;33791:6;33738:60;:::i;:::-;33728:70;;33584:224;33571:1;33568;33564:9;33559:14;;33524:284;;;33528:14;33824:3;33817:10;;33225:608;;;33101:732;;;;:::o;33839:720::-;34074:4;34112:3;34101:9;34097:19;34089:27;;34126:79;34202:1;34191:9;34187:17;34178:6;34126:79;:::i;:::-;34252:9;34246:4;34242:20;34237:2;34226:9;34222:18;34215:48;34280:108;34383:4;34374:6;34280:108;:::i;:::-;34272:116;;34398:72;34466:2;34455:9;34451:18;34442:6;34398:72;:::i;:::-;34480;34548:2;34537:9;34533:18;34524:6;34480:72;:::i;:::-;33839:720;;;;;;;:::o;34565:193::-;34604:3;34623:19;34640:1;34623:19;:::i;:::-;34618:24;;34656:19;34673:1;34656:19;:::i;:::-;34651:24;;34698:1;34695;34691:9;34684:16;;34721:6;34716:3;34713:15;34710:41;;;34731:18;;:::i;:::-;34710:41;34565:193;;;;:::o;34764:147::-;34865:11;34902:3;34887:18;;34764:147;;;;:::o;34917:114::-;;:::o;35037:398::-;35196:3;35217:83;35298:1;35293:3;35217:83;:::i;:::-;35210:90;;35309:93;35398:3;35309:93;:::i;:::-;35427:1;35422:3;35418:11;35411:18;;35037:398;;;:::o;35441:379::-;35625:3;35647:147;35790:3;35647:147;:::i;:::-;35640:154;;35811:3;35804:10;;35441:379;;;:::o;35826:226::-;35966:34;35962:1;35954:6;35950:14;35943:58;36035:9;36030:2;36022:6;36018:15;36011:34;35826:226;:::o;36058:366::-;36200:3;36221:67;36285:2;36280:3;36221:67;:::i;:::-;36214:74;;36297:93;36386:3;36297:93;:::i;:::-;36415:2;36410:3;36406:12;36399:19;;36058:366;;;:::o;36430:419::-;36596:4;36634:2;36623:9;36619:18;36611:26;;36683:9;36677:4;36673:20;36669:1;36658:9;36654:17;36647:47;36711:131;36837:4;36711:131;:::i;:::-;36703:139;;36430:419;;;:::o;36855:180::-;36903:77;36900:1;36893:88;37000:4;36997:1;36990:15;37024:4;37021:1;37014:15;37041:185;37081:1;37098:20;37116:1;37098:20;:::i;:::-;37093:25;;37132:20;37150:1;37132:20;:::i;:::-;37127:25;;37171:1;37161:35;;37176:18;;:::i;:::-;37161:35;37218:1;37215;37211:9;37206:14;;37041:185;;;;:::o;37232:831::-;37495:4;37533:3;37522:9;37518:19;37510:27;;37547:71;37615:1;37604:9;37600:17;37591:6;37547:71;:::i;:::-;37628:80;37704:2;37693:9;37689:18;37680:6;37628:80;:::i;:::-;37755:9;37749:4;37745:20;37740:2;37729:9;37725:18;37718:48;37783:108;37886:4;37877:6;37783:108;:::i;:::-;37775:116;;37901:72;37969:2;37958:9;37954:18;37945:6;37901:72;:::i;:::-;37983:73;38051:3;38040:9;38036:19;38027:6;37983:73;:::i;:::-;37232:831;;;;;;;;:::o

Swarm Source

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