ETH Price: $2,355.65 (+0.62%)
Gas: 5.72 Gwei

Token

Modus Operandi (PRAXIS)
 

Overview

Max Total Supply

100,000 PRAXIS

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
gitano.eth
Balance
494.950000000000001433 PRAXIS

Value
$0.00
0x500898B272D3454D7Ce39c1E99b469deffD92B74
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:
ModusOperandi

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/*
$PRAXIS
Modus Operandi

Tax 5% (4% Auto LP / 1% Dev)

Keep in mind, with high volume 4% AUTO LP will make the most sustainable ERC20 protocol owned by community.

Locked and renounced!

https://praxispath.xyz/

https://t.me/PRAXIS_Portal

https://twitter.com/PRAXISPATH

*/

 // SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
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 Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface 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);
}
 
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);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 to 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 {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract ModusOperandi is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
 
    bool private swapping;
 
    address private marketingWallet;
    address private devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public earlySellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    constructor() ERC20("Modus Operandi", "PRAXIS") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 4;
        uint256 _buyDevFee = 1;
 
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 4;
        uint256 _sellDevFee = 1;
 
        uint256 _earlySellLiquidityFee = 4;
        uint256 _earlySellMarketingFee = 0;
	    uint256 _earlySellDevFee = 1;
 
        uint256 totalSupply = 1 * 1e5 * 1e18;
 
        maxTransactionAmount = totalSupply * 3 / 100; // 3% maxTransactionAmountTxn
        maxWallet = totalSupply * 3 / 100; // 3% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellDevFee = _earlySellDevFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner(){
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep buy fees at 20% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee) external onlyOwner(){
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellDevFee = _earlySellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20, "Must keep sell fees at 20% or less");
        uint256 earlySellTotalFees = _earlySellMarketingFee + _earlySellLiquidityFee + _earlySellDevFee;
        require(earlySellTotalFees <= 20, "Must keep early sell fee at 20% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
        excludeFromFees(marketingWallet,true);
        excludeFromMaxTransaction(marketingWallet,true);
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
        excludeFromFees(devWallet,true);
        excludeFromMaxTransaction(devWallet,true);
    }
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
		        sellDevFee = earlySellDevFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 4;
                sellMarketingFee = 0;
                sellDevFee = 1;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 4;
                sellMarketingFee = 0;
		        sellDevFee = 1;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600e81526020017f4d6f647573204f706572616e64690000000000000000000000000000000000008152506040518060400160405280600681526020017f505241584953000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000bf4565b5080600490805190602001906200013692919062000bf4565b50505060006200014b620006c060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000216816001620006c860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029157600080fd5b505afa158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc919062000d0e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032f57600080fd5b505afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a919062000d0e565b6040518363ffffffff1660e01b81526004016200038992919062000d51565b602060405180830381600087803b158015620003a457600080fd5b505af1158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000d0e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200042760a0516001620006c860201b60201c565b6200043c60a0516001620007c560201b60201c565b600080600490506000600190506000806004905060006001905060006004905060008060019050600069152d02c7e14af68000009050606460038262000483919062000db7565b6200048f919062000e47565b6008819055506064600382620004a6919062000db7565b620004b2919062000e47565b600a81905550612710600a82620004ca919062000db7565b620004d6919062000e47565b60098190555089601081905550886011819055508760128190555060125460115460105462000506919062000e7f565b62000512919062000e7f565b600f8190555086601481905550856015819055508460168190555060165460155460145462000542919062000e7f565b6200054e919062000e7f565b601381905550836017819055508260188190555081601981905550620005796200086660201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005c96200086660201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200062b6200061d6200086660201b60201c565b60016200089060201b60201c565b6200063e3060016200089060201b60201c565b6200065361dead60016200089060201b60201c565b62000675620006676200086660201b60201c565b6001620006c860201b60201c565b62000688306001620006c860201b60201c565b6200069d61dead6001620006c860201b60201c565b620006af3382620009dd60201b60201c565b505050505050505050505062001110565b600033905090565b620006d8620006c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200076a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007619062000f3d565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008a0620006c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000932576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009299062000f3d565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009d1919062000f7c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a479062000fe9565b60405180910390fd5b62000a646000838362000b8c60201b60201c565b62000a808160025462000b9160201b620026591790919060201c565b60028190555062000ade816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b9160201b620026591790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b8091906200101c565b60405180910390a35050565b505050565b600080828462000ba2919062000e7f565b90508381101562000bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be19062001089565b60405180910390fd5b8091505092915050565b82805462000c0290620010da565b90600052602060002090601f01602090048101928262000c26576000855562000c72565b82601f1062000c4157805160ff191683800117855562000c72565b8280016001018555821562000c72579182015b8281111562000c7157825182559160200191906001019062000c54565b5b50905062000c81919062000c85565b5090565b5b8082111562000ca057600081600090555060010162000c86565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cd68262000ca9565b9050919050565b62000ce88162000cc9565b811462000cf457600080fd5b50565b60008151905062000d088162000cdd565b92915050565b60006020828403121562000d275762000d2662000ca4565b5b600062000d378482850162000cf7565b91505092915050565b62000d4b8162000cc9565b82525050565b600060408201905062000d68600083018562000d40565b62000d77602083018462000d40565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dc48262000d7e565b915062000dd18362000d7e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e0d5762000e0c62000d88565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e548262000d7e565b915062000e618362000d7e565b92508262000e745762000e7362000e18565b5b828204905092915050565b600062000e8c8262000d7e565b915062000e998362000d7e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ed15762000ed062000d88565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f2560208362000edc565b915062000f328262000eed565b602082019050919050565b6000602082019050818103600083015262000f588162000f16565b9050919050565b60008115159050919050565b62000f768162000f5f565b82525050565b600060208201905062000f93600083018462000f6b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fd1601f8362000edc565b915062000fde8262000f99565b602082019050919050565b60006020820190508181036000830152620010048162000fc2565b9050919050565b620010168162000d7e565b82525050565b60006020820190506200103360008301846200100b565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001071601b8362000edc565b91506200107e8262001039565b602082019050919050565b60006020820190508181036000830152620010a48162001062565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010f357607f821691505b602082108114156200110a5762001109620010ab565b5b50919050565b60805160a051615819620011756000396000818161147101528181611c6601528181612c42015261304b015260008181610e2901528181612bea01528181613fcf015281816140bf015281816140e60152818161418201526141a901526158196000f3fe60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063b62496f5116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cad578063f2fde38b14610cd8578063f637434214610d01578063f8b45b0514610d2c57610376565b8063dd62ed3e14610c1a578063e2f4560514610c57578063e884f26014610c8257610376565b8063c18bc195116100d1578063c18bc19514610b70578063c876d0b914610b99578063c8c8ebe414610bc4578063d85ba06314610bef57610376565b8063b62496f514610adf578063bbc0c74214610b1c578063c024666814610b4757610376565b8063a0d82dc511610164578063a4d15b641161013e578063a4d15b6414610a23578063a7fc9e2114610a4e578063a9059cbb14610a79578063aacebbe314610ab657610376565b8063a0d82dc514610992578063a2657778146109bd578063a457c2d7146109e657610376565b806395d89b41116101a057806395d89b41146108e85780639a7a23d6146109135780639c3b4fdc1461093c5780639fccce321461096757610376565b80638da5cb5b146108695780639213691314610894578063924de9b7146108bf57610376565b806339509351116102a057806370a082311161023e5780637571336a116102185780637571336a146107d55780637bce5a04146107fe5780638095d564146108295780638a8c523c1461085257610376565b806370a0823114610756578063715018a614610793578063751039fc146107aa57610376565b80634fbee1931161027a5780634fbee19314610698578063541a43cf146106d55780636a486a8e146107005780636ddd17131461072b57610376565b8063395093511461060557806349bd5a5e146106425780634a62bb651461066d57610376565b80631f3fed8f1161030d57806323b872dd116102e757806323b872dd1461054757806327c8f835146105845780632bf3d42d146105af578063313ce567146105da57610376565b80631f3fed8f146104ca578063203e727e146104f557806322d3e2aa1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d57565b60405161039d9190614363565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061441e565b610de9565b6040516103da9190614479565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614494565b610e07565b6040516104179190614479565b60405180910390f35b34801561042c57600080fd5b50610435610e27565b6040516104429190614520565b60405180910390f35b34801561045757600080fd5b50610460610e4b565b60405161046d919061454a565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614494565b610e55565b005b3480156104ab57600080fd5b506104b4611006565b6040516104c1919061454a565b60405180910390f35b3480156104d657600080fd5b506104df61100c565b6040516104ec919061454a565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614565565b611012565b005b34801561052a57600080fd5b5061054560048036038101906105409190614592565b61113c565b005b34801561055357600080fd5b5061056e6004803603810190610569919061461f565b6112ce565b60405161057b9190614479565b60405180910390f35b34801561059057600080fd5b506105996113a7565b6040516105a69190614681565b60405180910390f35b3480156105bb57600080fd5b506105c46113ad565b6040516105d1919061454a565b60405180910390f35b3480156105e657600080fd5b506105ef6113b3565b6040516105fc91906146b8565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061441e565b6113bc565b6040516106399190614479565b60405180910390f35b34801561064e57600080fd5b5061065761146f565b6040516106649190614681565b60405180910390f35b34801561067957600080fd5b50610682611493565b60405161068f9190614479565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190614494565b6114a6565b6040516106cc9190614479565b60405180910390f35b3480156106e157600080fd5b506106ea6114fc565b6040516106f7919061454a565b60405180910390f35b34801561070c57600080fd5b50610715611502565b604051610722919061454a565b60405180910390f35b34801561073757600080fd5b50610740611508565b60405161074d9190614479565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614494565b61151b565b60405161078a919061454a565b60405180910390f35b34801561079f57600080fd5b506107a8611563565b005b3480156107b657600080fd5b506107bf6116bb565b6040516107cc9190614479565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906146ff565b611776565b005b34801561080a57600080fd5b50610813611868565b604051610820919061454a565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b919061473f565b61186e565b005b34801561085e57600080fd5b50610867611988565b005b34801561087557600080fd5b5061087e611a57565b60405161088b9190614681565b60405180910390f35b3480156108a057600080fd5b506108a9611a81565b6040516108b6919061454a565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e19190614792565b611a87565b005b3480156108f457600080fd5b506108fd611b3b565b60405161090a9190614363565b60405180910390f35b34801561091f57600080fd5b5061093a600480360381019061093591906146ff565b611bcd565b005b34801561094857600080fd5b50610951611d01565b60405161095e919061454a565b60405180910390f35b34801561097357600080fd5b5061097c611d07565b604051610989919061454a565b60405180910390f35b34801561099e57600080fd5b506109a7611d0d565b6040516109b4919061454a565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190614792565b611d13565b005b3480156109f257600080fd5b50610a0d6004803603810190610a08919061441e565b611dc7565b604051610a1a9190614479565b60405180910390f35b348015610a2f57600080fd5b50610a38611e94565b604051610a459190614479565b60405180910390f35b348015610a5a57600080fd5b50610a63611ea7565b604051610a70919061454a565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b919061441e565b611ead565b604051610aad9190614479565b60405180910390f35b348015610ac257600080fd5b50610add6004803603810190610ad89190614494565b611ecb565b005b348015610aeb57600080fd5b50610b066004803603810190610b019190614494565b61207c565b604051610b139190614479565b60405180910390f35b348015610b2857600080fd5b50610b3161209c565b604051610b3e9190614479565b60405180910390f35b348015610b5357600080fd5b50610b6e6004803603810190610b6991906146ff565b6120af565b005b348015610b7c57600080fd5b50610b976004803603810190610b929190614565565b6121ef565b005b348015610ba557600080fd5b50610bae612319565b604051610bbb9190614479565b60405180910390f35b348015610bd057600080fd5b50610bd961232c565b604051610be6919061454a565b60405180910390f35b348015610bfb57600080fd5b50610c04612332565b604051610c11919061454a565b60405180910390f35b348015610c2657600080fd5b50610c416004803603810190610c3c91906147bf565b612338565b604051610c4e919061454a565b60405180910390f35b348015610c6357600080fd5b50610c6c6123bf565b604051610c79919061454a565b60405180910390f35b348015610c8e57600080fd5b50610c976123c5565b604051610ca49190614479565b60405180910390f35b348015610cb957600080fd5b50610cc2612480565b604051610ccf919061454a565b60405180910390f35b348015610ce457600080fd5b50610cff6004803603810190610cfa9190614494565b612486565b005b348015610d0d57600080fd5b50610d1661264d565b604051610d23919061454a565b60405180910390f35b348015610d3857600080fd5b50610d41612653565b604051610d4e919061454a565b60405180910390f35b606060038054610d669061482e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d929061482e565b8015610ddf5780601f10610db457610100808354040283529160200191610ddf565b820191906000526020600020905b815481529060010190602001808311610dc257829003601f168201915b5050505050905090565b6000610dfd610df66126b7565b84846126bf565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610e5d6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee3906148ac565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fd6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016120af565b611003600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611776565b50565b601b5481565b601a5481565b61101a6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a0906148ac565b60405180910390fd5b670de0b6b3a76400006103e860056110bf610e4b565b6110c991906148fb565b6110d39190614984565b6110dd9190614984565b81101561111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614a27565b60405180910390fd5b670de0b6b3a76400008161113391906148fb565b60088190555050565b6111446126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca906148ac565b60405180910390fd5b8560148190555084601581905550836016819055508260178190555081601881905550806019819055506016546015546014546112109190614a47565b61121a9190614a47565b60138190555060146013541115611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90614b0f565b60405180910390fd5b60008184846112759190614a47565b61127f9190614a47565b905060148111156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90614ba1565b60405180910390fd5b50505050505050565b60006112db84848461288a565b61139c846112e76126b7565b6113978560405180606001604052806028815260200161579760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061134d6126b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461379b9092919063ffffffff16565b6126bf565b600190509392505050565b61dead81565b60185481565b60006012905090565b60006114656113c96126b7565b8461146085600160006113da6126b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265990919063ffffffff16565b6126bf565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61156b6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f1906148ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116c56126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b906148ac565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61177e6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611804906148ac565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6118766126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc906148ac565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461192d9190614a47565b6119379190614a47565b600f819055506014600f541115611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90614c33565b60405180910390fd5b505050565b6119906126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906148ac565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b611a8f6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b15906148ac565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b4a9061482e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b769061482e565b8015611bc35780601f10611b9857610100808354040283529160200191611bc3565b820191906000526020600020905b815481529060010190602001808311611ba657829003601f168201915b5050505050905090565b611bd56126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5b906148ac565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea90614cc5565b60405180910390fd5b611cfd82826137ff565b5050565b60125481565b601c5481565b60165481565b611d1b6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da1906148ac565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611e8a611dd46126b7565b84611e85856040518060600160405280602581526020016157bf6025913960016000611dfe6126b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461379b9092919063ffffffff16565b6126bf565b6001905092915050565b600b60039054906101000a900460ff1681565b60195481565b6000611ec1611eba6126b7565b848461288a565b6001905092915050565b611ed36126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f59906148ac565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061204c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016120af565b612079600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611776565b50565b601f6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6120b76126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906148ac565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121e39190614479565b60405180910390a25050565b6121f76126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d906148ac565b60405180910390fd5b670de0b6b3a76400006103e8600561229c610e4b565b6122a691906148fb565b6122b09190614984565b6122ba9190614984565b8110156122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f390614d57565b60405180910390fd5b670de0b6b3a76400008161231091906148fb565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123cf6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461245e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612455906148ac565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61248e6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612514906148ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614de9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b60008082846126689190614a47565b9050838110156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614e55565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272690614ee7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614f79565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287d919061454a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f19061500b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561296a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129619061509d565b60405180910390fd5b60008114156129845761297f838360006138a0565b613796565b600b60009054906101000a900460ff1615613047576129a1611a57565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a0f57506129df611a57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a485750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a82575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a9b5750600560149054906101000a900460ff16155b1561304657600b60019054906101000a900460ff16612b9557601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b555750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b90615109565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d5d57612bb2611a57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c3957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c9157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d5c5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e906151c1565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e005750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ea757600854811115612e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4190615253565b60405180910390fd5b600a54612e568361151b565b82612e619190614a47565b1115612ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e99906152bf565b60405180910390fd5b613045565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f4a5750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9957600854811115612f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8b90615351565b60405180910390fd5b613044565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661304357600a54612ff68361151b565b826130019190614a47565b1115613042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613039906152bf565b60405180910390fd5b5b5b5b5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130b45750600b60039054906101000a900460ff165b156131df576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561315657504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539190614a47565b10155b1561319e576017546015819055506018546014819055506019546016819055506016546015546014546131899190614a47565b6131939190614a47565b6013819055506131da565b6004601581905550600060148190555060016016819055506016546015546014546131c99190614a47565b6131d39190614a47565b6013819055505b6132bd565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561326c5742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff166132bc576004601581905550600060148190555060016016819055506016546015546014546132ab9190614a47565b6132b59190614a47565b6013819055505b5b60006132c83061151b565b9050600060095482101590508080156132ed5750600b60029054906101000a900460ff165b80156133065750600560149054906101000a900460ff16155b801561335c5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133b25750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134085750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561344c576001600560146101000a81548160ff021916908315150217905550613430613b35565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135025750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561350c57600090505b6000811561378557601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561356f57506000601354115b1561363c5761359c606461358e60135489613e1c90919063ffffffff16565b613e9790919063ffffffff16565b9050601354601554826135af91906148fb565b6135b99190614984565b601b60008282546135ca9190614a47565b92505081905550601354601654826135e291906148fb565b6135ec9190614984565b601c60008282546135fd9190614a47565b925050819055506013546014548261361591906148fb565b61361f9190614984565b601a60008282546136309190614a47565b92505081905550613761565b601f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561369757506000600f54115b15613760576136c460646136b6600f5489613e1c90919063ffffffff16565b613e9790919063ffffffff16565b9050600f54601154826136d791906148fb565b6136e19190614984565b601b60008282546136f29190614a47565b92505081905550600f546012548261370a91906148fb565b6137149190614984565b601c60008282546137259190614a47565b92505081905550600f546010548261373d91906148fb565b6137479190614984565b601a60008282546137589190614a47565b925050819055505b5b6000811115613776576137758830836138a0565b5b80866137829190615371565b95505b6137908888886138a0565b50505050505b505050565b60008383111582906137e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137da9190614363565b60405180910390fd5b50600083856137f29190615371565b9050809150509392505050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613910576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139079061500b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139779061509d565b60405180910390fd5b61398b838383613ee1565b6139f681604051806060016040528060268152602001615771602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461379b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a89816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613b28919061454a565b60405180910390a3505050565b6000613b403061151b565b90506000601c54601a54601b54613b579190614a47565b613b619190614a47565b9050600080831480613b735750600082145b15613b8057505050613e1a565b6014600954613b8f91906148fb565b831115613ba8576014600954613ba591906148fb565b92505b6000600283601b5486613bbb91906148fb565b613bc59190614984565b613bcf9190614984565b90506000613be68286613ee690919063ffffffff16565b90506000479050613bf682613f30565b6000613c0b8247613ee690919063ffffffff16565b90506000613c3687613c28601a5485613e1c90919063ffffffff16565b613e9790919063ffffffff16565b90506000613c6188613c53601c5486613e1c90919063ffffffff16565b613e9790919063ffffffff16565b90506000818385613c729190615371565b613c7c9190615371565b90506000601b819055506000601a819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613cdc906153d6565b60006040518083038185875af1925050503d8060008114613d19576040519150601f19603f3d011682016040523d82523d6000602084013e613d1e565b606091505b505080985050600087118015613d345750600081115b15613d8157613d43878261417c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601b54604051613d78939291906153eb565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613dc7906153d6565b60006040518083038185875af1925050503d8060008114613e04576040519150601f19603f3d011682016040523d82523d6000602084013e613e09565b606091505b505080985050505050505050505050505b565b600080831415613e2f5760009050613e91565b60008284613e3d91906148fb565b9050828482613e4c9190614984565b14613e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e8390615494565b60405180910390fd5b809150505b92915050565b6000613ed983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614267565b905092915050565b505050565b6000613f2883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061379b565b905092915050565b6000600267ffffffffffffffff811115613f4d57613f4c6154b4565b5b604051908082528060200260200182016040528015613f7b5781602001602082028036833780820191505090505b5090503081600081518110613f9357613f926154e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561403357600080fd5b505afa158015614047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061406b9190615527565b8160018151811061407f5761407e6154e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140e4307f0000000000000000000000000000000000000000000000000000000000000000846126bf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161414695949392919061564d565b600060405180830381600087803b15801561416057600080fd5b505af1158015614174573d6000803e3d6000fd5b505050505050565b6141a7307f0000000000000000000000000000000000000000000000000000000000000000846126bf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161420e969594939291906156a7565b6060604051808303818588803b15801561422757600080fd5b505af115801561423b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614260919061571d565b5050505050565b600080831182906142ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a59190614363565b60405180910390fd5b50600083856142bd9190614984565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143045780820151818401526020810190506142e9565b83811115614313576000848401525b50505050565b6000601f19601f8301169050919050565b6000614335826142ca565b61433f81856142d5565b935061434f8185602086016142e6565b61435881614319565b840191505092915050565b6000602082019050818103600083015261437d818461432a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143b58261438a565b9050919050565b6143c5816143aa565b81146143d057600080fd5b50565b6000813590506143e2816143bc565b92915050565b6000819050919050565b6143fb816143e8565b811461440657600080fd5b50565b600081359050614418816143f2565b92915050565b6000806040838503121561443557614434614385565b5b6000614443858286016143d3565b925050602061445485828601614409565b9150509250929050565b60008115159050919050565b6144738161445e565b82525050565b600060208201905061448e600083018461446a565b92915050565b6000602082840312156144aa576144a9614385565b5b60006144b8848285016143d3565b91505092915050565b6000819050919050565b60006144e66144e16144dc8461438a565b6144c1565b61438a565b9050919050565b60006144f8826144cb565b9050919050565b600061450a826144ed565b9050919050565b61451a816144ff565b82525050565b60006020820190506145356000830184614511565b92915050565b614544816143e8565b82525050565b600060208201905061455f600083018461453b565b92915050565b60006020828403121561457b5761457a614385565b5b600061458984828501614409565b91505092915050565b60008060008060008060c087890312156145af576145ae614385565b5b60006145bd89828a01614409565b96505060206145ce89828a01614409565b95505060406145df89828a01614409565b94505060606145f089828a01614409565b935050608061460189828a01614409565b92505060a061461289828a01614409565b9150509295509295509295565b60008060006060848603121561463857614637614385565b5b6000614646868287016143d3565b9350506020614657868287016143d3565b925050604061466886828701614409565b9150509250925092565b61467b816143aa565b82525050565b60006020820190506146966000830184614672565b92915050565b600060ff82169050919050565b6146b28161469c565b82525050565b60006020820190506146cd60008301846146a9565b92915050565b6146dc8161445e565b81146146e757600080fd5b50565b6000813590506146f9816146d3565b92915050565b6000806040838503121561471657614715614385565b5b6000614724858286016143d3565b9250506020614735858286016146ea565b9150509250929050565b60008060006060848603121561475857614757614385565b5b600061476686828701614409565b935050602061477786828701614409565b925050604061478886828701614409565b9150509250925092565b6000602082840312156147a8576147a7614385565b5b60006147b6848285016146ea565b91505092915050565b600080604083850312156147d6576147d5614385565b5b60006147e4858286016143d3565b92505060206147f5858286016143d3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061484657607f821691505b6020821081141561485a576148596147ff565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148966020836142d5565b91506148a182614860565b602082019050919050565b600060208201905081810360008301526148c581614889565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614906826143e8565b9150614911836143e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561494a576149496148cc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061498f826143e8565b915061499a836143e8565b9250826149aa576149a9614955565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614a11602f836142d5565b9150614a1c826149b5565b604082019050919050565b60006020820190508181036000830152614a4081614a04565b9050919050565b6000614a52826143e8565b9150614a5d836143e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a9257614a916148cc565b5b828201905092915050565b7f4d757374206b6565702073656c6c206665657320617420323025206f72206c6560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614af96022836142d5565b9150614b0482614a9d565b604082019050919050565b60006020820190508181036000830152614b2881614aec565b9050919050565b7f4d757374206b656570206561726c792073656c6c20666565206174203230252060008201527f6f72206c65737300000000000000000000000000000000000000000000000000602082015250565b6000614b8b6027836142d5565b9150614b9682614b2f565b604082019050919050565b60006020820190508181036000830152614bba81614b7e565b9050919050565b7f4d757374206b65657020627579206665657320617420323025206f72206c657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c1d6021836142d5565b9150614c2882614bc1565b604082019050919050565b60006020820190508181036000830152614c4c81614c10565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614caf6039836142d5565b9150614cba82614c53565b604082019050919050565b60006020820190508181036000830152614cde81614ca2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d416024836142d5565b9150614d4c82614ce5565b604082019050919050565b60006020820190508181036000830152614d7081614d34565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dd36026836142d5565b9150614dde82614d77565b604082019050919050565b60006020820190508181036000830152614e0281614dc6565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614e3f601b836142d5565b9150614e4a82614e09565b602082019050919050565b60006020820190508181036000830152614e6e81614e32565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ed16024836142d5565b9150614edc82614e75565b604082019050919050565b60006020820190508181036000830152614f0081614ec4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f636022836142d5565b9150614f6e82614f07565b604082019050919050565b60006020820190508181036000830152614f9281614f56565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ff56025836142d5565b915061500082614f99565b604082019050919050565b6000602082019050818103600083015261502481614fe8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150876023836142d5565b91506150928261502b565b604082019050919050565b600060208201905081810360008301526150b68161507a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150f36016836142d5565b91506150fe826150bd565b602082019050919050565b60006020820190508181036000830152615122816150e6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151ab6049836142d5565b91506151b682615129565b606082019050919050565b600060208201905081810360008301526151da8161519e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061523d6035836142d5565b9150615248826151e1565b604082019050919050565b6000602082019050818103600083015261526c81615230565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152a96013836142d5565b91506152b482615273565b602082019050919050565b600060208201905081810360008301526152d88161529c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061533b6036836142d5565b9150615346826152df565b604082019050919050565b6000602082019050818103600083015261536a8161532e565b9050919050565b600061537c826143e8565b9150615387836143e8565b92508282101561539a576153996148cc565b5b828203905092915050565b600081905092915050565b50565b60006153c06000836153a5565b91506153cb826153b0565b600082019050919050565b60006153e1826153b3565b9150819050919050565b6000606082019050615400600083018661453b565b61540d602083018561453b565b61541a604083018461453b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061547e6021836142d5565b915061548982615422565b604082019050919050565b600060208201905081810360008301526154ad81615471565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615521816143bc565b92915050565b60006020828403121561553d5761553c614385565b5b600061554b84828501615512565b91505092915050565b6000819050919050565b600061557961557461556f84615554565b6144c1565b6143e8565b9050919050565b6155898161555e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155c4816143aa565b82525050565b60006155d683836155bb565b60208301905092915050565b6000602082019050919050565b60006155fa8261558f565b615604818561559a565b935061560f836155ab565b8060005b8381101561564057815161562788826155ca565b9750615632836155e2565b925050600181019050615613565b5085935050505092915050565b600060a082019050615662600083018861453b565b61566f6020830187615580565b818103604083015261568181866155ef565b90506156906060830185614672565b61569d608083018461453b565b9695505050505050565b600060c0820190506156bc6000830189614672565b6156c9602083018861453b565b6156d66040830187615580565b6156e36060830186615580565b6156f06080830185614672565b6156fd60a083018461453b565b979650505050505050565b600081519050615717816143f2565b92915050565b60008060006060848603121561573657615735614385565b5b600061574486828701615708565b935050602061575586828701615708565b925050604061576686828701615708565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205596d0e8145b27d6fcd2d03ce742bdac34638ce7c29ee6b58540ca73bf5011cd64736f6c63430008090033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638da5cb5b116101c6578063b62496f5116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610cad578063f2fde38b14610cd8578063f637434214610d01578063f8b45b0514610d2c57610376565b8063dd62ed3e14610c1a578063e2f4560514610c57578063e884f26014610c8257610376565b8063c18bc195116100d1578063c18bc19514610b70578063c876d0b914610b99578063c8c8ebe414610bc4578063d85ba06314610bef57610376565b8063b62496f514610adf578063bbc0c74214610b1c578063c024666814610b4757610376565b8063a0d82dc511610164578063a4d15b641161013e578063a4d15b6414610a23578063a7fc9e2114610a4e578063a9059cbb14610a79578063aacebbe314610ab657610376565b8063a0d82dc514610992578063a2657778146109bd578063a457c2d7146109e657610376565b806395d89b41116101a057806395d89b41146108e85780639a7a23d6146109135780639c3b4fdc1461093c5780639fccce321461096757610376565b80638da5cb5b146108695780639213691314610894578063924de9b7146108bf57610376565b806339509351116102a057806370a082311161023e5780637571336a116102185780637571336a146107d55780637bce5a04146107fe5780638095d564146108295780638a8c523c1461085257610376565b806370a0823114610756578063715018a614610793578063751039fc146107aa57610376565b80634fbee1931161027a5780634fbee19314610698578063541a43cf146106d55780636a486a8e146107005780636ddd17131461072b57610376565b8063395093511461060557806349bd5a5e146106425780634a62bb651461066d57610376565b80631f3fed8f1161030d57806323b872dd116102e757806323b872dd1461054757806327c8f835146105845780632bf3d42d146105af578063313ce567146105da57610376565b80631f3fed8f146104ca578063203e727e146104f557806322d3e2aa1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d57565b60405161039d9190614363565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061441e565b610de9565b6040516103da9190614479565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614494565b610e07565b6040516104179190614479565b60405180910390f35b34801561042c57600080fd5b50610435610e27565b6040516104429190614520565b60405180910390f35b34801561045757600080fd5b50610460610e4b565b60405161046d919061454a565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614494565b610e55565b005b3480156104ab57600080fd5b506104b4611006565b6040516104c1919061454a565b60405180910390f35b3480156104d657600080fd5b506104df61100c565b6040516104ec919061454a565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190614565565b611012565b005b34801561052a57600080fd5b5061054560048036038101906105409190614592565b61113c565b005b34801561055357600080fd5b5061056e6004803603810190610569919061461f565b6112ce565b60405161057b9190614479565b60405180910390f35b34801561059057600080fd5b506105996113a7565b6040516105a69190614681565b60405180910390f35b3480156105bb57600080fd5b506105c46113ad565b6040516105d1919061454a565b60405180910390f35b3480156105e657600080fd5b506105ef6113b3565b6040516105fc91906146b8565b60405180910390f35b34801561061157600080fd5b5061062c6004803603810190610627919061441e565b6113bc565b6040516106399190614479565b60405180910390f35b34801561064e57600080fd5b5061065761146f565b6040516106649190614681565b60405180910390f35b34801561067957600080fd5b50610682611493565b60405161068f9190614479565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190614494565b6114a6565b6040516106cc9190614479565b60405180910390f35b3480156106e157600080fd5b506106ea6114fc565b6040516106f7919061454a565b60405180910390f35b34801561070c57600080fd5b50610715611502565b604051610722919061454a565b60405180910390f35b34801561073757600080fd5b50610740611508565b60405161074d9190614479565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190614494565b61151b565b60405161078a919061454a565b60405180910390f35b34801561079f57600080fd5b506107a8611563565b005b3480156107b657600080fd5b506107bf6116bb565b6040516107cc9190614479565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f791906146ff565b611776565b005b34801561080a57600080fd5b50610813611868565b604051610820919061454a565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b919061473f565b61186e565b005b34801561085e57600080fd5b50610867611988565b005b34801561087557600080fd5b5061087e611a57565b60405161088b9190614681565b60405180910390f35b3480156108a057600080fd5b506108a9611a81565b6040516108b6919061454a565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e19190614792565b611a87565b005b3480156108f457600080fd5b506108fd611b3b565b60405161090a9190614363565b60405180910390f35b34801561091f57600080fd5b5061093a600480360381019061093591906146ff565b611bcd565b005b34801561094857600080fd5b50610951611d01565b60405161095e919061454a565b60405180910390f35b34801561097357600080fd5b5061097c611d07565b604051610989919061454a565b60405180910390f35b34801561099e57600080fd5b506109a7611d0d565b6040516109b4919061454a565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190614792565b611d13565b005b3480156109f257600080fd5b50610a0d6004803603810190610a08919061441e565b611dc7565b604051610a1a9190614479565b60405180910390f35b348015610a2f57600080fd5b50610a38611e94565b604051610a459190614479565b60405180910390f35b348015610a5a57600080fd5b50610a63611ea7565b604051610a70919061454a565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b919061441e565b611ead565b604051610aad9190614479565b60405180910390f35b348015610ac257600080fd5b50610add6004803603810190610ad89190614494565b611ecb565b005b348015610aeb57600080fd5b50610b066004803603810190610b019190614494565b61207c565b604051610b139190614479565b60405180910390f35b348015610b2857600080fd5b50610b3161209c565b604051610b3e9190614479565b60405180910390f35b348015610b5357600080fd5b50610b6e6004803603810190610b6991906146ff565b6120af565b005b348015610b7c57600080fd5b50610b976004803603810190610b929190614565565b6121ef565b005b348015610ba557600080fd5b50610bae612319565b604051610bbb9190614479565b60405180910390f35b348015610bd057600080fd5b50610bd961232c565b604051610be6919061454a565b60405180910390f35b348015610bfb57600080fd5b50610c04612332565b604051610c11919061454a565b60405180910390f35b348015610c2657600080fd5b50610c416004803603810190610c3c91906147bf565b612338565b604051610c4e919061454a565b60405180910390f35b348015610c6357600080fd5b50610c6c6123bf565b604051610c79919061454a565b60405180910390f35b348015610c8e57600080fd5b50610c976123c5565b604051610ca49190614479565b60405180910390f35b348015610cb957600080fd5b50610cc2612480565b604051610ccf919061454a565b60405180910390f35b348015610ce457600080fd5b50610cff6004803603810190610cfa9190614494565b612486565b005b348015610d0d57600080fd5b50610d1661264d565b604051610d23919061454a565b60405180910390f35b348015610d3857600080fd5b50610d41612653565b604051610d4e919061454a565b60405180910390f35b606060038054610d669061482e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d929061482e565b8015610ddf5780601f10610db457610100808354040283529160200191610ddf565b820191906000526020600020905b815481529060010190602001808311610dc257829003601f168201915b5050505050905090565b6000610dfd610df66126b7565b84846126bf565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610e5d6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee3906148ac565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fd6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016120af565b611003600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611776565b50565b601b5481565b601a5481565b61101a6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a0906148ac565b60405180910390fd5b670de0b6b3a76400006103e860056110bf610e4b565b6110c991906148fb565b6110d39190614984565b6110dd9190614984565b81101561111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614a27565b60405180910390fd5b670de0b6b3a76400008161113391906148fb565b60088190555050565b6111446126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca906148ac565b60405180910390fd5b8560148190555084601581905550836016819055508260178190555081601881905550806019819055506016546015546014546112109190614a47565b61121a9190614a47565b60138190555060146013541115611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90614b0f565b60405180910390fd5b60008184846112759190614a47565b61127f9190614a47565b905060148111156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90614ba1565b60405180910390fd5b50505050505050565b60006112db84848461288a565b61139c846112e76126b7565b6113978560405180606001604052806028815260200161579760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061134d6126b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461379b9092919063ffffffff16565b6126bf565b600190509392505050565b61dead81565b60185481565b60006012905090565b60006114656113c96126b7565b8461146085600160006113da6126b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265990919063ffffffff16565b6126bf565b6001905092915050565b7f00000000000000000000000095a988f250c99e544648654a62e96e108cff8a9281565b600b60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61156b6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f1906148ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116c56126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b906148ac565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61177e6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611804906148ac565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b6118766126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc906148ac565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461192d9190614a47565b6119379190614a47565b600f819055506014600f541115611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90614c33565b60405180910390fd5b505050565b6119906126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a16906148ac565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b611a8f6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b15906148ac565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b4a9061482e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b769061482e565b8015611bc35780601f10611b9857610100808354040283529160200191611bc3565b820191906000526020600020905b815481529060010190602001808311611ba657829003601f168201915b5050505050905090565b611bd56126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5b906148ac565b60405180910390fd5b7f00000000000000000000000095a988f250c99e544648654a62e96e108cff8a9273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea90614cc5565b60405180910390fd5b611cfd82826137ff565b5050565b60125481565b601c5481565b60165481565b611d1b6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da1906148ac565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611e8a611dd46126b7565b84611e85856040518060600160405280602581526020016157bf6025913960016000611dfe6126b7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461379b9092919063ffffffff16565b6126bf565b6001905092915050565b600b60039054906101000a900460ff1681565b60195481565b6000611ec1611eba6126b7565b848461288a565b6001905092915050565b611ed36126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f59906148ac565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061204c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016120af565b612079600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611776565b50565b601f6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6120b76126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d906148ac565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121e39190614479565b60405180910390a25050565b6121f76126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d906148ac565b60405180910390fd5b670de0b6b3a76400006103e8600561229c610e4b565b6122a691906148fb565b6122b09190614984565b6122ba9190614984565b8110156122fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f390614d57565b60405180910390fd5b670de0b6b3a76400008161231091906148fb565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123cf6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461245e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612455906148ac565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61248e6126b7565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612514906148ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561258d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258490614de9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b60008082846126689190614a47565b9050838110156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614e55565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561272f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272690614ee7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614f79565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287d919061454a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f19061500b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561296a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129619061509d565b60405180910390fd5b60008114156129845761297f838360006138a0565b613796565b600b60009054906101000a900460ff1615613047576129a1611a57565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a0f57506129df611a57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a485750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a82575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a9b5750600560149054906101000a900460ff16155b1561304657600b60019054906101000a900460ff16612b9557601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b555750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b90615109565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d5d57612bb2611a57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c3957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c9157507f00000000000000000000000095a988f250c99e544648654a62e96e108cff8a9273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d5c5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e906151c1565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e005750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ea757600854811115612e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4190615253565b60405180910390fd5b600a54612e568361151b565b82612e619190614a47565b1115612ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e99906152bf565b60405180910390fd5b613045565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f4a5750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f9957600854811115612f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8b90615351565b60405180910390fd5b613044565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661304357600a54612ff68361151b565b826130019190614a47565b1115613042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613039906152bf565b60405180910390fd5b5b5b5b5b5b60007f00000000000000000000000095a988f250c99e544648654a62e96e108cff8a9273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156130b45750600b60039054906101000a900460ff165b156131df576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561315657504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131539190614a47565b10155b1561319e576017546015819055506018546014819055506019546016819055506016546015546014546131899190614a47565b6131939190614a47565b6013819055506131da565b6004601581905550600060148190555060016016819055506016546015546014546131c99190614a47565b6131d39190614a47565b6013819055505b6132bd565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561326c5742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff166132bc576004601581905550600060148190555060016016819055506016546015546014546132ab9190614a47565b6132b59190614a47565b6013819055505b5b60006132c83061151b565b9050600060095482101590508080156132ed5750600b60029054906101000a900460ff165b80156133065750600560149054906101000a900460ff16155b801561335c5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133b25750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134085750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561344c576001600560146101000a81548160ff021916908315150217905550613430613b35565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135025750601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561350c57600090505b6000811561378557601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561356f57506000601354115b1561363c5761359c606461358e60135489613e1c90919063ffffffff16565b613e9790919063ffffffff16565b9050601354601554826135af91906148fb565b6135b99190614984565b601b60008282546135ca9190614a47565b92505081905550601354601654826135e291906148fb565b6135ec9190614984565b601c60008282546135fd9190614a47565b925050819055506013546014548261361591906148fb565b61361f9190614984565b601a60008282546136309190614a47565b92505081905550613761565b601f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561369757506000600f54115b15613760576136c460646136b6600f5489613e1c90919063ffffffff16565b613e9790919063ffffffff16565b9050600f54601154826136d791906148fb565b6136e19190614984565b601b60008282546136f29190614a47565b92505081905550600f546012548261370a91906148fb565b6137149190614984565b601c60008282546137259190614a47565b92505081905550600f546010548261373d91906148fb565b6137479190614984565b601a60008282546137589190614a47565b925050819055505b5b6000811115613776576137758830836138a0565b5b80866137829190615371565b95505b6137908888886138a0565b50505050505b505050565b60008383111582906137e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137da9190614363565b60405180910390fd5b50600083856137f29190615371565b9050809150509392505050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613910576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139079061500b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613980576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139779061509d565b60405180910390fd5b61398b838383613ee1565b6139f681604051806060016040528060268152602001615771602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461379b9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a89816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613b28919061454a565b60405180910390a3505050565b6000613b403061151b565b90506000601c54601a54601b54613b579190614a47565b613b619190614a47565b9050600080831480613b735750600082145b15613b8057505050613e1a565b6014600954613b8f91906148fb565b831115613ba8576014600954613ba591906148fb565b92505b6000600283601b5486613bbb91906148fb565b613bc59190614984565b613bcf9190614984565b90506000613be68286613ee690919063ffffffff16565b90506000479050613bf682613f30565b6000613c0b8247613ee690919063ffffffff16565b90506000613c3687613c28601a5485613e1c90919063ffffffff16565b613e9790919063ffffffff16565b90506000613c6188613c53601c5486613e1c90919063ffffffff16565b613e9790919063ffffffff16565b90506000818385613c729190615371565b613c7c9190615371565b90506000601b819055506000601a819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613cdc906153d6565b60006040518083038185875af1925050503d8060008114613d19576040519150601f19603f3d011682016040523d82523d6000602084013e613d1e565b606091505b505080985050600087118015613d345750600081115b15613d8157613d43878261417c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601b54604051613d78939291906153eb565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613dc7906153d6565b60006040518083038185875af1925050503d8060008114613e04576040519150601f19603f3d011682016040523d82523d6000602084013e613e09565b606091505b505080985050505050505050505050505b565b600080831415613e2f5760009050613e91565b60008284613e3d91906148fb565b9050828482613e4c9190614984565b14613e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e8390615494565b60405180910390fd5b809150505b92915050565b6000613ed983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614267565b905092915050565b505050565b6000613f2883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061379b565b905092915050565b6000600267ffffffffffffffff811115613f4d57613f4c6154b4565b5b604051908082528060200260200182016040528015613f7b5781602001602082028036833780820191505090505b5090503081600081518110613f9357613f926154e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561403357600080fd5b505afa158015614047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061406b9190615527565b8160018151811061407f5761407e6154e3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140e4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126bf565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161414695949392919061564d565b600060405180830381600087803b15801561416057600080fd5b505af1158015614174573d6000803e3d6000fd5b505050505050565b6141a7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126bf565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161420e969594939291906156a7565b6060604051808303818588803b15801561422757600080fd5b505af115801561423b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614260919061571d565b5050505050565b600080831182906142ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142a59190614363565b60405180910390fd5b50600083856142bd9190614984565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143045780820151818401526020810190506142e9565b83811115614313576000848401525b50505050565b6000601f19601f8301169050919050565b6000614335826142ca565b61433f81856142d5565b935061434f8185602086016142e6565b61435881614319565b840191505092915050565b6000602082019050818103600083015261437d818461432a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143b58261438a565b9050919050565b6143c5816143aa565b81146143d057600080fd5b50565b6000813590506143e2816143bc565b92915050565b6000819050919050565b6143fb816143e8565b811461440657600080fd5b50565b600081359050614418816143f2565b92915050565b6000806040838503121561443557614434614385565b5b6000614443858286016143d3565b925050602061445485828601614409565b9150509250929050565b60008115159050919050565b6144738161445e565b82525050565b600060208201905061448e600083018461446a565b92915050565b6000602082840312156144aa576144a9614385565b5b60006144b8848285016143d3565b91505092915050565b6000819050919050565b60006144e66144e16144dc8461438a565b6144c1565b61438a565b9050919050565b60006144f8826144cb565b9050919050565b600061450a826144ed565b9050919050565b61451a816144ff565b82525050565b60006020820190506145356000830184614511565b92915050565b614544816143e8565b82525050565b600060208201905061455f600083018461453b565b92915050565b60006020828403121561457b5761457a614385565b5b600061458984828501614409565b91505092915050565b60008060008060008060c087890312156145af576145ae614385565b5b60006145bd89828a01614409565b96505060206145ce89828a01614409565b95505060406145df89828a01614409565b94505060606145f089828a01614409565b935050608061460189828a01614409565b92505060a061461289828a01614409565b9150509295509295509295565b60008060006060848603121561463857614637614385565b5b6000614646868287016143d3565b9350506020614657868287016143d3565b925050604061466886828701614409565b9150509250925092565b61467b816143aa565b82525050565b60006020820190506146966000830184614672565b92915050565b600060ff82169050919050565b6146b28161469c565b82525050565b60006020820190506146cd60008301846146a9565b92915050565b6146dc8161445e565b81146146e757600080fd5b50565b6000813590506146f9816146d3565b92915050565b6000806040838503121561471657614715614385565b5b6000614724858286016143d3565b9250506020614735858286016146ea565b9150509250929050565b60008060006060848603121561475857614757614385565b5b600061476686828701614409565b935050602061477786828701614409565b925050604061478886828701614409565b9150509250925092565b6000602082840312156147a8576147a7614385565b5b60006147b6848285016146ea565b91505092915050565b600080604083850312156147d6576147d5614385565b5b60006147e4858286016143d3565b92505060206147f5858286016143d3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061484657607f821691505b6020821081141561485a576148596147ff565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148966020836142d5565b91506148a182614860565b602082019050919050565b600060208201905081810360008301526148c581614889565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614906826143e8565b9150614911836143e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561494a576149496148cc565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061498f826143e8565b915061499a836143e8565b9250826149aa576149a9614955565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614a11602f836142d5565b9150614a1c826149b5565b604082019050919050565b60006020820190508181036000830152614a4081614a04565b9050919050565b6000614a52826143e8565b9150614a5d836143e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a9257614a916148cc565b5b828201905092915050565b7f4d757374206b6565702073656c6c206665657320617420323025206f72206c6560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614af96022836142d5565b9150614b0482614a9d565b604082019050919050565b60006020820190508181036000830152614b2881614aec565b9050919050565b7f4d757374206b656570206561726c792073656c6c20666565206174203230252060008201527f6f72206c65737300000000000000000000000000000000000000000000000000602082015250565b6000614b8b6027836142d5565b9150614b9682614b2f565b604082019050919050565b60006020820190508181036000830152614bba81614b7e565b9050919050565b7f4d757374206b65657020627579206665657320617420323025206f72206c657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c1d6021836142d5565b9150614c2882614bc1565b604082019050919050565b60006020820190508181036000830152614c4c81614c10565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614caf6039836142d5565b9150614cba82614c53565b604082019050919050565b60006020820190508181036000830152614cde81614ca2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d416024836142d5565b9150614d4c82614ce5565b604082019050919050565b60006020820190508181036000830152614d7081614d34565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dd36026836142d5565b9150614dde82614d77565b604082019050919050565b60006020820190508181036000830152614e0281614dc6565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614e3f601b836142d5565b9150614e4a82614e09565b602082019050919050565b60006020820190508181036000830152614e6e81614e32565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ed16024836142d5565b9150614edc82614e75565b604082019050919050565b60006020820190508181036000830152614f0081614ec4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f636022836142d5565b9150614f6e82614f07565b604082019050919050565b60006020820190508181036000830152614f9281614f56565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ff56025836142d5565b915061500082614f99565b604082019050919050565b6000602082019050818103600083015261502481614fe8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150876023836142d5565b91506150928261502b565b604082019050919050565b600060208201905081810360008301526150b68161507a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150f36016836142d5565b91506150fe826150bd565b602082019050919050565b60006020820190508181036000830152615122816150e6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151ab6049836142d5565b91506151b682615129565b606082019050919050565b600060208201905081810360008301526151da8161519e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061523d6035836142d5565b9150615248826151e1565b604082019050919050565b6000602082019050818103600083015261526c81615230565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152a96013836142d5565b91506152b482615273565b602082019050919050565b600060208201905081810360008301526152d88161529c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061533b6036836142d5565b9150615346826152df565b604082019050919050565b6000602082019050818103600083015261536a8161532e565b9050919050565b600061537c826143e8565b9150615387836143e8565b92508282101561539a576153996148cc565b5b828203905092915050565b600081905092915050565b50565b60006153c06000836153a5565b91506153cb826153b0565b600082019050919050565b60006153e1826153b3565b9150819050919050565b6000606082019050615400600083018661453b565b61540d602083018561453b565b61541a604083018461453b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061547e6021836142d5565b915061548982615422565b604082019050919050565b600060208201905081810360008301526154ad81615471565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615521816143bc565b92915050565b60006020828403121561553d5761553c614385565b5b600061554b84828501615512565b91505092915050565b6000819050919050565b600061557961557461556f84615554565b6144c1565b6143e8565b9050919050565b6155898161555e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155c4816143aa565b82525050565b60006155d683836155bb565b60208301905092915050565b6000602082019050919050565b60006155fa8261558f565b615604818561559a565b935061560f836155ab565b8060005b8381101561564057815161562788826155ca565b9750615632836155e2565b925050600181019050615613565b5085935050505092915050565b600060a082019050615662600083018861453b565b61566f6020830187615580565b818103604083015261568181866155ef565b90506156906060830185614672565b61569d608083018461453b565b9695505050505050565b600060c0820190506156bc6000830189614672565b6156c9602083018861453b565b6156d66040830187615580565b6156e36060830186615580565b6156f06080830185614672565b6156fd60a083018461453b565b979650505050505050565b600081519050615717816143f2565b92915050565b60008060006060848603121561573657615735614385565b5b600061574486828701615708565b935050602061575586828701615708565b925050604061576686828701615708565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205596d0e8145b27d6fcd2d03ce742bdac34638ce7c29ee6b58540ca73bf5011cd64736f6c63430008090033

Deployed Bytecode Sourcemap

29610:16936:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7708:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9882:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31239:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29694:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8831:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38253:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31020:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30980;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35254:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36455:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10534:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29797:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30897:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8672:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11299:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29752:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30080:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38516:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30854:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30708:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30160:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9003:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22210:148;;;;;;;;;;;;;:::i;:::-;;34818:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35721:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30600:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36072:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34653:112;;;;;;;;;;;;;:::i;:::-;;21566:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30743:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35962:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7928:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37478:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30674:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31060:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30819:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35143:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12021:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30198:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30940:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9344:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37930:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31462:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30120:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37287:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35497:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30517:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29964:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30566:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9583:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30006:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35000:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30637:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22514:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30781:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30046:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7708:100;7762:13;7795:5;7788:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7708:100;:::o;9882:169::-;9965:4;9982:39;9991:12;:10;:12::i;:::-;10005:7;10014:6;9982:8;:39::i;:::-;10039:4;10032:11;;9882:169;;;;:::o;31239:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29694:51::-;;;:::o;8831:108::-;8892:7;8919:12;;8912:19;;8831:108;:::o;38253:251::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38360:9:::1;;;;;;;;;;;38332:38;;38349:9;38332:38;;;;;;;;;;;;38393:9;38381;;:21;;;;;;;;;;;;;;;;;;38413:31;38429:9;;;;;;;;;;;38439:4;38413:15;:31::i;:::-;38455:41;38481:9;;;;;;;;;;;38491:4;38455:25;:41::i;:::-;38253:251:::0;:::o;31020:33::-;;;;:::o;30980:::-;;;;:::o;35254:234::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35373:4:::1;35367;35363:1;35347:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35346:31;;;;:::i;:::-;35336:6;:41;;35328:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35473:6;35463;:17;;;;:::i;:::-;35440:20;:40;;;;35254:234:::0;:::o;36455:823::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36682:13:::1;36663:16;:32;;;;36725:13;36706:16;:32;;;;36762:7;36749:10;:20;;;;36804:22;36780:21;:46;;;;36861:22;36837:21;:46;;;;36909:16;36891:15;:34;;;;36990:10;;36971:16;;36952;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;36936:13;:64;;;;37036:2;37019:13;;:19;;37011:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37088:26;37167:16;37142:22;37117;:47;;;;:::i;:::-;:66;;;;:::i;:::-;37088:95;;37224:2;37202:18;:24;;37194:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36652:626;36455:823:::0;;;;;;:::o;10534:355::-;10674:4;10691:36;10701:6;10709:9;10720:6;10691:9;:36::i;:::-;10738:121;10747:6;10755:12;:10;:12::i;:::-;10769:89;10807:6;10769:89;;;;;;;;;;;;;;;;;:11;:19;10781:6;10769:19;;;;;;;;;;;;;;;:33;10789:12;:10;:12::i;:::-;10769:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10738:8;:121::i;:::-;10877:4;10870:11;;10534:355;;;;;:::o;29797:53::-;29843:6;29797:53;:::o;30897:36::-;;;;:::o;8672:93::-;8730:5;8755:2;8748:9;;8672:93;:::o;11299:218::-;11387:4;11404:83;11413:12;:10;:12::i;:::-;11427:7;11436:50;11475:10;11436:11;:25;11448:12;:10;:12::i;:::-;11436:25;;;;;;;;;;;;;;;:34;11462:7;11436:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11404:8;:83::i;:::-;11505:4;11498:11;;11299:218;;;;:::o;29752:38::-;;;:::o;30080:33::-;;;;;;;;;;;;;:::o;38516:125::-;38581:4;38605:19;:28;38625:7;38605:28;;;;;;;;;;;;;;;;;;;;;;;;;38598:35;;38516:125;;;:::o;30854:36::-;;;;:::o;30708:28::-;;;;:::o;30160:31::-;;;;;;;;;;;;;:::o;9003:127::-;9077:7;9104:9;:18;9114:7;9104:18;;;;;;;;;;;;;;;;9097:25;;9003:127;;;:::o;22210:148::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22317:1:::1;22280:40;;22301:6;;;;;;;;;;;22280:40;;;;;;;;;;;;22348:1;22331:6;;:19;;;;;;;;;;;;;;;;;;22210:148::o:0;34818:120::-;34870:4;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34903:5:::1;34886:14;;:22;;;;;;;;;;;;;;;;;;34926:4;34919:11;;34818:120:::0;:::o;35721:144::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35853:4:::1;35811:31;:39;35843:6;35811:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35721:144:::0;;:::o;30600:30::-;;;;:::o;36072:374::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36207:13:::1;36189:15;:31;;;;36249:13;36231:15;:31;;;;36285:7;36273:9;:19;;;;36354:9;;36336:15;;36318;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36303:12;:60;;;;36398:2;36382:12;;:18;;36374:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36072:374:::0;;;:::o;34653:112::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34724:4:::1;34708:13;;:20;;;;;;;;;;;;;;;;;;34753:4;34739:11;;:18;;;;;;;;;;;;;;;;;;34653:112::o:0;21566:79::-;21604:7;21631:6;;;;;;;;;;;21624:13;;21566:79;:::o;30743:31::-;;;;:::o;35962:101::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36048:7:::1;36034:11;;:21;;;;;;;;;;;;;;;;;;35962:101:::0;:::o;7928:104::-;7984:13;8017:7;8010:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7928:104;:::o;37478:245::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37585:13:::1;37577:21;;:4;:21;;;;37569:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37674:41;37703:4;37709:5;37674:28;:41::i;:::-;37478:245:::0;;:::o;30674:24::-;;;;:::o;31060:27::-;;;;:::o;30819:25::-;;;;:::o;35143:102::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35232:5:::1;35211:18;;:26;;;;;;;;;;;;;;;;;;35143:102:::0;:::o;12021:269::-;12114:4;12131:129;12140:12;:10;:12::i;:::-;12154:7;12163:96;12202:15;12163:96;;;;;;;;;;;;;;;;;:11;:25;12175:12;:10;:12::i;:::-;12163:25;;;;;;;;;;;;;;;:34;12189:7;12163:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12131:8;:129::i;:::-;12278:4;12271:11;;12021:269;;;;:::o;30198:37::-;;;;;;;;;;;;;:::o;30940:30::-;;;;:::o;9344:175::-;9430:4;9447:42;9457:12;:10;:12::i;:::-;9471:9;9482:6;9447:9;:42::i;:::-;9507:4;9500:11;;9344:175;;;;:::o;37930:314::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38067:15:::1;;;;;;;;;;;38024:59;;38047:18;38024:59;;;;;;;;;;;;38112:18;38094:15;;:36;;;;;;;;;;;;;;;;;;38141:37;38157:15;;;;;;;;;;;38173:4;38141:15;:37::i;:::-;38189:47;38215:15;;;;;;;;;;;38231:4;38189:25;:47::i;:::-;37930:314:::0;:::o;31462:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30120:33::-;;;;;;;;;;;;;:::o;37287:182::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37403:8:::1;37372:19;:28;37392:7;37372:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37443:7;37427:34;;;37452:8;37427:34;;;;;;:::i;:::-;;;;;;;;37287:182:::0;;:::o;35497:215::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35619:4:::1;35613;35609:1;35593:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35592:31;;;;:::i;:::-;35582:6;:41;;35574:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35697:6;35687;:17;;;;:::i;:::-;35675:9;:29;;;;35497:215:::0;:::o;30517:39::-;;;;;;;;;;;;;:::o;29964:35::-;;;;:::o;30566:27::-;;;;:::o;9583:151::-;9672:7;9699:11;:18;9711:5;9699:18;;;;;;;;;;;;;;;:27;9718:7;9699:27;;;;;;;;;;;;;;;;9692:34;;9583:151;;;;:::o;30006:33::-;;;;:::o;35000:134::-;35060:4;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35099:5:::1;35076:20;;:28;;;;;;;;;;;;;;;;;;35122:4;35115:11;;35000:134:::0;:::o;30637:30::-;;;;:::o;22514:244::-;21789:12;:10;:12::i;:::-;21779:22;;:6;;;;;;;;;;;:22;;;21771:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22623:1:::1;22603:22;;:8;:22;;;;22595:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22713:8;22684:38;;22705:6;;;;;;;;;;;22684:38;;;;;;;;;;;;22742:8;22733:6;;:17;;;;;;;;;;;;;;;;;;22514:244:::0;:::o;30781:31::-;;;;:::o;30046:24::-;;;;:::o;16598:182::-;16656:7;16676:9;16692:1;16688;:5;;;;:::i;:::-;16676:17;;16717:1;16712;:6;;16704:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16771:1;16764:8;;;16598:182;;;;:::o;399:98::-;452:7;479:10;472:17;;399:98;:::o;15217:381::-;15370:1;15353:19;;:5;:19;;;;15345:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15451:1;15432:21;;:7;:21;;;;15424:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15536:6;15506:11;:18;15518:5;15506:18;;;;;;;;;;;;;;;:27;15525:7;15506:27;;;;;;;;;;;;;;;:36;;;;15574:7;15558:32;;15567:5;15558:32;;;15583:6;15558:32;;;;;;:::i;:::-;;;;;;;;15217:381;;;:::o;38650:5181::-;38798:1;38782:18;;:4;:18;;;;38774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38875:1;38861:16;;:2;:16;;;;38853:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38941:1;38931:6;:11;38928:92;;;38959:28;38975:4;38981:2;38985:1;38959:15;:28::i;:::-;39002:7;;38928:92;39036:14;;;;;;;;;;;39033:1811;;;39096:7;:5;:7::i;:::-;39088:15;;:4;:15;;;;:49;;;;;39130:7;:5;:7::i;:::-;39124:13;;:2;:13;;;;39088:49;:86;;;;;39172:1;39158:16;;:2;:16;;;;39088:86;:128;;;;;39209:6;39195:21;;:2;:21;;;;39088:128;:158;;;;;39238:8;;;;;;;;;;;39237:9;39088:158;39066:1767;;;39284:13;;;;;;;;;;;39280:148;;39329:19;:25;39349:4;39329:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39358:19;:23;39378:2;39358:23;;;;;;;;;;;;;;;;;;;;;;;;;39329:52;39321:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39280:148;39587:20;;;;;;;;;;;39583:423;;;39641:7;:5;:7::i;:::-;39635:13;;:2;:13;;;;:47;;;;;39666:15;39652:30;;:2;:30;;;;39635:47;:79;;;;;39700:13;39686:28;;:2;:28;;;;39635:79;39631:356;;;39792:12;39750:28;:39;39779:9;39750:39;;;;;;;;;;;;;;;;:54;39742:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39951:12;39909:28;:39;39938:9;39909:39;;;;;;;;;;;;;;;:54;;;;39631:356;39583:423;40059:25;:31;40085:4;40059:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40095:31;:35;40127:2;40095:35;;;;;;;;;;;;;;;;;;;;;;;;;40094:36;40059:71;40055:763;;;40177:20;;40167:6;:30;;40159:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40316:9;;40299:13;40309:2;40299:9;:13::i;:::-;40290:6;:22;;;;:::i;:::-;:35;;40282:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40055:763;;;40428:25;:29;40454:2;40428:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40462:31;:37;40494:4;40462:37;;;;;;;;;;;;;;;;;;;;;;;;;40461:38;40428:71;40424:394;;;40546:20;;40536:6;:30;;40528:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40424:394;;;40672:31;:35;40704:2;40672:35;;;;;;;;;;;;;;;;;;;;;;;;;40668:150;;40765:9;;40748:13;40758:2;40748:9;:13::i;:::-;40739:6;:22;;;;:::i;:::-;:35;;40731:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40668:150;40424:394;40055:763;39066:1767;39033:1811;40886:10;40907:13;40899:21;;:4;:21;;;40886:34;;40936:5;40935:6;:28;;;;;40945:18;;;;;;;;;;;40935:28;40931:1059;;;41018:1;40984:24;:30;41009:4;40984:30;;;;;;;;;;;;;;;;:35;;:120;;;;;41088:15;41075:8;41041:24;:30;41066:4;41041:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;40984:120;40980:601;;;41145:21;;41126:16;:40;;;;41204:21;;41185:16;:40;;;;41251:15;;41238:10;:28;;;;41339:10;;41320:16;;41301;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41285:13;:64;;;;40980:601;;;41409:1;41390:16;:20;;;;41448:1;41429:16;:20;;;;41481:1;41468:10;:14;;;;41555:10;;41536:16;;41517;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41501:13;:64;;;;40980:601;40931:1059;;;41649:1;41617:24;:28;41642:2;41617:28;;;;;;;;;;;;;;;;:33;41613:120;;;41702:15;41671:24;:28;41696:2;41671:28;;;;;;;;;;;;;;;:46;;;;41613:120;41755:18;;;;;;;;;;;41750:229;;41813:1;41794:16;:20;;;;41852:1;41833:16;:20;;;;41879:1;41866:10;:14;;;;41953:10;;41934:16;;41915;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41899:13;:64;;;;41750:229;40931:1059;42003:28;42034:24;42052:4;42034:9;:24::i;:::-;42003:55;;42072:12;42111:18;;42087:20;:42;;42072:57;;42161:7;:35;;;;;42185:11;;;;;;;;;;;42161:35;:61;;;;;42214:8;;;;;;;;;;;42213:9;42161:61;:110;;;;;42240:25;:31;42266:4;42240:31;;;;;;;;;;;;;;;;;;;;;;;;;42239:32;42161:110;:153;;;;;42289:19;:25;42309:4;42289:25;;;;;;;;;;;;;;;;;;;;;;;;;42288:26;42161:153;:194;;;;;42332:19;:23;42352:2;42332:23;;;;;;;;;;;;;;;;;;;;;;;;;42331:24;42161:194;42143:328;;;42393:4;42382:8;;:15;;;;;;;;;;;;;;;;;;42415:10;:8;:10::i;:::-;42454:5;42443:8;;:16;;;;;;;;;;;;;;;;;;42143:328;42484:12;42500:8;;;;;;;;;;;42499:9;42484:24;;42610:19;:25;42630:4;42610:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42639:19;:23;42659:2;42639:23;;;;;;;;;;;;;;;;;;;;;;;;;42610:52;42607:99;;;42689:5;42679:15;;42607:99;42719:12;42823:7;42820:957;;;42874:25;:29;42900:2;42874:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42923:1;42907:13;;:17;42874:50;42870:754;;;42951:34;42981:3;42951:25;42962:13;;42951:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42944:41;;43052:13;;43033:16;;43026:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43004:18;;:61;;;;;;;:::i;:::-;;;;;;;;43120:13;;43107:10;;43100:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;43084:12;;:49;;;;;;;:::i;:::-;;;;;;;;43200:13;;43181:16;;43174:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43152:18;;:61;;;;;;;:::i;:::-;;;;;;;;42870:754;;;43274:25;:31;43300:4;43274:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43324:1;43309:12;;:16;43274:51;43271:353;;;43353:33;43382:3;43353:24;43364:12;;43353:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43346:40;;43452:12;;43434:15;;43427:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43405:18;;:59;;;;;;;:::i;:::-;;;;;;;;43518:12;;43506:9;;43499:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43483:12;;:47;;;;;;;:::i;:::-;;;;;;;;43596:12;;43578:15;;43571:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43549:18;;:59;;;;;;;:::i;:::-;;;;;;;;43271:353;42870:754;43651:1;43644:4;:8;43641:93;;;43676:42;43692:4;43706;43713;43676:15;:42::i;:::-;43641:93;43761:4;43751:14;;;;;:::i;:::-;;;42820:957;43790:33;43806:4;43812:2;43816:6;43790:15;:33::i;:::-;38763:5068;;;;;38650:5181;;;;:::o;17504:193::-;17590:7;17623:1;17618;:6;;17626:12;17610:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17650:9;17666:1;17662;:5;;;;:::i;:::-;17650:17;;17688:1;17681:8;;;17504:193;;;;;:::o;37732:189::-;37849:5;37815:25;:31;37841:4;37815:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37907:5;37873:40;;37901:4;37873:40;;;;;;;;;;;;37732:189;;:::o;12781:575::-;12939:1;12921:20;;:6;:20;;;;12913:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13023:1;13002:23;;:9;:23;;;;12994:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13079:47;13100:6;13108:9;13119:6;13079:20;:47::i;:::-;13160:71;13182:6;13160:71;;;;;;;;;;;;;;;;;:9;:17;13170:6;13160:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13140:9;:17;13150:6;13140:17;;;;;;;;;;;;;;;:91;;;;13265:32;13290:6;13265:9;:20;13275:9;13265:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13242:9;:20;13252:9;13242:20;;;;;;;;;;;;;;;:55;;;;13330:9;13313:35;;13322:6;13313:35;;;13341:6;13313:35;;;;;;:::i;:::-;;;;;;;;12781:575;;;:::o;44973:1568::-;45012:23;45038:24;45056:4;45038:9;:24::i;:::-;45012:50;;45073:25;45143:12;;45122:18;;45101;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;45073:82;;45166:12;45214:1;45195:15;:20;:46;;;;45240:1;45219:17;:22;45195:46;45192:60;;;45244:7;;;;;45192:60;45307:2;45286:18;;:23;;;;:::i;:::-;45268:15;:41;45265:111;;;45362:2;45341:18;;:23;;;;:::i;:::-;45323:41;;45265:111;45438:23;45523:1;45503:17;45482:18;;45464:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45438:86;;45535:26;45564:36;45584:15;45564;:19;;:36;;;;:::i;:::-;45535:65;;45614:25;45642:21;45614:49;;45677:36;45694:18;45677:16;:36::i;:::-;45728:18;45749:44;45775:17;45749:21;:25;;:44;;;;:::i;:::-;45728:65;;45807:23;45833:57;45872:17;45833:34;45848:18;;45833:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;45807:83;;45901:17;45921:51;45954:17;45921:28;45936:12;;45921:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;45901:71;;45983:23;46040:9;46022:15;46009:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;45983:66;;46087:1;46066:18;:22;;;;46120:1;46099:18;:22;;;;46147:1;46132:12;:16;;;;46183:9;;;;;;;;;;;46175:23;;46206:9;46175:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46162:58;;;;;46255:1;46237:15;:19;:42;;;;;46278:1;46260:15;:19;46237:42;46234:210;;;46295:46;46308:15;46325;46295:12;:46::i;:::-;46361:71;46376:18;46396:15;46413:18;;46361:71;;;;;;;;:::i;:::-;;;;;;;;46234:210;46478:15;;;;;;;;;;;46470:29;;46507:21;46470:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46457:76;;;;;45001:1540;;;;;;;;;;44973:1568;:::o;17957:473::-;18015:7;18265:1;18260;:6;18256:47;;;18290:1;18283:8;;;;18256:47;18316:9;18332:1;18328;:5;;;;:::i;:::-;18316:17;;18361:1;18356;18352;:5;;;;:::i;:::-;:10;18344:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18421:1;18414:8;;;17957:473;;;;;:::o;18907:132::-;18965:7;18992:39;18996:1;18999;18992:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18985:46;;18907:132;;;;:::o;16202:125::-;;;;:::o;17064:136::-;17122:7;17149:43;17153:1;17156;17149:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17142:50;;17064:136;;;;:::o;43840:597::-;43969:21;44007:1;43993:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43969:40;;44038:4;44020;44025:1;44020:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44064:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44054:4;44059:1;44054:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44100:62;44117:4;44132:15;44150:11;44100:8;:62::i;:::-;44202:15;:66;;;44283:11;44309:1;44353:4;44380;44400:15;44202:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43895:542;43840:597;:::o;44446:518::-;44594:62;44611:4;44626:15;44644:11;44594:8;:62::i;:::-;44700:15;:31;;;44739:9;44772:4;44792:11;44818:1;44861;29843:6;44930:15;44700:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44446:518;;:::o;19536:279::-;19622:7;19654:1;19650;:5;19657:12;19642:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19681:9;19697:1;19693;:5;;;;:::i;:::-;19681:17;;19806:1;19799:8;;;19536:279;;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:1057::-;5598:6;5606;5614;5622;5630;5638;5687:3;5675:9;5666:7;5662:23;5658:33;5655:120;;;5694:79;;:::i;:::-;5655:120;5814:1;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5785:117;5941:2;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5912:118;6069:2;6095:53;6140:7;6131:6;6120:9;6116:22;6095:53;:::i;:::-;6085:63;;6040:118;6197:2;6223:53;6268:7;6259:6;6248:9;6244:22;6223:53;:::i;:::-;6213:63;;6168:118;6325:3;6352:53;6397:7;6388:6;6377:9;6373:22;6352:53;:::i;:::-;6342:63;;6296:119;6454:3;6481:53;6526:7;6517:6;6506:9;6502:22;6481:53;:::i;:::-;6471:63;;6425:119;5494:1057;;;;;;;;:::o;6557:619::-;6634:6;6642;6650;6699:2;6687:9;6678:7;6674:23;6670:32;6667:119;;;6705:79;;:::i;:::-;6667:119;6825:1;6850:53;6895:7;6886:6;6875:9;6871:22;6850:53;:::i;:::-;6840:63;;6796:117;6952:2;6978:53;7023:7;7014:6;7003:9;6999:22;6978:53;:::i;:::-;6968:63;;6923:118;7080:2;7106:53;7151:7;7142:6;7131:9;7127:22;7106:53;:::i;:::-;7096:63;;7051:118;6557:619;;;;;:::o;7182:118::-;7269:24;7287:5;7269:24;:::i;:::-;7264:3;7257:37;7182:118;;:::o;7306:222::-;7399:4;7437:2;7426:9;7422:18;7414:26;;7450:71;7518:1;7507:9;7503:17;7494:6;7450:71;:::i;:::-;7306:222;;;;:::o;7534:86::-;7569:7;7609:4;7602:5;7598:16;7587:27;;7534:86;;;:::o;7626:112::-;7709:22;7725:5;7709:22;:::i;:::-;7704:3;7697:35;7626:112;;:::o;7744:214::-;7833:4;7871:2;7860:9;7856:18;7848:26;;7884:67;7948:1;7937:9;7933:17;7924:6;7884:67;:::i;:::-;7744:214;;;;:::o;7964:116::-;8034:21;8049:5;8034:21;:::i;:::-;8027:5;8024:32;8014:60;;8070:1;8067;8060:12;8014:60;7964:116;:::o;8086:133::-;8129:5;8167:6;8154:20;8145:29;;8183:30;8207:5;8183:30;:::i;:::-;8086:133;;;;:::o;8225:468::-;8290:6;8298;8347:2;8335:9;8326:7;8322:23;8318:32;8315:119;;;8353:79;;:::i;:::-;8315:119;8473:1;8498:53;8543:7;8534:6;8523:9;8519:22;8498:53;:::i;:::-;8488:63;;8444:117;8600:2;8626:50;8668:7;8659:6;8648:9;8644:22;8626:50;:::i;:::-;8616:60;;8571:115;8225:468;;;;;:::o;8699:619::-;8776:6;8784;8792;8841:2;8829:9;8820:7;8816:23;8812:32;8809:119;;;8847:79;;:::i;:::-;8809:119;8967:1;8992:53;9037:7;9028:6;9017:9;9013:22;8992:53;:::i;:::-;8982:63;;8938:117;9094:2;9120:53;9165:7;9156:6;9145:9;9141:22;9120:53;:::i;:::-;9110:63;;9065:118;9222:2;9248:53;9293:7;9284:6;9273:9;9269:22;9248:53;:::i;:::-;9238:63;;9193:118;8699:619;;;;;:::o;9324:323::-;9380:6;9429:2;9417:9;9408:7;9404:23;9400:32;9397:119;;;9435:79;;:::i;:::-;9397:119;9555:1;9580:50;9622:7;9613:6;9602:9;9598:22;9580:50;:::i;:::-;9570:60;;9526:114;9324:323;;;;:::o;9653:474::-;9721:6;9729;9778:2;9766:9;9757:7;9753:23;9749:32;9746:119;;;9784:79;;:::i;:::-;9746:119;9904:1;9929:53;9974:7;9965:6;9954:9;9950:22;9929:53;:::i;:::-;9919:63;;9875:117;10031:2;10057:53;10102:7;10093:6;10082:9;10078:22;10057:53;:::i;:::-;10047:63;;10002:118;9653:474;;;;;:::o;10133:180::-;10181:77;10178:1;10171:88;10278:4;10275:1;10268:15;10302:4;10299:1;10292:15;10319:320;10363:6;10400:1;10394:4;10390:12;10380:22;;10447:1;10441:4;10437:12;10468:18;10458:81;;10524:4;10516:6;10512:17;10502:27;;10458:81;10586:2;10578:6;10575:14;10555:18;10552:38;10549:84;;;10605:18;;:::i;:::-;10549:84;10370:269;10319:320;;;:::o;10645:182::-;10785:34;10781:1;10773:6;10769:14;10762:58;10645:182;:::o;10833:366::-;10975:3;10996:67;11060:2;11055:3;10996:67;:::i;:::-;10989:74;;11072:93;11161:3;11072:93;:::i;:::-;11190:2;11185:3;11181:12;11174:19;;10833:366;;;:::o;11205:419::-;11371:4;11409:2;11398:9;11394:18;11386:26;;11458:9;11452:4;11448:20;11444:1;11433:9;11429:17;11422:47;11486:131;11612:4;11486:131;:::i;:::-;11478:139;;11205:419;;;:::o;11630:180::-;11678:77;11675:1;11668:88;11775:4;11772:1;11765:15;11799:4;11796:1;11789:15;11816:348;11856:7;11879:20;11897:1;11879:20;:::i;:::-;11874:25;;11913:20;11931:1;11913:20;:::i;:::-;11908:25;;12101:1;12033:66;12029:74;12026:1;12023:81;12018:1;12011:9;12004:17;12000:105;11997:131;;;12108:18;;:::i;:::-;11997:131;12156:1;12153;12149:9;12138:20;;11816:348;;;;:::o;12170:180::-;12218:77;12215:1;12208:88;12315:4;12312:1;12305:15;12339:4;12336:1;12329:15;12356:185;12396:1;12413:20;12431:1;12413:20;:::i;:::-;12408:25;;12447:20;12465:1;12447:20;:::i;:::-;12442:25;;12486:1;12476:35;;12491:18;;:::i;:::-;12476:35;12533:1;12530;12526:9;12521:14;;12356:185;;;;:::o;12547:234::-;12687:34;12683:1;12675:6;12671:14;12664:58;12756:17;12751:2;12743:6;12739:15;12732:42;12547:234;:::o;12787:366::-;12929:3;12950:67;13014:2;13009:3;12950:67;:::i;:::-;12943:74;;13026:93;13115:3;13026:93;:::i;:::-;13144:2;13139:3;13135:12;13128:19;;12787:366;;;:::o;13159:419::-;13325:4;13363:2;13352:9;13348:18;13340:26;;13412:9;13406:4;13402:20;13398:1;13387:9;13383:17;13376:47;13440:131;13566:4;13440:131;:::i;:::-;13432:139;;13159:419;;;:::o;13584:305::-;13624:3;13643:20;13661:1;13643:20;:::i;:::-;13638:25;;13677:20;13695:1;13677:20;:::i;:::-;13672:25;;13831:1;13763:66;13759:74;13756:1;13753:81;13750:107;;;13837:18;;:::i;:::-;13750:107;13881:1;13878;13874:9;13867:16;;13584:305;;;;:::o;13895:221::-;14035:34;14031:1;14023:6;14019:14;14012:58;14104:4;14099:2;14091:6;14087:15;14080:29;13895:221;:::o;14122:366::-;14264:3;14285:67;14349:2;14344:3;14285:67;:::i;:::-;14278:74;;14361:93;14450:3;14361:93;:::i;:::-;14479:2;14474:3;14470:12;14463:19;;14122:366;;;:::o;14494:419::-;14660:4;14698:2;14687:9;14683:18;14675:26;;14747:9;14741:4;14737:20;14733:1;14722:9;14718:17;14711:47;14775:131;14901:4;14775:131;:::i;:::-;14767:139;;14494:419;;;:::o;14919:226::-;15059:34;15055:1;15047:6;15043:14;15036:58;15128:9;15123:2;15115:6;15111:15;15104:34;14919:226;:::o;15151:366::-;15293:3;15314:67;15378:2;15373:3;15314:67;:::i;:::-;15307:74;;15390:93;15479:3;15390:93;:::i;:::-;15508:2;15503:3;15499:12;15492:19;;15151:366;;;:::o;15523:419::-;15689:4;15727:2;15716:9;15712:18;15704:26;;15776:9;15770:4;15766:20;15762:1;15751:9;15747:17;15740:47;15804:131;15930:4;15804:131;:::i;:::-;15796:139;;15523:419;;;:::o;15948:220::-;16088:34;16084:1;16076:6;16072:14;16065:58;16157:3;16152:2;16144:6;16140:15;16133:28;15948:220;:::o;16174:366::-;16316:3;16337:67;16401:2;16396:3;16337:67;:::i;:::-;16330:74;;16413:93;16502:3;16413:93;:::i;:::-;16531:2;16526:3;16522:12;16515:19;;16174:366;;;:::o;16546:419::-;16712:4;16750:2;16739:9;16735:18;16727:26;;16799:9;16793:4;16789:20;16785:1;16774:9;16770:17;16763:47;16827:131;16953:4;16827:131;:::i;:::-;16819:139;;16546:419;;;:::o;16971:244::-;17111:34;17107:1;17099:6;17095:14;17088:58;17180:27;17175:2;17167:6;17163:15;17156:52;16971:244;:::o;17221:366::-;17363:3;17384:67;17448:2;17443:3;17384:67;:::i;:::-;17377:74;;17460:93;17549:3;17460:93;:::i;:::-;17578:2;17573:3;17569:12;17562:19;;17221:366;;;:::o;17593:419::-;17759:4;17797:2;17786:9;17782:18;17774:26;;17846:9;17840:4;17836:20;17832:1;17821:9;17817:17;17810:47;17874:131;18000:4;17874:131;:::i;:::-;17866:139;;17593:419;;;:::o;18018:223::-;18158:34;18154:1;18146:6;18142:14;18135:58;18227:6;18222:2;18214:6;18210:15;18203:31;18018:223;:::o;18247:366::-;18389:3;18410:67;18474:2;18469:3;18410:67;:::i;:::-;18403:74;;18486:93;18575:3;18486:93;:::i;:::-;18604:2;18599:3;18595:12;18588:19;;18247:366;;;:::o;18619:419::-;18785:4;18823:2;18812:9;18808:18;18800:26;;18872:9;18866:4;18862:20;18858:1;18847:9;18843:17;18836:47;18900:131;19026:4;18900:131;:::i;:::-;18892:139;;18619:419;;;:::o;19044:225::-;19184:34;19180:1;19172:6;19168:14;19161:58;19253:8;19248:2;19240:6;19236:15;19229:33;19044:225;:::o;19275:366::-;19417:3;19438:67;19502:2;19497:3;19438:67;:::i;:::-;19431:74;;19514:93;19603:3;19514:93;:::i;:::-;19632:2;19627:3;19623:12;19616:19;;19275:366;;;:::o;19647:419::-;19813:4;19851:2;19840:9;19836:18;19828:26;;19900:9;19894:4;19890:20;19886:1;19875:9;19871:17;19864:47;19928:131;20054:4;19928:131;:::i;:::-;19920:139;;19647:419;;;:::o;20072:177::-;20212:29;20208:1;20200:6;20196:14;20189:53;20072:177;:::o;20255:366::-;20397:3;20418:67;20482:2;20477:3;20418:67;:::i;:::-;20411:74;;20494:93;20583:3;20494:93;:::i;:::-;20612:2;20607:3;20603:12;20596:19;;20255:366;;;:::o;20627:419::-;20793:4;20831:2;20820:9;20816:18;20808:26;;20880:9;20874:4;20870:20;20866:1;20855:9;20851:17;20844:47;20908:131;21034:4;20908:131;:::i;:::-;20900:139;;20627:419;;;:::o;21052:223::-;21192:34;21188:1;21180:6;21176:14;21169:58;21261:6;21256:2;21248:6;21244:15;21237:31;21052:223;:::o;21281:366::-;21423:3;21444:67;21508:2;21503:3;21444:67;:::i;:::-;21437:74;;21520:93;21609:3;21520:93;:::i;:::-;21638:2;21633:3;21629:12;21622:19;;21281:366;;;:::o;21653:419::-;21819:4;21857:2;21846:9;21842:18;21834:26;;21906:9;21900:4;21896:20;21892:1;21881:9;21877:17;21870:47;21934:131;22060:4;21934:131;:::i;:::-;21926:139;;21653:419;;;:::o;22078:221::-;22218:34;22214:1;22206:6;22202:14;22195:58;22287:4;22282:2;22274:6;22270:15;22263:29;22078:221;:::o;22305:366::-;22447:3;22468:67;22532:2;22527:3;22468:67;:::i;:::-;22461:74;;22544:93;22633:3;22544:93;:::i;:::-;22662:2;22657:3;22653:12;22646:19;;22305:366;;;:::o;22677:419::-;22843:4;22881:2;22870:9;22866:18;22858:26;;22930:9;22924:4;22920:20;22916:1;22905:9;22901:17;22894:47;22958:131;23084:4;22958:131;:::i;:::-;22950:139;;22677:419;;;:::o;23102:224::-;23242:34;23238:1;23230:6;23226:14;23219:58;23311:7;23306:2;23298:6;23294:15;23287:32;23102:224;:::o;23332:366::-;23474:3;23495:67;23559:2;23554:3;23495:67;:::i;:::-;23488:74;;23571:93;23660:3;23571:93;:::i;:::-;23689:2;23684:3;23680:12;23673:19;;23332:366;;;:::o;23704:419::-;23870:4;23908:2;23897:9;23893:18;23885:26;;23957:9;23951:4;23947:20;23943:1;23932:9;23928:17;23921:47;23985:131;24111:4;23985:131;:::i;:::-;23977:139;;23704:419;;;:::o;24129:222::-;24269:34;24265:1;24257:6;24253:14;24246:58;24338:5;24333:2;24325:6;24321:15;24314:30;24129:222;:::o;24357:366::-;24499:3;24520:67;24584:2;24579:3;24520:67;:::i;:::-;24513:74;;24596:93;24685:3;24596:93;:::i;:::-;24714:2;24709:3;24705:12;24698:19;;24357:366;;;:::o;24729:419::-;24895:4;24933:2;24922:9;24918:18;24910:26;;24982:9;24976:4;24972:20;24968:1;24957:9;24953:17;24946:47;25010:131;25136:4;25010:131;:::i;:::-;25002:139;;24729:419;;;:::o;25154:172::-;25294:24;25290:1;25282:6;25278:14;25271:48;25154:172;:::o;25332:366::-;25474:3;25495:67;25559:2;25554:3;25495:67;:::i;:::-;25488:74;;25571:93;25660:3;25571:93;:::i;:::-;25689:2;25684:3;25680:12;25673:19;;25332:366;;;:::o;25704:419::-;25870:4;25908:2;25897:9;25893:18;25885:26;;25957:9;25951:4;25947:20;25943:1;25932:9;25928:17;25921:47;25985:131;26111:4;25985:131;:::i;:::-;25977:139;;25704:419;;;:::o;26129:297::-;26269:34;26265:1;26257:6;26253:14;26246:58;26338:34;26333:2;26325:6;26321:15;26314:59;26407:11;26402:2;26394:6;26390:15;26383:36;26129:297;:::o;26432:366::-;26574:3;26595:67;26659:2;26654:3;26595:67;:::i;:::-;26588:74;;26671:93;26760:3;26671:93;:::i;:::-;26789:2;26784:3;26780:12;26773:19;;26432:366;;;:::o;26804:419::-;26970:4;27008:2;26997:9;26993:18;26985:26;;27057:9;27051:4;27047:20;27043:1;27032:9;27028:17;27021:47;27085:131;27211:4;27085:131;:::i;:::-;27077:139;;26804:419;;;:::o;27229:240::-;27369:34;27365:1;27357:6;27353:14;27346:58;27438:23;27433:2;27425:6;27421:15;27414:48;27229:240;:::o;27475:366::-;27617:3;27638:67;27702:2;27697:3;27638:67;:::i;:::-;27631:74;;27714:93;27803:3;27714:93;:::i;:::-;27832:2;27827:3;27823:12;27816:19;;27475:366;;;:::o;27847:419::-;28013:4;28051:2;28040:9;28036:18;28028:26;;28100:9;28094:4;28090:20;28086:1;28075:9;28071:17;28064:47;28128:131;28254:4;28128:131;:::i;:::-;28120:139;;27847:419;;;:::o;28272:169::-;28412:21;28408:1;28400:6;28396:14;28389:45;28272:169;:::o;28447:366::-;28589:3;28610:67;28674:2;28669:3;28610:67;:::i;:::-;28603:74;;28686:93;28775:3;28686:93;:::i;:::-;28804:2;28799:3;28795:12;28788:19;;28447:366;;;:::o;28819:419::-;28985:4;29023:2;29012:9;29008:18;29000:26;;29072:9;29066:4;29062:20;29058:1;29047:9;29043:17;29036:47;29100:131;29226:4;29100:131;:::i;:::-;29092:139;;28819:419;;;:::o;29244:241::-;29384:34;29380:1;29372:6;29368:14;29361:58;29453:24;29448:2;29440:6;29436:15;29429:49;29244:241;:::o;29491:366::-;29633:3;29654:67;29718:2;29713:3;29654:67;:::i;:::-;29647:74;;29730:93;29819:3;29730:93;:::i;:::-;29848:2;29843:3;29839:12;29832:19;;29491:366;;;:::o;29863:419::-;30029:4;30067:2;30056:9;30052:18;30044:26;;30116:9;30110:4;30106:20;30102:1;30091:9;30087:17;30080:47;30144:131;30270:4;30144:131;:::i;:::-;30136:139;;29863:419;;;:::o;30288:191::-;30328:4;30348:20;30366:1;30348:20;:::i;:::-;30343:25;;30382:20;30400:1;30382:20;:::i;:::-;30377:25;;30421:1;30418;30415:8;30412:34;;;30426:18;;:::i;:::-;30412:34;30471:1;30468;30464:9;30456:17;;30288:191;;;;:::o;30485:147::-;30586:11;30623:3;30608:18;;30485:147;;;;:::o;30638:114::-;;:::o;30758:398::-;30917:3;30938:83;31019:1;31014:3;30938:83;:::i;:::-;30931:90;;31030:93;31119:3;31030:93;:::i;:::-;31148:1;31143:3;31139:11;31132:18;;30758:398;;;:::o;31162:379::-;31346:3;31368:147;31511:3;31368:147;:::i;:::-;31361:154;;31532:3;31525:10;;31162:379;;;:::o;31547:442::-;31696:4;31734:2;31723:9;31719:18;31711:26;;31747:71;31815:1;31804:9;31800:17;31791:6;31747:71;:::i;:::-;31828:72;31896:2;31885:9;31881:18;31872:6;31828:72;:::i;:::-;31910;31978:2;31967:9;31963:18;31954:6;31910:72;:::i;:::-;31547:442;;;;;;:::o;31995:220::-;32135:34;32131:1;32123:6;32119:14;32112:58;32204:3;32199:2;32191:6;32187:15;32180:28;31995:220;:::o;32221:366::-;32363:3;32384:67;32448:2;32443:3;32384:67;:::i;:::-;32377:74;;32460:93;32549:3;32460:93;:::i;:::-;32578:2;32573:3;32569:12;32562:19;;32221:366;;;:::o;32593:419::-;32759:4;32797:2;32786:9;32782:18;32774:26;;32846:9;32840:4;32836:20;32832:1;32821:9;32817:17;32810:47;32874:131;33000:4;32874:131;:::i;:::-;32866:139;;32593:419;;;:::o;33018:180::-;33066:77;33063:1;33056:88;33163:4;33160:1;33153:15;33187:4;33184:1;33177:15;33204:180;33252:77;33249:1;33242:88;33349:4;33346:1;33339:15;33373:4;33370:1;33363:15;33390:143;33447:5;33478:6;33472:13;33463:22;;33494:33;33521:5;33494:33;:::i;:::-;33390:143;;;;:::o;33539:351::-;33609:6;33658:2;33646:9;33637:7;33633:23;33629:32;33626:119;;;33664:79;;:::i;:::-;33626:119;33784:1;33809:64;33865:7;33856:6;33845:9;33841:22;33809:64;:::i;:::-;33799:74;;33755:128;33539:351;;;;:::o;33896:85::-;33941:7;33970:5;33959:16;;33896:85;;;:::o;33987:158::-;34045:9;34078:61;34096:42;34105:32;34131:5;34105:32;:::i;:::-;34096:42;:::i;:::-;34078:61;:::i;:::-;34065:74;;33987:158;;;:::o;34151:147::-;34246:45;34285:5;34246:45;:::i;:::-;34241:3;34234:58;34151:147;;:::o;34304:114::-;34371:6;34405:5;34399:12;34389:22;;34304:114;;;:::o;34424:184::-;34523:11;34557:6;34552:3;34545:19;34597:4;34592:3;34588:14;34573:29;;34424:184;;;;:::o;34614:132::-;34681:4;34704:3;34696:11;;34734:4;34729:3;34725:14;34717:22;;34614:132;;;:::o;34752:108::-;34829:24;34847:5;34829:24;:::i;:::-;34824:3;34817:37;34752:108;;:::o;34866:179::-;34935:10;34956:46;34998:3;34990:6;34956:46;:::i;:::-;35034:4;35029:3;35025:14;35011:28;;34866:179;;;;:::o;35051:113::-;35121:4;35153;35148:3;35144:14;35136:22;;35051:113;;;:::o;35200:732::-;35319:3;35348:54;35396:5;35348:54;:::i;:::-;35418:86;35497:6;35492:3;35418:86;:::i;:::-;35411:93;;35528:56;35578:5;35528:56;:::i;:::-;35607:7;35638:1;35623:284;35648:6;35645:1;35642:13;35623:284;;;35724:6;35718:13;35751:63;35810:3;35795:13;35751:63;:::i;:::-;35744:70;;35837:60;35890:6;35837:60;:::i;:::-;35827:70;;35683:224;35670:1;35667;35663:9;35658:14;;35623:284;;;35627:14;35923:3;35916:10;;35324:608;;;35200:732;;;;:::o;35938:831::-;36201:4;36239:3;36228:9;36224:19;36216:27;;36253:71;36321:1;36310:9;36306:17;36297:6;36253:71;:::i;:::-;36334:80;36410:2;36399:9;36395:18;36386:6;36334:80;:::i;:::-;36461:9;36455:4;36451:20;36446:2;36435:9;36431:18;36424:48;36489:108;36592:4;36583:6;36489:108;:::i;:::-;36481:116;;36607:72;36675:2;36664:9;36660:18;36651:6;36607:72;:::i;:::-;36689:73;36757:3;36746:9;36742:19;36733:6;36689:73;:::i;:::-;35938:831;;;;;;;;:::o;36775:807::-;37024:4;37062:3;37051:9;37047:19;37039:27;;37076:71;37144:1;37133:9;37129:17;37120:6;37076:71;:::i;:::-;37157:72;37225:2;37214:9;37210:18;37201:6;37157:72;:::i;:::-;37239:80;37315:2;37304:9;37300:18;37291:6;37239:80;:::i;:::-;37329;37405:2;37394:9;37390:18;37381:6;37329:80;:::i;:::-;37419:73;37487:3;37476:9;37472:19;37463:6;37419:73;:::i;:::-;37502;37570:3;37559:9;37555:19;37546:6;37502:73;:::i;:::-;36775:807;;;;;;;;;:::o;37588:143::-;37645:5;37676:6;37670:13;37661:22;;37692:33;37719:5;37692:33;:::i;:::-;37588:143;;;;:::o;37737:663::-;37825:6;37833;37841;37890:2;37878:9;37869:7;37865:23;37861:32;37858:119;;;37896:79;;:::i;:::-;37858:119;38016:1;38041:64;38097:7;38088:6;38077:9;38073:22;38041:64;:::i;:::-;38031:74;;37987:128;38154:2;38180:64;38236:7;38227:6;38216:9;38212:22;38180:64;:::i;:::-;38170:74;;38125:129;38293:2;38319:64;38375:7;38366:6;38355:9;38351:22;38319:64;:::i;:::-;38309:74;;38264:129;37737:663;;;;;:::o

Swarm Source

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